如何自动调整TStringGrid行(DefaultRowHeight)的大小以匹配使用的字体的高度?
我可以像这样做:
Grid.DefaultRowHeight:= Grid.Canvas.TextHeight('X')+ 4;
但它不起作用。对于小字体,行高太大了。
更新:
实际上这似乎是程序逻辑的问题。如果我多次更改字体,那么当前行高将与前一个字体更改事件中的字体大小匹配(它落后一步)。
我使用此代码拦截字体大小更改:
我可以像这样做:
Grid.DefaultRowHeight:= Grid.Canvas.TextHeight('X')+ 4;
但它不起作用。对于小字体,行高太大了。
更新:
实际上这似乎是程序逻辑的问题。如果我多次更改字体,那么当前行高将与前一个字体更改事件中的字体大小匹配(它落后一步)。
我使用此代码拦截字体大小更改:
procedure TStrGrid.CMFontChanged(var Message: TMessage);
begin
inherited; // let TControl react first
DefaultRowHeight:= Canvas.TextHeight('ApApM')+ 4;
end;
它好像会执行以下步骤:
begin
DefaultRowHeight:= Canvas.TextHeight('ApApM')+ 4;
inherited;
end;
(就像首先更改高度,然后实际设置正确的字体大小 - 因此高度落后一步)
Canvas.Font
。设置Canvas.Font
不会触发CMFontChanged
。 - NGLN