VirtualTreeView:检查节点是否可见

时间:2012-03-20 08:14:51

标签: delphi delphi-xe virtualtreeview

如何使用VirtualTreeView组件检查节点是否可见(在屏幕上)?像这样:

if not Grid.NodeVisible (Node) then
   Grid.ScrollIntoView (Node, True);

如果节点不可见,则该节点应居中,但如果节点可见则保持不变。

请注意,我不是在谈论节点的可见标志,而是关于屏幕上的可见性。 在我的情况下,IsVisible属性始终返回True

2 个答案:

答案 0 :(得分:3)

我认为最接近的是GetDisplayRect()方法:

  

确定给定节点覆盖的客户端坐标,具体取决于滚动,展开状态等。    如果找不到给定节点(因为其中一个父节点已折叠或不可见)则为空    返回矩形。

如果节点“可见但不在视野范围内”,则不确定它返回的内容 - 您可能必须编写辅助函数,该函数检查VT的客户端矩形内的返回矩形...

答案 1 :(得分:0)

IsVisible属性仅在节点被隐藏或未找到时返回。查找节点是否在屏幕上的唯一方法是使用建议的GetDisplayRect,然后针对树视图的客户端矩形进行测试。

但是,如果我理解您正在尝试正确执行的操作,则VirtualTreeView的SelectionOption中的toCenterScrollIntoView选项将为您提供所需的行为,而无需测试节点是否在可见区域中。

即(C ++):

TreeView->TreeOptions->SelectionOptions =
TreeView->TreeOptions->SelectionOptions << toCenterScrollIntoView ;
...
ScrollIntoView(Node);