Delphi 10.1 BerlinのFireMonkeyアプリケーションでスタイルをリソースから読み込んで適用するサンプルアプリケーションです。
FireMonkey Premium Styles Pack for RAD Studio 10.1 BerlinをEmbarcaderoの登録ユーザーのページからダウンロードして、プロジェクトの下の「style」に配置します。
StyleSample
└style
├Android
├iOS
├MacOS
│├Copper.style
│├…
│└Vapor.style
└Win
├Copper.style
├CopperDark.style
├CoralCrystal.style
├CoralDark.style
├Diamond.style
├EmeraldCrystal.style
├EmeraldDark.style
├Jet.style
├Radiant.style
├Sterling.style
└Vapor.style
プラットフォームごとにリソースファイルを作成します。
リソース識別子はスタイル名、リソースタイプはRCDATAにします。
Resource.win.rc
CopperStyle RCDATA "style\\Win\\Copper.style"
CopperDarkStyle RCDATA "style\\Win\\CopperDark.style"
CoralCrystalStyle RCDATA "style\\Win\\CoralCrystal.style"
…
Resource.mac.rc
CopperStyle RCDATA "style\\MacOS\\Copper.style"
CopperDarkStyle RCDATA "style\\MacOS\\CopperDark.style"
CoralCrystalStyle RCDATA "style\\MacOS\\CoralCrystal.style"
…
brcc32.exeを使って、rcファイルからresファイルを作成します。
"c:\program files (x86)\embarcadero\studio\18.0\bin\brcc32.exe" Resource.win.rc -foResource.win.res
"c:\program files (x86)\embarcadero\studio\18.0\bin\brcc32.exe" Resource.mac.rc -foResource.mac.res
条件付きコンパイルで、プラットフォーム用のリソースファイルを指定します。
{$IFDEF MACOS}
{$R Resource.mac.res}
{$ENDIF}
{$IFDEF MSWINDOWS}
{$R Resource.win.res}
{$ENDIF}
プラットフォームごとに分けない場合は、rcファイルをプロジェクトに追加します。
プロジェクトに追加したrcファイルは、プロジェクトをビルドしたときにresファイルが作成されます。
また「{$R ~}」を追加する必要もありません。
スタイルのリソース名を定数で定義します。
private const
StyleNames: array [0 .. 10] of string = ('CopperStyle', 'CopperDarkStyle',
'CoralCrystalStyle', 'CoralDarkStyle', 'DiamondStyle',
'EmeraldCrystalStyle', 'EmeraldDarkStyle', 'JetStyle', 'RadiantStyle',
'SterlingStyle', 'VaporStyle');
リソースからスタイルの名前を取得します。
function TForm1.LoadStyleNames: TArray<string>;
var
StyleName: string;
Style: TFmxObject;
StyleDescription: TStyleDescription;
List: TList<string>;
begin
List := TList<string>.Create;
for StyleName in StyleNames do
begin
Style := TStyleStreaming.LoadFromResource(
HInstance,
StyleName,
RT_RCDATA);
StyleDescription := TStyleManager.FindStyleDescriptor(Style);
List.Add(StyleDescription.Title);
StyleDescription.Free;
Style.Free;
end;
Result := List.ToArray;
end;
スタイルによっては、StyleDescriptionが設定されていないものがあります。
その場合は「TStyleManager.FindStyleDescriptor」はnilを返します。
取得したスタイル名をリストボックスに登録します。
procedure TForm1.LoadListBoxItem;
begin
ListBoxStyleNames.Items.AddStrings(LoadStyleNames);
end;
FormのOnCreateイベントで上の処理を呼び出します。
procedure TForm1.FormCreate(Sender: TObject);
begin
LoadListBoxItem;
end;
リストボックスの項目が選択されたら、選択されたスタイルをフォームに適用します。
procedure TForm1.ListBoxStyleNamesChange(Sender: TObject);
begin
if ListBoxStyleNames.Selected <> nil then
SetStyle(ListBoxStyleNames.Selected.Index);
end;
procedure TForm1.SetStyle(const AStyleIndex: Integer);
var
Control: TFmxObject;
begin
Control := TStyleStreaming.LoadFromResource(
HInstance,
StyleNames[AStyleIndex],
RT_RCDATA);
TStyleManager.SetStyle(Control);
end;
ボタンを押したら、デフォルトのスタイルを適用します。
procedure TForm1.ButtonDefaultClick(Sender: TObject);
begin
TStyleManager.SetStyle(nil);
end;
サンプルプロジェクトはこちらからダウンロードできます。
スタイルのファイルはサイズが大きいので入れていません。
Embarcadero登録ユーザーのページからダウンロードしてください。