如何自动调整Delphi中TStringGrid的行大小实现自适应显示?

2026-04-10 20:593阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计416个文字,预计阅读时间需要2分钟。

如何自动调整Delphi中TStringGrid的行大小实现自适应显示?

如何自动调整TStringGrid行(DefaultRowHeight)以匹配使用的字体高度?我的做法是:Grid.DefaultRowHeight :=Grid.Canvas.TextHeight('X') + 4;但它不起作用。对于小字体,行的高度太大。更新:这似乎是程序的问题。

如何自动调整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.这是由于当前的字体设置尚未更新:

如何自动调整Delphi中TStringGrid的行大小实现自适应显示?

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

说明:

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

本文共计416个文字,预计阅读时间需要2分钟。

如何自动调整Delphi中TStringGrid的行大小实现自适应显示?

如何自动调整TStringGrid行(DefaultRowHeight)以匹配使用的字体高度?我的做法是:Grid.DefaultRowHeight :=Grid.Canvas.TextHeight('X') + 4;但它不起作用。对于小字体,行的高度太大。更新:这似乎是程序的问题。

如何自动调整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.这是由于当前的字体设置尚未更新:

如何自动调整Delphi中TStringGrid的行大小实现自适应显示?

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

说明:

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