Delphi - 访问提示窗口的画布

时间:2015-03-20 00:02:00

标签: delphi canvas delphi-2007 hint

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

*原因*

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

SomeControl.Hint := 
  'Item 1:       ' + #9 + 'Tom' + #13 +
  'Item 2:       ' + #9 + 'Dick' + #13 +
  'Another Item: ' + #9 + 'Harry' + #13 ;

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

*更新*

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

1 个答案:

答案 0 :(得分:7)

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

  1. Screen.HintFont属性,但您可以分配给任何所需的画布并获取提示文字尺寸。
  2. 全局HintWindowClass Delphi应用程序用于创建提示窗口,您可以创建自己的窗口并使用其画布进行文本测量。
  3. 你可以像这样使用它:

    var
      HintCtrl: THintWindow;
    
      HintCtrl := HintWindowClass.Create(nil);
      HintCtrl.Canvas.TextWidth('abc');
      ...