Как использовать подсказки и подсказки? - PullRequest
2 голосов
/ 29 апреля 2019

В Windows, если столбец слишком узкий, чтобы показать полный текст, tooltip отображается в строке и может показать вам отсутствующий текст:

enter image description here

Важно отметить, что окно подсказки имеет значение 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 : показать текст узла, если он еще не полностью показан

А также подсказки; не просто подсказки

Исследователь также имеет возможность показать подсказку , которая является окном подсказки, которое всплывает около или ниже ячейки, в которой находится:

enter image description here

Это будет эквивалентно в VirtualTreeview hmHint:

  • hmHint : показать строку подсказки для конкретного узла, возвращенную приложением

И вы обрабатываете событие OnGetHint .

Почему не оба?

Теперь наступает момент сопротивления: Windows выполняет обе функции, одновременно :

  • показывает вам полный текст (если он обрезан) (ala hmTooltip)
  • , а также позволяет мне добавить больше текста (ala hmHint)

enter image description here

Но если нет дополнительного текста для отображения, он должен продолжать отображать только встроенную подсказку:

enter image description here

А если он не обрезается, просто дополнительный текст:

enter image description here

Я хочу это!

Как я могу это сделать?

Исследования

  • если я установлю 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 для обработки.

...