【发布时间】:2021-12-30 02:45:05
【问题描述】:
在 Windows 10 上的 32 位 Delphi 11 VCL 应用程序中,当右键单击任何菜单项时,我需要获取单击的 MenuItem 的名称。
我使用TApplicationEvents 组件和此代码在我单击任何菜单项时收到通知:
procedure TformMain.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
case Msg.message of
Winapi.Messages.WM_COMMAND:
begin
CodeSite.Send('TformMain.ApplicationEvents1Message: WM_COMMAND');
end;
end;
end;
但是:
-
如何仅在右键单击菜单项时获得通知?
-
如何获取被点击的MenuItem的NAME?
【问题讨论】:
-
WM_COMMAND在选择菜单项时发出(即左键单击)。要允许右键单击选择菜单项,必须使用TPM_RIGHTBUTTON标志(默认情况下不是)调用TrackPopupMenu/Ex()。要检测菜单项上的右键单击,您必须通过使用TPM_RECURSE标志调用TrackPopupMenuEx()来显示菜单,然后将WM_MENURBUTTONUP消息处理到菜单的所有者窗口。
标签: delphi winapi menuitem delphi-11-alexandria