開発ブログ - ダイアログ表示中にメインフォームのキーボードショートカットが有効になってしまう

ダイアログ表示中にメインフォームのキーボードショートカットが有効になってしまう

カテゴリ : 
技術メモ » Delphi » VCL
執筆 : 
2015/1/21

Delphi VCL
メインフォームの TActionList にキーボードショートカットを設定しているときにダイアログを表示すると、 ダイアログ処理中でもメインフォームのショートカットキーが有効になっています。
これを回避するためには、ダイアログ表示前にメインフォームの Enabled を False にすればOKです。

d := TDialogForm.Create(Self);
try
  Self.Enabled := False;
  d.ShowModal;
finally
  Self.Enabled := True;
  d.Free;
end;

とはいえ、たくさんダイアログがあってダイアログ表示前に Enabled を False にするのが面倒くさいということもあるかもしれません。
そんな時はメインフォームに以下のような記述を追加すると、回避できます。

interface の宣言部

type
  TMainForm = class(TForm)
    ...
  public
    function IsShortCut(var Message: TWMKey): Boolean; override;

implementation 実装部

function TMainForm.IsShortCut(var Message: TWMKey): Boolean;
begin
  if not Self.Active then Exit(False);
  Result := inherited;
end;

ショートカットキーの処理は、アクティブなフォームの IsShortCut で処理されるようで、処理をしたら True を返せば良いみたいです。
False にするとMainForm に遡って処理が行われるようです。
(MainForm が Enable の場合)
このため、メインフォームでキーボードショートカットが実行されてしまうんですね。

  • コメント (0)
  • トラックバック (0)

コメントの投稿

お気軽にコメントください : 投稿されたコメントは承認後に表示されます
プロダクツ

開発ブログ

Link

AD