先日はインタプリタコンポーネントの件でお世話になりました。
まだ完全に解決してるわけではないのですが、別件で質問がでましたので、
再度質問させていただきます。
メインフォーム(Form1)で、ActionListを使っており、アクションの1つに、
「Control + G」のショートカットを設定しています。
このショートカットは、Form1で利くのはよいのですが、Form1から
Showした別のフォーム(Form2)がアクティブのときにも利いてしまうのです。
Form1がアクティブでないときは無効にしたいのですが、どうすればよいでしょうか?
※案件がこれ1つだけなら、当該Action内で条件分岐するのですが、
ショートカットキー付きのActionが他にもいっぱいあります。
個別に書くのもメンテナンスが大変ですし、設定漏れ、今後の保守作業を
見据えて、より簡単な方法を探しています。
こんにちは。
当該アクションのOnUpdateイベントでForm1がアクティブの時だけ
アクションのEnabledをTrueに設定するのが楽だと思います。
例えば、アクション名がAction1だった場合は
procedure TForm1.Action1Update(Sender: TObject);
begin
Action1.Enabled := Form1.Active;
end;
となります。
これでForm1がアクティブの時だけAction1を実行できます。
Form2がアクティブの時はショートカットキーが反応しないはずです。
Actionごとに処理を書くのを避けたいということなら、OnShortCutでまとめて捨ててしまうとか。
ご回答、ありがとうございます。
今、いろいろ操作してみましたが、以下のコードで動きそうです。
// Form1.OnCreate部分
var
i: Integer;
begin
for i := 0 to ActionList1.ActionCount - 1 do begin
ActionList1.Actions[i].OnUpdate := Action1Update;
end;
end;
// Action1.OnUpdate部分
procedure TForm1.Action1Update(Sender: TObject);
begin
TAction(Sender).Enabled := Form1.Active;
end;
もう少し動きを見て、問題がないようでしたら改めて報告いたします。
お二人とも、大きなヒントをいただき、ありがとうございました。
ツイート | ![]() |