В Windows, если столбец слишком узкий, чтобы показать полный текст, tooltip
отображается в строке и может показать вам отсутствующий текст:
Важно отметить, что окно подсказки имеет значение inline с отображаемым текстом (то есть он не "ниже" узла).
Это было бы эквивалентно VirtualTreeview HintMode hmToolTip
:
TVTHintMode = (
hmDefault, // show the hint of the control
hmHint, // show node specific hint string returned by the application
hmHintAndDefault, // same as hmHint but show the control's hint if no node is concerned
hmTooltip // show the text of the node if it isn't already fully shown
);
- hmTooltip : показать текст узла, если он еще не полностью показан
А также подсказки; не просто подсказки
Исследователь также имеет возможность показать подсказку , которая является окном подсказки, которое всплывает около или ниже ячейки, в которой находится:
Это будет эквивалентно в VirtualTreeview hmHint
:
- hmHint : показать строку подсказки для конкретного узла, возвращенную приложением
И вы обрабатываете событие OnGetHint .
Почему не оба?
Теперь наступает момент сопротивления: Windows выполняет обе функции, одновременно :
- показывает вам полный текст (если он обрезан) (ala
hmTooltip
)
- , а также позволяет мне добавить больше текста (ala
hmHint
)
Но если нет дополнительного текста для отображения, он должен продолжать отображать только встроенную подсказку:
А если он не обрезается, просто дополнительный текст:
Я хочу это!
Как я могу это сделать?
Исследования
- если я установлю HintMode на
hmTooltip
, то OnGetHint
никогда не сработает (и у меня никогда не будет возможности добавить пользовательскую информацию)
- если я установил HintMode на
hmHint
(или hmHintAndDefault
), то событие OnGetHint
срабатывает, но дерево больше не будет отображать отрезанную часть
- если HintMode равен
hmHint
, то отображаемая подсказка будет никогда встроенной; но вместо этого всегда будет ниже ячейки
Возможна ли такая функция? По крайней мере, я предполагаю, что мне придется заново изобрести все измерения ячеек, чтобы выяснить, обрезан ли текст на месте.
- но только так я могу получить
OnGetHint
событие
- устанавливается HintMode на
hmHint
- но если HintMode равно
hmHint
- тогда подсказка никогда не будет на месте
- но если я установлю HintMode на
hmTooltip
, чтобы сделать его на месте
- я никогда не получу
OnGetHint
событие
goto 10
Бонус Чтение
Редактировать: Уточнение
Я ненавижу это делать, потому что это подразумевает ответ или путь, который можно найти. Но представьте следующую таблицу истинности:
OnGetHint IsTreeTextClipped Hint
========= ================= ==================
Empty No No hint
Empty Yes Inline tooltip
Non-empty No Hint below; shows only GetHint text only
Non-empty Yes Hint below; show both TreeText+CRLF+GetHint text
Проблема в том, что у вас никогда не будет встроенной подсказки , если вызывается OnGetHint
.
- вы можете либо OnGetHint вызывать (
hmHint
)
- или вы можете иметь встроенную подсказку (
hmTooltip
)
- но вы никогда не сможете вызвать OnGetHint , и если он ничего не вернет, перейдите в
hmTooltip
mode
Как я могу вызвать OnGetHint с помощью, и если он ничего не возвращает, отложить в режим hmTooltip
?
Конечно, ничто не говорит о том, что OnGetHint должен быть задействован вообще. Это был только пример того, как получить текст подсказки для VirtualTrees для обработки.