如何防止拖动某个Virtual StringTree NodeLevel?

时间:2014-07-02 12:46:24

标签: delphi delphi-xe2 drag virtualtreeview tvirtualstringtree

我想要实现的目标

我有一个带有子行的虚拟stringtree,可以由用户扩展。所有节点的顶层级别都是可拖动的。但是子节点级别都不应该是。

如何测试

为了测试,我使用当前Virtual TreeView修订版的Advanced Demo项目。第二个演示(常规功能和特性)具有足够的节点层次结构,您可以拖动节点。

考虑

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

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

1 个答案:

答案 0 :(得分:2)

为了回答...所有功劳归于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;

Delphi About.com article中描述了拖放的基础知识和含义。