ステップ 3 - スタイルリソースを RCDATA として追加する(C++)
FireMonkey コンポーネントの作成(C++) への移動
各 .style
ファイルには、対応するプラットフォーム固有の(1 行の).rc
ファイルが必要です。このファイルのルート名はコンポーネント ユニットに一致します。
たとえば、Windows の .rc ファイルと Mac の .rc ファイルは以下のようになります。
- DialogButtons.win.rc
DialogButtonPanelStyle RCDATA "DialogButtonPanel_win.style"
- DialogButtons.mac.rc
DialogButtonPanelStyle RCDATA "DialogButtonPanel_mac.style"
スタイルリソースを RCDATA として追加する
- [プロジェクト マネージャ]で DialogButtonsPackage.bpl プロジェクトをダブルクリックしてアクティブにします。
- 作成しなければならない
.rc
ファイルごとに以下の作業を行います。- [ファイル|新規作成|その他...|その他のファイル|テキスト ファイル]を選択し、[新規ファイル]ダイアログで[.rc リソース ファイル]を選択します。
- 上に示した 1 行を追加し、正しいファイル名で保存します。
.rc
ファイルがプロジェクト ツリーの[Contains]ノードに表示されます (編集しやすいよう.style
ファイルをプロジェクトに追加することもできますが、追加しなくてもコンパイルには問題ありません。.style
ファイルは .rc ファイルと同じディレクトリにあるので、自動的に見つかります)。
- これらのスタイルを読み込むために、DialogButtons.h で TStyledControl.GetStyleObject のオーバーライドを宣言し実装します。
// DialogButtons.h
#include<System.Types.hpp>
#include<FMX.Styles.hpp>
...
protected:
Fmx::Types::TFmxObject* __fastcall GetStyleObject(void);
// DialogButtons.cpp
...
Fmx::Types::TFmxObject* __fastcall TDialogButtonPanel::GetStyleObject(void)
{
const UnicodeString Style = "DialogButtonPanelStyle";
if (StyleLookup == "") {
return TStyleManager::LoadFromResource((unsigned int)HInstance, Style,
(wchar_t*) RT_RCDATA);
}
return TStyledControl::GetStyleObject();
}
プラットフォームごとの条件指令によって、.rc
ファイルからコンパイルされた適切な .res
が含められます。RCDATA 項目の名前(両方のファイルで同一)は関数内の定数になっています。
メモ:
.style
ファイルにあるルート(TRectangle)コンポーネントの StyleName は RCDATA 名と同一です。StyleName が必要なのはスタイルがスタイル ブックに組み込まれている場合で、StyleName はスタイルの内容を表す名前になっています。そのため、含めておくことを推奨します。ただし、直接読み込まれたときは、ルートの StyleName は使用されず、不必要なものとして扱われます。
この関数がスタイルを読み込むのは、StyleLookup が空白である場合だけです。TStyleManager を使って現在のモジュール ハンドル(設計時はパッケージの
.bpl
、実行時はプログラムの.exe
または.dll
)でスタイルを読み込みます。存在しない RCDATA にアクセスしようとすると例外が発生するからです。空白でない場合は、継承した動作により、名前の指定されたスタイルを見つけるか、クラス名からデフォルト スタイルを見つけます。
- コードが準備できたら、[プロジェクト マネージャ]でパッケージ プロジェクトを右クリックして、[インストール]を選択します。これによりパッケージ プロジェクトがコンパイルされ、コンポーネントが[ツール パレット]に追加されます。