delphi - 如何防止某个Virtual StringTree NodeLevel被拖拽?

标签 delphi delphi-xe2 drag virtualtreeview tvirtualstringtree

我想要实现的目标

我有一个虚拟字符串树,其中包含可由用户扩展的子级别行。所有节点的顶层应可拖动。但任何子节点级别都不应是。

如何测试

为了进行测试,我使用当前 Virtual 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;

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

关于delphi - 如何防止某个Virtual StringTree NodeLevel被拖拽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24531459/

相关文章:

json - super 对象 - 元素名称中的空格

delphi - 使用FPC : Allocation and Pointers编写Scheme解释器

Delphi编辑unicode表格数据

delphi - 如何使用FireMonkey截图(多平台)

delphi - 如何为通用 HTTP 请求的响应文件指定一个唯一的名称?

delphi - Delphi 使用 TIdTCPServer/TIdTCPClient 组件丢失数据

delphi - 如何创建不区分大小写的字符串列表?

javascript - 启用和禁用拖动 jQuery

android - 如何延迟Android中的听众?

javascript - 使用力导向布局了解 D3.js 中的 "call"