ProgressBar コントロールの作成

Windows インストーラーには、アクション表示ダイアログに進行状況インジケーターを表示する機能が含まれています。 ProgressBar コントロールは、個々のコンポーネントのインストールを視覚的に表現し、インストールが完了するまでの、残り時間に対する経過時間の合計、または残り時間の概算のいずれかを報告します。

インストールにかかる予想総時間を割り出すために、インストーラーでは、実行スクリプトの生成中の各アクションで想定される進行状況のティック数の合計が追跡されます。 スクリプトの生成が完了すると、進行状況のティック数の合計が格納され、インストールが開始されます。

スクリプト内の各アクションが実行される度に、経過した進行状況のティック数を詳細に示す進行状況メッセージがアクティブなメッセージ ハンドラーに送信されます。 各進行状況メッセージごとに、SetProgress ControlEvent が現在アクティブなダイアログ ボックスにブロードキャストされます。 インストーラーからの SetProgress ControlEvent メッセージを受信できるよう、UI シーケンスは、スクリプト実行中にアクション表示ダイアログ ボックスを作成するように作成する必要があります。

アクション表示ダイアログ ボックスは、SetProgress ControlEvent を受信すると、EventMapping テーブルをチェックして、ControlEvent をサブスクライブしているコントロールがないか確認します。 アクション表示ダイアログ ボックスの ProgressBar コントロールは、Attributes 列で指定された Progress Control 属性によってサブスクライブされています。 Progress Control 属性は、ProgressBar コントロールに "ticksSoFar" と "totalTicks" の値を SetProgress ControlEvent と共に渡すことを指定します。 進行状況バーのコントロールでは、この情報を使用して、インストールの場合は左から右へ、ロールバック操作の場合は右から左へバーのグラフィックを進めます。

さらに、インストーラーは進行状況メッセージごとに TimeRemaining ControlEvent をブロードキャストします。 インストールの残り時間については、まず実行速度 (経過したティック数の合計をインストール開始からの合計時間で割ったもの) を計算することで決定されます。 残りの合計ティック数を実行速度で割った値が、おおよその残り時間となります。

アクション表示ダイアログ ボックスは、TimeRemaining ControlEvent を受信すると、再び EventMapping テーブルでサブスクライブされているコントロールがないか調べます。 残りの時間を表示するには、Text コントロールが TimeRemaining ControlEvent にサブスクライブされ、その TimeRemaining コントロール属性が Attributes 列に指定されている必要があります。

サブスクライブされた Text コントロールは、UIText テーブルで "TimeRemaining" という名前のパラメーター化されたテンプレート文字列をクエリします。 この文字列には、2 つのパラメーター [1] (分) と [2] (秒) があります。 Text コントロールは、各値を分と秒に変換し、TimeRemaining テンプレート文字列を評価し、Text コントロールを新しい情報で更新します。

UI の表示レベルが基本以下に設定されている場合、インストーラーには、進行状況バーと TimeRemaining テキスト フィールドを含む既定のダイアログ ボックスが表示されます。 詳細については、「ユーザー インターフェイスのレベル」を参照してください。