2

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

我有以下情况:

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

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

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

4

2 回答 2

6

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

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选项集中。

于 2012-08-14T08:18:06.747 回答
2

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

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

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

于 2012-08-14T06:11:56.287 回答