FireMonkeyのTTStringGridのヘッダのフォント

解決


Moe  2023-10-05 13:13:20  No: 151165  IP: 192.*.*.*

どなたかお助け頂けないでしょうか。
Delphi11.3のFMXで開発をしております。一覧画面を作成するにあたりTStringGridを採用しようと思っているのですが、タイトルのフォントサイズはどの様に変えるのでしょうか?
私が行った手順は、TStringGridを右クリック⇒カスタムスタイルの編集⇒スタイルデザイナで、ヘッダの中に含まれるTTextのTextSettingでフォントを変更して適用しました。
この方法では駄目なのでしょうか?

編集 削除
mam  2023-10-06 01:40:54  No: 151166  IP: 192.*.*.*

私がわかっていないだけかもですが、
スタイルデザイナでTHeader.StyledSettingsを変更できないため、
TText.Font.Sizeを変更しても、(Default)に戻ってしまうような気がします。
(間違っていたらすいません)

以下のように、
TStringGrid.OnApplyStyleLookupイベントに
ソースコードを記述すれば可能みたいです。

uses FMX.Header;

procedure TForm1.StringGrid1ApplyStyleLookup(Sender: TObject);
var Header: THeader;
    i: Integer;
begin
  Header:=THeader((Sender as TStringGrid).FindStyleResource('header'));
  if Assigned(Header) then
  begin
    for i:=0 to Header.Count-1 do
    begin
      //フォントサイズと他(太字など)の設定を可能にする
      Header.Items[i].StyledSettings:=
        Header.Items[i].StyledSettings-[TStyledSetting.Size,TStyledSetting.Style];
      Header.Items[i].Font.Size := 20;
      Header.Items[i].Font.Style := [TFontStyle.fsBold];
      Header.Items[i].TextSettings.HorzAlign:=TTextAlign.Center;
    end;
    Header.Height := 48;
  end;
end;


参考URL
https://stackoverflow.com/questions/32131522/change-theader-font-size-in-fmx-tstringgrid

外していたらすいません。

編集 削除
KONNOYA  2023-10-06 03:55:58  No: 151168  IP: 192.*.*.*

ヘッダー部分を自力で描画するやり方です。
TStringGridのDefaultDrawingをFALSEにしても、ヘッダー部分は描画されてしまうので、
StringGrid1DrawColumnHeaderイベントを利用して、背景を塗り潰してから、文字列を描画しています。

これは、背景色を決め打ちで指定してしまっているので、mam様のやり方の方が最も良いと思います。
参考までに投稿。

「FMXコード」

uses
  …
  System.UIConsts;

procedure TForm1.StringGrid1DrawColumnHeader(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF);
begin
  // 矩形補正
  Bounds.Inflate(-Column.Padding.Left, -1);

  // 背景
  Canvas.Fill.Color := claWhite;
  Canvas.Fill.Kind  := TBrushKind.Solid;
  Canvas.FillRect(Bounds, 0, 0, [], 1);

  // 文字列描画
  Canvas.Fill.Color := claRed;
  Canvas.Font.Size  := 12;
  Canvas.Font.Style := [TFontStyle.fsBold];
  Canvas.FillText(Bounds, Column.Header, FALSE, 1, [], Column.HorzAlign, Column.DefaultTextSettings.VertAlign);
end;

編集 削除
Moe  2023-10-07 00:01:17  No: 151170  IP: 192.*.*.*

mamさん、KONNOYAさん

有難うございます。
どちらの方法でもフォントサイズを変更する事ができました。
今回、一覧画面を複数作成しますので、本当に助かりました。

編集 削除