带有多行标题的 TButton 的高度不适合其 caption-text

Height of TButton with Multiline caption does not fit its caption-text

在 Delphi 10.4.2 Win32 VCL 应用程序 Windows 10 上,我有一个 TButtonWordWrap = TrueCaption = 'SAVE TO INTERNET BOOKMARKS FOLDER...':

正如您从屏幕截图中看到的那样,按钮的高度不会自动适合其 Caption 文本。

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

不,VCL 不提供 TButton 高度的自动调整。

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

作为比较,TEdit 确实有一个 AutoSize 属性。这不映射到 Win32 EDIT 控件的功能(如 window style),而是纯粹在 VCL 中实现(参见 Vcl.StdCtrls.TCustomEdit.AdjustHeight())。

但是,我刚刚发现底层 Win32 BUTTON 控件确实通过 BCM_GETIDEALSIZE message or 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 文档通常是个好主意,尤其是 messages you can send to the control (and also its styles)。