如何防止拖动某个虚拟StringTree NodeLevel?

我正在努力完成的

我有一个可以由用户扩展的具有子行的虚拟字符串树。 所有节点的最高层级应可拖动。 但是没有一个子节点级别应该是。

如何测试

为了测试,我使用当前虚拟TreeView修订版的高级演示项目。 第二个演示(常规功能和功能)具有适当的节点层次结构,您可以拖动节点。

考虑

我想我可以通过使用stringtree的OnDragAllowed事件来完成我的任务,但是当我拖动时它不会被触发。 我的目的是在拖动开始之前检查节点级别( GetNodeLevel ),并且只允许拖动顶级节点级别0。

如何防止拖动虚拟字符串树的某些节点级别?


为了答复...所有功劳都归功于TLama。

为了防止拖动某个节点级别,我们可以实现OnDragAllowed事件处理程序,并确保也将StringTree的DragMode设置为dmManual

这里是事件处理程序。

procedure TForm1.vstDragAllowed(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Column: TColumnIndex; var Allowed: Boolean);
begin
  { dragging shall only be possible for top nodes (level 0) }
  Allowed := TVirtualStringTree(Sender).GetNodeLevel(Node) = 0;
end;

Drag and Drop的基础和含义在这篇Delphi About.com文章中有介绍。

链接地址: http://www.djcxy.com/p/35085.html

上一篇: How to prevent a certain Virtual StringTree NodeLevel from being dragged?

下一篇: Hit Test TTreview plus/minus (collapse/expand) icon