サブフォームがアクティブな時はメインフォームのアクセラレータキー・ショートカットキーを無効にしたい
|
メインフォームのメニューに指定されたアクセラレータキー([File(&F)]とした時の 'F')は、サブフォームがアクティブであっても、そのサブフォームがメインメニューを持たない場合には、メインフォームのメニューを起動してしまいます。
また、メインフォームのメニューに指定されたショートカットキー([Open(&O)... Ctrl+O] とした時の 'Ctrl+O')は、サブフォームがアクティブである場合にも有効です。
これらを回避するには以下のようにします。
function TForm1.Hook(var Message: TMessage): Boolean;
begin
case Message.Msg of
CM_APPKEYDOWN:
Result := True; // ショートカットを無効にする
CM_APPSYSCOMMAND:
Result := True; // アクセラレータを無効にする
else
Result := False;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.HookMainWindow(Hook);
end; |
|