Delphi - 访问提示窗口的画布

ros*_*mcm 2 delphi canvas hint delphi-2007

是否有一种简洁的方式来访问提示窗口的画布?我不想在画布上绘制任何东西 - 我将只分配给组件的Hint属性 - 但我确实想要找出Windows使用提示窗口文本使用的任何字体呈现的文本宽度.

*原因*

我正在尝试构建带有标签列的提示窗口,例如

SomeControl.Hint := 
  'Item 1:       ' + #9 + 'Tom' + #13 +
  'Item 2:       ' + #9 + 'Dick' + #13 +
  'Another Item: ' + #9 + 'Harry' + #13 ;
Run Code Online (Sandbox Code Playgroud)

我希望所有标签的名称都在彼此之下.仅当提示字体为单倍间距时,上面显示的示例才会正确显示.我可以通过试验和错误通过填充具有正确数量的空格的行来使用给定的比例字体来实现它,但我希望它适用于任何字体.我看到的大多数示例似乎都是为了改变提示窗口的外观 - 我想做的就是能够调用Canvas.TextWidth所以我可以计算我需要添加什么填充来"推"下一个制表位上的线.

*更新*

我在误解中工作 - 我假设提示控件尊重制表符,但实际上它似乎忽略了它.另一方面,TLabel组件确实尊重制表符 - 它似乎移动到10个左右空间宽度的下一个倍数.

Dal*_*kar 7

有两种方法可以达到你想要的效果.

  1. 有一些Screen.HintFont属性可以分配给您想要的任何画布,并获得提示文本尺寸.
  2. 全局HintWindowClassDelphi应用程序用于创建提示窗口,您可以创建自己的窗口并使用其画布进行文本测量.

你可以像这样使用它:

var
  HintCtrl: THintWindow;

  HintCtrl := HintWindowClass.Create(nil);
  HintCtrl.Canvas.TextWidth('abc');
  ...
Run Code Online (Sandbox Code Playgroud)