delphi – 菜单项是否可以接收OnClick事件,即使它没有启用?
发布时间:2020-12-15 09:25:55 所属栏目:大数据 来源:网络整理
导读:我正在尝试通过Ctrl单击它们来启用管理员在我的应用程序主菜单中启用/禁用菜单项.为此,我在我的主窗体中注入了一个自定义版本的TMenuItem类,并覆盖了Click虚拟方法,如下所示: uses Forms,Menus;type TMenuItem = class(Menus.TMenuItem) public ControlActi
我正在尝试通过Ctrl单击它们来启用管理员在我的应用程序主菜单中启用/禁用菜单项.为此,我在我的主窗体中注入了一个自定义版本的TMenuItem类,并覆盖了Click虚拟方法,如下所示:
uses Forms,Menus; type TMenuItem = class(Menus.TMenuItem) public ControlActivationState: Boolean; procedure Click; override; end; TMyMainForm = class(TForm) ... procedure TMenuItem.Click; begin if ControlActivationState and IsKeyPressed(VK_CONTROL) then Self.Enabled := not Self.Enabled else inherited; end; 它可以工作,但仅适用于顶级菜单. 解决方法
顶级OnClick事件由收到WM_INITMENUPOPUP消息触发.即使禁用顶级项目,也会发送该消息.我不确定为什么会在那种情况下发送,但确实如此.对于有孩子的子项也是如此.
但是,对于没有子项的子项,OnClick由WM_COMMAND消息触发.但是,如果禁用菜单项,系统甚至不会发送消息. 你试图做的事情不容易做到.我能看到你这么做的唯一方法是处理原始的鼠标和键盘事件.就个人而言,我不打算这样做. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |