Когда TVirtualStreeTree.HintMode = hmTooltip, текст узла станет текстом подсказки при наведении курсора мыши на узел и столбец, где текст узла не отображается полностью. Но я должен установить HintMode = hmHint, чтобы я мог в четном обработчике подавать различный текст подсказки, основанный на позиции текущего курсора мыши, и в этом HintMode текст подсказки не генерируется автоматически.
Мой вопрос заключается в том, как узнать, отображается ли текст узла полностью или нет, так что я знаю, должен ли я указывать текст узла или пустую строку в качестве текста подсказки?
Спасибо.Virtual StringTree: как определить, полностью ли отображается текст узла?
ответ
Вы можете позвонить TBaseVirtualTree.GetDisplayRect
, чтобы определить границы текста узла. В зависимости от параметра Unclipped
, он даст вам полную или фактическую ширину текста. TextOnly
должен быть установлен в True
:
function IsTreeTextClipped(Tree: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex): Boolean;
var
FullRect, ClippedRect: TRect;
begin
FullRect := Tree.GetDisplayRect(Node, Column, True, True);
ClippedRect := Tree.GetDisplayRect(Node, Column, True, False);
Result := (ClippedRect.Right - ClippedRect.Left) < (FullRect.Right - FullRect.Left);
end;
Обратите внимание, что функция будет неявно инициализировать узел, если он не был инициализирован еще.
Вы можете использовать то, что сам элемент управления деревьями использует. Вот выдержка из обработчика сообщения cm_HintShow
для однострочных узлов, когда действует режим hmTooltip
.
NodeRect := GetDisplayRect(HitInfo.HitNode, HitInfo.HitColumn, True, True, True);
BottomRightCellContentMargin := DoGetCellContentMargin(HitInfo.HitNode, HitInfo.HitColumn
, ccmtBottomRightOnly);
ShowOwnHint := (HitInfo.HitColumn > InvalidColumn) and PtInRect(NodeRect, CursorPos) and
(CursorPos.X <= ColRight) and (CursorPos.X >= ColLeft) and
(
// Show hint also if the node text is partially out of the client area.
// "ColRight - 1", since the right column border is not part of this cell.
((NodeRect.Right + BottomRightCellContentMargin.X) > Min(ColRight - 1, ClientWidth)) or
(NodeRect.Left < Max(ColLeft, 0)) or
((NodeRect.Bottom + BottomRightCellContentMargin.Y) > ClientHeight) or
(NodeRect.Top < 0)
);
Если ShowOwnHint
верно, то вы должны вернуть текст узла как текст подсказки. В противном случае оставьте текст подсказки пустым.
Главным препятствием с использованием этого кода является то, что DoGetCellContentMargin
защищен, поэтому вы не можете его напрямую назвать. Вы можете либо отредактировать источник, чтобы сделать его общедоступным, либо дублировать его функциональность в своей собственной функции; если вы не обрабатываете событие OnBeforeCellPaint
, то он всегда возвращает (0, 0) в любом случае.
Данные HitInfo
исходят от звонка GetHitTestInfoAt
.
Привет, Роб, извините, я не пробовал это, так как код TOndrej работал, спасибо вам все равно! –
- 1. Virtual StringTree: текст, возвращаемый обработчиком событий OnGetHint, не отображается в окне подсказки
- 2. Как определить, когда блок HTML полностью отображается
- 3. Как определить, отображается ли определенный текст в UITableViewCell?
- 4. Текст заголовка кнопки не отображается полностью
- 5. Как определить, полностью ли визуализирован вид?
- 6. Xamarin.forms SwitchCell Текст Не отображается полностью
- 7. Как VM может определить адрес узла узла?
- 8. Текст вкладки Tabcontrol не отображается полностью
- 9. Текст не отображается полностью в UITextView
- 10. Почему текст метки не отображается полностью
- 11. Редактируемый текст ячейки сетки не отображается полностью?
- 12. Datagridview - проверьте, полностью ли отображается последний столбец
- 13. Как определить, полностью ли увеличен WebView
- 14. Как определить, полностью ли инициализирован jQuery?
- 15. определить, отображается ли uiview
- 16. Как определить, меняет ли текст TextBlock?
- 17. Node.js - Как определить, работает ли скрипт узла?
- 18. Как определить, обрабатывается ли процесс process.stdout узла?
- 19. Как определить, связаны ли два узла?
- 20. Определить, отображается ли текст заполнителя в тесте транспортиметра
- 21. Окна подсказок виртуального StringTree не отображаются на экране
- 22. Как определить график полностью связан?
- 23. Определить, отображается ли всплывающая подсказка?
- 24. Как определить, полностью ли обновлены 3 html-страницы (панели)?
- 25. Как определить, отображается ли объект изображения?
- 26. Как определить, отображается ли элемент outlook
- 27. Как определить, отображается ли ImageView в CollapsingToolbar?
- 28. Как определить, отображается ли перед уведомлением?
- 29. Как определить, отображается ли Chrome значок безопасности
- 30. Как определить, отображается ли элемент DOM?
Спасибо TOndrej, ваш код работал как шарм! Я попытался GetDisplayRect, но я не заметил, что мы можем выполнить эту задачу, используя эту функцию в одиночку! –