Lesson 6 COM、式の構文、その他
3. 書式指定文字列
コントロールのテキストに表示されるテキストは書式指定をすることが出来ます。
角括弧に入れたプロパティ名は既に使用しましたが、そのあたりにはもう少し複雑な規則もあります。
まず、[Property]
においてプロパティ名が有効でない場合は、全体の部分文字列が変更されずに残されます。
この規則は角括弧が入れ子になっている場合はいくらか違うものになります。
[[Property]]
という書式は、最初に Property を検索して、その値を別のプロパティ名として使い、その第二のプロパティを検索します。
二つのプロパティ名のうちのどちらかでも見付からなかった場合には、全体の部分文字列は空文字であると見なされます。
特別な意味を持った文字(たとえば角括弧)を通常の文字として示すためには、バックスラッシュをエスケープ文字として使って、角括弧に入れます。
訳註:例えば、
[
は[\[]
、]
は[\]]
。
[~]
という部分文字列は、ヌル文字に置き換えられます。
これによって、REG_MULTI_SZ のレジストリ文字列をコンパイルすることが可能になります。
[#filekey]
という表記法は、指定された Id を持つファイルのフル・パスを返します。
ただし、これは、 CostInitialize, FileCost または CostFinalize が走った後に限ってのことです。
パスは、ファイルが含まれるコンポーネントがローカルにインストールされるか、ソースから実行されるかによって、左右されます。
[$componentkey]
という表記法は、指定されたコンポーネントのインストール先ディレクトリを返します。
ただし、これも、 CostInitialize, FileCost または CostFinalize が走った後に限ってのことです。
パスは、コンポーネントがローカルにインストールされるか、ソースから実行されるかによって、左右されます。
[!filekey]
という表記法は、通常は [#filekey]
と等価な表記法ですが、
Registry または IniFile のタグの Value 属性の値として使われた場合には、ファイルの短い形式 (8.3形式) のフル・パスを返します。
ツールセットのいろいろな部分(コンパイラやリンカ)は固有のプリプロセッサを持っていて、
外部的に (つまり、コマンド・ラインで) 定義した文字列をソースに注入して使うことが出来るようになっています。
コンパイラ Candle は $(var.Foo)
という構文を使います。
ソース・ファイル自身の中で値を設定するためには、下記のように記述します。
コマンド・ライン・スイッチで設定する場合は、次のようにします。
Light、すなわちリンカも同様な仕組みを持っていますが、構文がほんの少し異なっていて、!(wix.Foo)
となります —
コマンド・ラインは同じです。
地域化される文字列は、!(loc.Foo)
という表記法を使います。
リンカは、これらの文字列が .wxl
地域化ファイルの中で、下記の構文で定義されているものとします。
地域化ファイルもコマンド・ラインで指定します。
地域化文字列とその他の文字列の主な違いは、地域化文字列はオーバーライド可能な性格を持っていることです。 ライブラリや拡張モジュールが地域化文字列の既定値を持つことが出来る一方で、それを後のリンクの過程でオーバーライドすることが出来ます。
これらの値を Windows Installer の通常のプロパティに割り当てるためには、どの場合も、Property タグを使って下さい。
環境変数は、コンパイラでもリンカでも、$(env.Foo)
という構文でアクセスすることが出来ます。