我正在寻找一个程序或者当我右键单击一个节点(或者通常在VirtualStringTree上)时会被触发的东西
我有以下情况:
现在我希望为所有子节点设置一个不同的popupmenu(1个常用)(并且只有在选中它们时才会这样)。
希望你能理解我的意思,谢谢你的帮助。
答案 0 :(得分:5)
我不会回答您的问题,但会指出您正确的事件,因为您已经说过要为每个节点设置不同的弹出菜单。右键单击解决方案至少在缺少菜单键按下时会有一个弱点,它也会调用弹出菜单。
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
选项集即可。
答案 1 :(得分:2)
您可以使用正常OnMouseDown
事件,确保Button
为mbRight
,然后使用GetHitTestInfoAt
函数检查光标下的哪个节点(如果有)是任何)。
var
HitInfo : THitInfo;
...
TreeView.GetHitTestInfoAt(X, Y, HitInfo);
if (HitInfo.Node = ?) and (HitInfo.Column = ?) then
begin
...
end;
还有OnGetPopupMenu
为您提供了一个节点和一列,并允许您返回任何TPopupMenu
。