3

我想要完成的事情

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

如何测试

对于测试,我使用当前 Virtual TreeView 版本的 Advanced Demo 项目。第二个演示(通用能力和特性)具有足够的节点层次结构,您可以拖动节点。

考虑

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

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

4

1 回答 1

2

为了得到答案……所有功劳归于 TLama

为了防止某个节点级别被拖动,我们可以实现OnDragAllowed事件处理程序并确保将 StringTreeDragMode设置为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 文章描述了拖放的基础知识和含义。

于 2014-07-03T07:34:24.100 回答