如何使用VirtualTreeView组件检查节点是否可见(在屏幕上)?像这样:
if not Grid.NodeVisible (Node) then
Grid.ScrollIntoView (Node, True);
如果节点不可见,则该节点应居中,但如果节点可见则保持不变。
请注意,我不是在谈论节点的可见标志,而是关于屏幕上的可见性。
在我的情况下,IsVisible
属性始终返回True
。
答案 0 :(得分:3)
我认为最接近的是GetDisplayRect()
方法:
确定给定节点覆盖的客户端坐标,具体取决于滚动,展开状态等。 如果找不到给定节点(因为其中一个父节点已折叠或不可见)则为空 返回矩形。
如果节点“可见但不在视野范围内”,则不确定它返回的内容 - 您可能必须编写辅助函数,该函数检查VT的客户端矩形内的返回矩形...
答案 1 :(得分:0)
IsVisible属性仅在节点被隐藏或未找到时返回。查找节点是否在屏幕上的唯一方法是使用建议的GetDisplayRect,然后针对树视图的客户端矩形进行测试。
但是,如果我理解您正在尝试正确执行的操作,则VirtualTreeView的SelectionOption中的toCenterScrollIntoView选项将为您提供所需的行为,而无需测试节点是否在可见区域中。
即(C ++):
TreeView->TreeOptions->SelectionOptions =
TreeView->TreeOptions->SelectionOptions << toCenterScrollIntoView ;
...
ScrollIntoView(Node);