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