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

delphi – 如何自动调整TStringGrid行的大小,第1张

概述如何自动调整TStringGrid行(DefaultRowHeight)以匹配使用的字体高度? 我做的事情 Grid.DefaultRowHeight:= Grid.Canvas.TextHeight(‘X’) + 4; 但它不起作用.对于小字体,行的高度太大. 更新: 这似乎是程序逻辑的一个问题.如果我多次更改字体,则行的当前高度与先前字体更改事件的字体大小相匹配(它落后一步). 我使用此代码拦 如何自动调整TStringGrID行(DefaultRowHeight)以匹配使用的字体高度?
我做的事情

GrID.DefaultRowHeight:= GrID.Canvas.TextHeight(‘X’) + 4;

但它不起作用.对于小字体,行的高度太大.

更新:

这似乎是程序逻辑的一个问题.如果我多次@R_661_6502@,则行的当前高度与先前字体更改事件的字体大小相匹配(它落后一步).

我使用此代码拦截字体的大小更改:

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行的大小全部内容,希望文章能够帮你解决delphi – 如何自动调整TStringGrid行的大小所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1216198.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存