如果我右键单击节点(或通常在 VirtualStringTree 上),我正在寻找一个程序或被触发的东西
我有以下情况:
- 我的 VST 靠近列表视图。
- 我只能用鼠标多选根节点(按住鼠标按钮并移动鼠标)
- 如果我单击任何子节点(右或左) - 它被选中(+ [VSelected] 状态)
- 如果我右键单击根节点,它会自动选择并打开一个弹出菜单。
现在我想为我的所有子节点(并且只有当它们被选中时)有一个不同的弹出菜单( 1 common )。
希望你能明白我的意思,谢谢你的帮助。
如果我右键单击节点(或通常在 VirtualStringTree 上),我正在寻找一个程序或被触发的东西
我有以下情况:
现在我想为我的所有子节点(并且只有当它们被选中时)有一个不同的弹出菜单( 1 common )。
希望你能明白我的意思,谢谢你的帮助。
我不会回答您的问题,但会为您指出正确的事件,因为您说过您希望为每个节点设置不同的弹出菜单。右键单击解决方案至少在缺少调用弹出菜单的菜单键方面存在弱点。
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
选项集中。
您可以使用普通OnMouseDown
事件,确保Button
是mbRight
,然后使用该GetHitTestInfoAt
函数检查光标下的哪个节点(如果有的话)。
var
HitInfo : THitInfo;
...
TreeView.GetHitTestInfoAt(X, Y, HitInfo);
if (HitInfo.Node = ?) and (HitInfo.Column = ?) then
begin
...
end;
还有OnGetPopupMenu
一个它给你一个节点和一个列,让你返回任何TPopupMenu
.