更改 FMX TStringGrid 中的 THeader 字体大小

Change THeader font size in FMX TStringGrid

我搜索了这个问题并找到了 this

所以,我写了一个 OnApplyStyleLookup 事件处理程序,如下所示:

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
      with Header.Items[I].Font do
      begin
        Header.Items[I].TextSettings.HorzAlign := TTextAlign.Center;
        Size := 100;
        Style := [TFontStyle.fsBold];
//        SetSettings('Arial', 100, [TFontStyle.fsBold]);
      end;
    Header.Height := 48;
  end;
//  TStringGrid(Sender).Realign;
end;

文本对齐方式已更改,但未应用字体大小和样式。

我正在使用 XE7。

要应用更改的文本样式,您必须为更改的对象设置StyledSettings 属性。 所以,最终代码看起来像这样(我不喜欢 with 运算符)

procedure TForm1.StringGrid1ApplyStyleLookup(Sender: TObject);
var
  Header: THeader;
  HeaderItem: THeaderItem;
  I: Integer;
begin
  Header := THeader((Sender as TStringGrid).FindStyleResource('header'));
  if Assigned(Header) then
    begin
      for I := 0 to Header.Count - 1 do
        begin
          HeaderItem := Header.Items[I];

          HeaderItem.Font.Size := 100;
          HeaderItem.Font.Style := [TFontStyle.fsBold];
          HeaderItem.TextSettings.HorzAlign := TTextAlign.Center;
          // new code line:
          HeaderItem.StyledSettings := HeaderItem.StyledSettings - [TStyledSetting.Size, TStyledSetting.Style];
        end;
      Header.Height := 48;
    end;
end;