トップへ(mam-mam.net/)

FindStyleResourceでリソースを取得してコンポーネントのスタイル変更(Delphi FMX)

FindStyleResourceでリソースを取得してコンポーネントのスタイル変更(Delphi FMX)

Delphi(FMX)で、OnApplyStyleLookupイベント(スタイルが適用されたイベント)で、FindStyleResource メソッドを使用してスタイルを適用する方法を解説します。

Delphiを起動してプロジェクトを作成し、オブジェクトを配置し、プロパティを設定する

Delphiを起動し[ファイル]→[新規作成]→[マルチデバイス アプリケーション-Delphi]をクリックします。
[空のアプリケーション] を選択して [OK]ボタンを押します。 ツールパレットからTEditをフォームへドラッグ&ドロップします。

次に、Edit1を選択し、IDEの左下 [オブジェクトインスペクタ] の[プロパティ]タブの[TextPrompt]プロパティに、"入力してください" と入力します。
Edit1が入力されていない場合に「入力してください」と表示されるようになりました。

プログラミング

Edit1をマウスでクリックして選択し、IDEの左下 [オブジェクトインスペクタ] の[イベント]タブに切り替え、OnApplyStyleLookupの右側の何もないところをダブルクリックします。
以下ソースコードを入力します。

procedure TForm1.Edit1ApplyStyleLookup(Sender: TObject);
var
  Obj: TFmxObject;
begin
  PromptObj := Edit1.FindStyleResource('prompt');
  if PromptObj is TLabel then
  begin
    TLabel(Obj).TextSettings.FontColor:=TAlphaColorRec.Red;
    TLabel(Obj).TextAlign := TTextAlign.Center;
  end;
end;

実行ボタンを押す

実行ボタンを押すと、コンパイルして起動します。
Edit1の中央に赤字で「入力してください」と表示されるようになりました。

上記ソースコードは、スタイルデザイナでの「prompt(TLabel)」のプロパティを書き換えています。

Opacityを変更したり、入力した文字だけ回転させることも可能です。

uses FMX.Layouts;

procedure TForm1.Edit1ApplyStyleLookup(Sender: TObject);
var
  Obj: TFmxObject;
begin
  Obj := Edit1.FindStyleResource('prompt');
  if Obj is TLabel then
  begin
    TLabel(Obj).TextSettings.FontColor:=TAlphaColorRec.Red;
    TLabel(Obj).TextAlign := TTextAlign.Center;
    TLabel(Obj).Opacity:=0.2;
  end;

  Obj:=Edit1.FindStyleResource('content');
  if Obj is TLayout then
  begin
    TLayout(Obj).RotationAngle:=10;
  end;
end;