【问题标题】:VirtualStringTree OnNodeRightClickVirtualStringTree OnNodeRightClick
【发布时间】:2012-08-14 05:48:27
【问题描述】:

如果我右键单击节点(或通常在 VirtualStringTree 上),我正在寻找一个过程或触发的东西

我有以下场景:

  • 我的 VST 靠近列表视图。
  • 我只能用鼠标多选根节点(按住鼠标按钮并移动鼠标)
  • 如果我单击任何子节点(右或左) - 它被选中(+ [VSelected] 状态)
  • 如果我右键单击根节点,它会自动选择并打开一个弹出菜单。

现在我想为我的所有子节点(并且仅当它们被选中时)为 ( 1 common ) 设置一个不同的弹出菜单。

希望你能明白我的意思,谢谢你的帮助。

【问题讨论】:

    标签: delphi-7 virtualtreeview delphi tvirtualstringtree


    【解决方案1】:

    我不会回答您的问题,但会为您指出正确的事件,因为您说过您希望为每个节点设置不同的弹出菜单。右键单击解决方案至少在缺少菜单键方面有一个弱点,它也会调用弹出菜单。

    1.1 如何根据节点级别为每个节点使用不同的弹出菜单?

    procedure TForm1.VirtualTreeGetPopupMenu(Sender: TBaseVirtualTree;
      Node: PVirtualNode; Column: TColumnIndex; const P: TPoint;
      var AskParent: Boolean; var PopupMenu: TPopupMenu);
    begin
      case VirtualTree.GetNodeLevel(Node) of
        0: PopupMenu := PopupMenu1;
        1: PopupMenu := PopupMenu2;
      end;
    end;
    

    1.2 如何启用鼠标右键单击节点选择?

    要允许鼠标右键选择节点,只需将toRightClickSelect 选项添加到TreeOptions.SelectionOptions 选项集即可。

    【讨论】:

      【解决方案2】:

      您可以使用普通的OnMouseDown事件,确保ButtonmbRight,然后使用GetHitTestInfoAt函数检查光标下的哪个节点(如果有的话)。

      var
        HitInfo : THitInfo;
      ...
      TreeView.GetHitTestInfoAt(X, Y, HitInfo);
      if (HitInfo.Node = ?) and (HitInfo.Column = ?) then
        begin
        ...
        end;
      

      还有OnGetPopupMenu,它给你一个节点和一个列,让你返回任何TPopupMenu

      【讨论】:

      • 谢谢。我想我错过了那个事件,因为我太专注于右键单击寻找东西。
      • 我知道你的意思。虚拟树视图上的选项和事件的数量起初可能会让人不知所措:)
      猜你喜欢
      • 2011-09-28
      • 1970-01-01
      • 2014-10-13
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      相关资源
      最近更新 更多