我正在尝试让管理员通过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事件,而其他菜单项却不会呢?有没有办法让子菜单项也接收这些事件?