gpt4 book ai didi

delphi - 即使菜单项未启用,也可以接收 OnClick 事件吗?

转载 作者:行者123 更新时间:2023-12-03 15:25:21 25 4
gpt4 key购买 nike

我正在尝试让管理员通过按住 Ctrl 键并单击来启用/禁用应用程序主菜单中的菜单项。为此,我在主窗体中注入(inject)了自定义版本的 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 消息触发。即使顶级项目被禁用,该消息也会发送。我不确定为什么在这种情况下会发送它,但确实如此。对于具有子项的子项也是如此。

但是,对于没有子项的子项,OnClickWM_COMMAND 消息触发。但如果菜单项被禁用,系统甚至不会发送消息。

您尝试做的事情并不容易完成。我看到你这样做的唯一方法是处理原始鼠标和键盘事件。就我个人而言,我不会考虑这样做。

关于delphi - 即使菜单项未启用,也可以接收 OnClick 事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18104308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com