Delphi-доступ к холсту окна подсказки
Существует ли краткий способ доступа к холсту окна подсказки? Я не хочу ничего рисовать на холсте - я просто назначу свойству компонента Hint
, но я хочу узнать ширину текста, который Windows будет отображать, используя любой шрифт, используемый для текста окна подсказки.
* Причина *
Я пытаюсь построить окна подсказок с вкладками столбцов в них, например
SomeControl.Hint :=
'Item 1: ' + #9 + 'Tom' + #13 +
'Item 2: ' + #9 + 'Dick' + #13 +
'Another Item: ' + #9 + 'Harry' + #13 ;
И я хочу, чтобы имена все вкладывались друг под другом. Пример, показанный выше, будет корректным только в том случае, если шрифт подсказки будет моноразрядным. Я могу добиться этого с помощью данного пропорционального шрифта методом проб и ошибок, заполняя строки правильным количеством пробелов, но я хочу, чтобы это работало для любого шрифта. Большинство примеров, которые я видел, похоже, предназначены для изменения внешнего вида окна подсказки - все, что я хочу сделать, это вызвать Canvas.TextWidth
, чтобы я мог вычислить, какое заполнение мне нужно добавить, чтобы "протолкнуть" строку над следующей остановкой вкладки.
* обновление *
Я работал в заблуждении - я предполагал, что контроль подсказок уважает символ табуляции, но на самом деле он, кажется, игнорирует его. Компонент TLabel, с другой стороны, уважает символ табуляции - он, кажется, перемещается в следующий кратный 10 или около того пробелов.
1 ответ:
Существует два способа добиться того, чего вы хотите.
- есть свойство
Screen.HintFont
, которое вы можете назначить любому холсту и получить размеры текста подсказки.- существует глобальное
HintWindowClass
Приложение Delphi, используемое для создания окон подсказок, и вы можете создать свой собственный и использовать его холст для измерения текста.Вы можете использовать его следующим образом:
var HintCtrl: THintWindow; HintCtrl := HintWindowClass.Create(nil); HintCtrl.Canvas.TextWidth('abc'); ...