0
votes

I've searched this question and found this.

so, I wrote a OnApplyStyleLookup event handler like this:

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;

text align is changed, but font size and style are not applied.

I'm using XE7.

1

1 Answers

2
votes

For apply changed text style, you must set StyledSettings property for changed object. So, final code looks like this (i dont like with operator)

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;