首页 > 解决方案 > 带有多行标题的 TButton 的高度不适合其标题文本

问题描述

在 Windows 10 上的 Delphi 10.4.2 Win32 VCL 应用程序中,我有一个TButtonwith WordWrap = Trueand Caption = 'SAVE TO INTERNET BOOKMARKS FOLDER...'

图片

从屏幕截图中可以看出,按钮的高度不会自动适应其Caption文本。

是否有TButton自动实现此功能的功能,还是我必须手动调整?

标签: delphimultilinedelphi-10.4-sydney

解决方案


TButton不, VCL不会自动调整 a 的高度。

如果您更改按钮标题的字体,或将其设为多行,您通常必须自己明确调整按钮的高度。

作为比较,TEdit确实有一个AutoSize属性。这并不映射到 Win32 EDIT 控件的特性(如窗口样式),而是纯粹在 VCL 中实现(请参阅 参考资料Vcl.StdCtrls.TCustomEdit.AdjustHeight())。

但是,我刚刚发现底层 Win32 BUTTON 控件确实通过BCM_GETIDEALSIZE消息或Button_GetIdealSize()宏提供了此功能:

uses
  ..., Winapi.CommCtrl;

var
  S: TSize;
begin
  S.cx := Button1.Width;
  if Button_GetIdealSize(Button1.Handle, S) then
    Button1.Height := S.cy;

这将在给定按钮的当前文本和所需宽度的情况下设置高度。如果S最初为零,您将获得按钮的首选宽度和高度。

Win32 控件提供的功能比其 VCL 包装器提供的更多功能并不罕见,因此查看 Win32 文档通常是一个好主意,尤其是您可以发送到控件的消息(以及它的样式)。


推荐阅读