2015-03-20 2 views
2

Есть ли лаконичный способ доступа к холсту окна подсказки? Я не хочу ничего рисовать на холсте - я просто назначу свойству Hint компонента, но я хочу узнать ширину текста, который будет выполнять Windows, используя любой шрифт, который используется для текста окна подсказки.Delphi - доступ к холсту окна подсказки

* Причина *

Я пытаюсь построить намек окна с закладками столбцов в них, например,

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

и я хочу, чтобы имена на всех вкладках находились друг под другом. Пример, показанный выше, будет правильно отображаться только в том случае, если шрифт подсказки является однораздельным. Я могу достичь этого с заданным пропорциональным шрифтом методом проб и ошибок, заполнив строки нужным количеством пробелов, но я хочу, чтобы он работал для любого шрифта. Большинство примеров, которые я видел, похоже, предназначены для изменения внешнего вида окна подсказки - все, что я хочу сделать, это позвонить в Canvas.TextWidth, чтобы я мог рассчитать, какое дополнение нужно добавить для «нажимать» строку на следующую вкладку стоп.

* UPDATE *

я трудился под недоразумению - Я предполагал, что контроль намек уважал символ табуляции, но на самом деле, кажется, игнорировать его. Компонент TLabel, с другой стороны, уважает символ табуляции - он, кажется, переместится на следующий кратный 10 или около того ширины пространства.

+0

плюс один для первого класса ответ Том Дик и Гарри ссылка –

ответ

7

Существует два способа достижения желаемого.

  1. Это свойство Screen.HintFont, которое вы можете назначить любому холсту, который вы хотите, и получить размер текста подсказки.
  2. Существует глобальное HintWindowClass Приложение Delphi использует для создания окон подсказок, и вы можете создавать свои собственные и использовать свой холст для выполнения текстового измерения.

Вы можете использовать его как это:

var 
    HintCtrl: THintWindow; 

    HintCtrl := HintWindowClass.Create(nil); 
    HintCtrl.Canvas.TextWidth('abc'); 
    ... 
+0

. Большое спасибо. Просто вопрос: зачем вы создаете переменную 'HintCtrl' с помощью' HintCtrl: = HintWindowClass.Create (nil); '- почему бы не' HintCtrl: = THintWindow.Create (nil); '? – rossmcm

+0

Вы также можете использовать 'THintWindow', но поскольку« HintWindowClass »используется для настройки подсказок, я предпочитаю использовать более общее решение. Разумеется, если будет реализовано настраиваемое поведение, то ваш «HintCtrl» должен быть создан после того, как «HintWindowClass» будет присвоено другое значение. –

Смежные вопросы