delphi - 带有多行标题的 TButton 的高度不适合其标题文本
问题描述
在 Windows 10 上的 Delphi 10.4.2 Win32 VCL 应用程序中,我有一个TButton
with WordWrap = True
and Caption = 'SAVE TO INTERNET BOOKMARKS FOLDER...'
:
从屏幕截图中可以看出,按钮的高度不会自动适应其Caption
文本。
是否有TButton
自动实现此功能的功能,还是我必须手动调整?
解决方案
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 文档通常是一个好主意,尤其是您可以发送到控件的消息(以及它的样式)。
推荐阅读
- python - 使用 SqlAlchemy 创建聚集列存储索引(MS SQL Server)?
- sql - 每日数据和总数据
- ios - 在 HTTPS 可调用的 Firebase Cloud Functions 中,错误代码的名称在 iOS 中是否可用?
- graphite - 使用 collectd 聚合单个指标?
- python - Kafka 主题的 Boto 分页
- python - 在不使用 tf.session() 的情况下获取 Tensorflow model.predict 的值
- javascript - React Native 组件未使用 componentWillMount 或 componentDidMount 中的异步 redux 操作呈现
- spring - 反应中的Spring Boot分页实现
- c# - 如何从两个不同的文件 xml 和 json 中获取输入并显示 o/p
- postgresql - 当 COALESCE() 应确保不为空时,为什么会违反此 NOT NULL 约束?