【问题标题】:How to prevent a certain Virtual StringTree NodeLevel from being dragged?如何防止某个Virtual StringTree NodeLevel被拖动?
【发布时间】:2014-07-02 12:46:24
【问题描述】:

我想要完成的事情

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

如何测试

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

考虑

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

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

【问题讨论】:

  • 你走在正确的轨道上,OnDragAllowed 事件是正确的。但是,对于该演示中的 VST2,您必须将 DragModedmAutomatic 更改为 dmManual 才能达到您想要的效果。
  • 太好了,谢谢。 dmManual 成功了,我愿意接受它作为答案。

标签: delphi delphi-xe2 drag virtualtreeview tvirtualstringtree


【解决方案1】:

为了回答...所有功劳归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 中描述了拖放的基础知识和含义。

【讨论】:

    猜你喜欢
    • 2012-05-31
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    相关资源
    最近更新 更多