加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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事件,即使它们被禁用而其他菜单项也没有?
有没有办法让子菜单项也接收这些事件?

解决方法

顶级OnClick事件由收到WM_INITMENUPOPUP消息触发.即使禁用顶级项目,也会发送该消息.我不确定为什么会在那种情况下发送,但确实如此.对于有孩子的子项也是如此.

但是,对于没有子项的子项,OnClick由WM_COMMAND消息触发.但是,如果禁用菜单项,系统甚至不会发送消息.

你试图做的事情不容易做到.我能看到你这么做的唯一方法是处理原始的鼠标和键盘事件.就个人而言,我不打算这样做.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读