管理者がアプリケーションのメイン メニューのメニュー項目を 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 イベントを受け取り、他のメニュー項目は受け取らないのはなぜですか? 子メニュー項目もそれらのイベントを受け取るようにする方法はありますか?