Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2020年12月18日] [更新 2020年12月18日]
FireMonkey の TEdit の背景色を設定する方法
動作確認等 Windows 7 U64(SP1) + Delphi 10.3.3 Community FMX-32



VCL の TEdit は Windows の Edit のラッパークラスです.Color プロパティがあり TEdit コントロールの背景色が変更できます.
FireMonkey フレームワークはマルチデバイス用のアプリ開発用です.そのため,より柔軟な設定ができるようになっています.その 1 つが TLayout を使用したスタイルの設定です.この Layout の機能は,設定時に設定する場合は,TLayout そのものを意識する必要はありません.以下は TEdit の背景色を変更する例です.

FireMonkey のコントロールは,どのコントロールでも親子関係を設定できます.TRectangel (矩形描画用コントロール - Shapes タブ) を配置して,TEdit の親とすることはできますが,TEdit の背景色は白てす.したがって,TEdit と重なった領域の TRectangle は見えなくなってしまいます.
そこで,TRectangle を TEdit の background オブジェクト,あるいは content オブジェクトの子コントロールにする方法を利用します.VCL の TEdit でこのような機能を実現するには複雑なコーディングが必要でしたが,FirerMonkey では次のようにして設計時に設定できます.


  • [ファイル] [新規作成] [マルチデバイスアプリケーション] を選択
  • [空のアプリケーション] を選択
  • フォームに TEdit を配置
  • その TEdit を選択した状態でマウスの右ボタンクリックで [カスタムスタイルの編集] を選択

すると,下図の [スタイルデザイナ] の画面になります.




構造ペインの [Edit1Style1] をダブルクリックして展開します.コンポーネントパレットの Shapes タブにある TRectangle を [background] までドラッグしてドロップします.
削除する時は,追加したオブジェクトを選択して,左上の削除アイコンをクリックします.




構造ペインの [Rectangle1Style] を選択してオブジェクト・インスペクタで以下の設定をします.


  • Align を Client に
  • HitTest を False に
  • Fill.Color を適当な色に

TRectangle を TEdit の background オブジェクトの子コントロールに設定したので,Aiign でサイズを親と同じにします.HitTest を False にして,キー操作やマウス操作を透過して background オブジェクトが受け取れるようにします.後は必要に応じてオブジェクト・インスペクタで設定します.
コンパイルして実行する前に,設定したスタイルを適用することを忘れないでください.適用しないと,設定内容が反映されません.
この [スタイルの適用] は,設計時の適用です.保存はしません.




下図は実行例です.
TRectangle の枠線は,Stroke.Kind の値を None にすれば描画しません.TEdit の枠線を見えるようにするには TRectangle の Margin の値を上下左右共に 1 以上にします.




TRectangle を content オブジェクトの子コントロールにすると下図のようになります.content は,TEdit の編集領域のことです.




上の手順で背景色を設定した TEdit の背景色を,実行時に変更する例です.FindStyleResource メソッドで対象のオブジェクトを取得して,そのオブジェクトのプロパティを設定します.
下図がその結果ですが,このサンプルでは,TEdit の枠線を表示するようにしています.また,比較のために,背景色を変更しないデフォルトの TEdit を配置しています.




procedure TForm1.Button1Click(Sender: TObject);
var
  LEditRectangle : TFmxObject;
begin
  // 対象のオブジェクトを取得する
  LEditRectangle := Edit1.FindStyleResource('Rectangle1Style');

  if Assigned(LEditRectangle) then begin
    // オブジェクトのプロパティを設定する
    // TRectangle の使用には uses に FMX.Objects が必要
    TRectangle(LEditRectangle).Fill.Color := TAlphaColorRec.Burlywood;
  end;
end;