我想要完成的事情
我有一个虚拟的字符串树与子级别行,可以由用户扩展。所有节点的顶层层次都应该是可拖动的。但所有子节点级别都不能。
如何测试
为了测试,我使用了当前Virtual TreeView修订的高级演示项目。第二个演示(一般能力和特性)有足够的节点层次结构,您可以拖动节点。
考虑我想我可以通过使用stringtree的OnDragAllowed
事件来完成我的任务,但当我拖动时它不会被触发。我的意图是在拖动开始之前检查节点级别(GetNodeLevel
),并且只允许拖动顶级节点级别0。
如何防止虚拟字符串树的某些节点级别被拖动?
为了得到一个答案…
为了防止某个节点级别被拖拽,我们可以实现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的文章中描述了拖放的基础知识和含义。