是否有一种简洁的方式访问提示窗口的画布?我不想在画布上绘制任何东西-我只是将其分配给组件的Hint
属性-但我想确定Windows将使用用于提示窗口文本的任何字体呈现的文本宽度。
* 原因 *
我正在尝试构建其中带有选项卡式列的提示窗口。
SomeControl.Hint :=
'Item 1: ' + #9 + 'Tom' + #13 +
'Item 2: ' + #9 + 'Dick' + #13 +
'Another Item: ' + #9 + 'Harry' + #13 ;
并且我希望名称在所有选项卡下都在下面。仅当提示字体为等宽字体时,上面显示的示例才能正确制表。我可以通过反复尝试用给定的比例字体来实现它,方法是用正确的空格数填充行,但是我希望它适用于任何字体。我看到的大多数示例似乎都是为了更改提示窗口的外观-我要做的就是能够调用
Canvas.TextWidth
,这样我就可以计算出需要添加哪些填充以将行“推”到下一个制表位。*更新*
我在误解下工作-我以为提示控件尊重制表符,但实际上它似乎忽略了它。另一方面,TLabel组件确实遵循制表符-似乎移至10个左右的空格宽度的下一个倍数。
最佳答案
有两种方法可以实现您想要的。
有一个Screen.HintFont
属性,可以将其分配给所需的任何画布并获取提示文本尺寸。
全局HintWindowClass
Delphi应用程序用于创建提示窗口,您可以创建自己的窗口并使用其画布进行文本测量。
您可以像这样使用它:
var
HintCtrl: THintWindow;
HintCtrl := HintWindowClass.Create(nil);
HintCtrl.Canvas.TextWidth('abc');
...