带有多行标题的 TButton 的高度不适合其 caption-text
Height of TButton with Multiline caption does not fit its caption-text
在 Delphi 10.4.2 Win32 VCL 应用程序 Windows 10 上,我有一个 TButton
和 WordWrap = True
和 Caption = '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)。
在 Delphi 10.4.2 Win32 VCL 应用程序 Windows 10 上,我有一个 TButton
和 WordWrap = True
和 Caption = '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)。