gpt4 book ai didi

delphi - 如何自动调整 TStringGrid 行的大小

转载 作者:行者123 更新时间:2023-12-03 15:47:10 25 4
gpt4 key购买 nike

如何自动调整 TStringGrid 行 (DefaultRowHeight) 的大小以匹配所使用字体的高度?我做了类似的事情

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;

(就像首先它改变高度,然后它实际上设置正确的字体大小 - 因此高度落后一步)

最佳答案

它与此顺序无关:继承的 CMFontChanged 消息处理程序和 DefaultRowHeight 属性 setter 都调用 invalidate。这是由于当前字体设置尚未更新所致:

procedure TStrGrid.CMFontchanged(var Message: TMessage);
begin
Canvas.Font := Font;
DefaultRowHeight := Canvas.TextHeight('Ap') + GridLineWidth + 3;
end;

说明:

仅使标记窗口无效,以便将来在某个地方重新绘制窗口(网格)。在获取文本高度后肯定会发生这种情况。作为替代方案,您可以在请求新文本高度之前调用 Repaint,但这会导致双重重绘,因此需要设置 Canvas.Font

关于delphi - 如何自动调整 TStringGrid 行的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7053419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com