デルファイアプリケーションに現在モーダルウィンドウがあるかどうかを確認するにはどうすればよいですか?
-
08-07-2019 - |
質問
Delphi MDIアプリケーションでタイマーを実行しています。バックグラウンドで何かが変更された場合、それを使用してメッセージをポップアップしたいと思います。しかし、ユーザーが何もできないので、アプリケーションのフォアグラウンドにモーダルダイアログがある場合、そのメッセージをポップアップ表示したくありません。
では、アプリケーションにモーダルダイアログが存在するかどうかを確認する方法を知りたいのですが、
解決
このコードで試すことができます:
var
ActForm: TCustomForm;
begin
ActForm := Screen.ActiveForm;
if (ActForm = nil) or not (fsModal in ActForm.FormState) then begin
end;
end;
私はDelphi 4でテストしました。私のために動作します。
[編集]:しかし、フォームをポップアップしてフォーカスを盗むのは良い考えかどうかを本当に考えるべきです。アプリケーションによって異なりますが、ユーザーが現在編集フィールドに何かを入力している場合、またはマウスで何かをしている場合、ワークフローが中断される可能性があります。
他のヒント
Delphi 2005以降には、 ModalLevel があります。 TApplicationのプロパティ。アプリケーションで開かれたモーダルフォームの数をカウントします。
おそらく解決策は、フォーカスを奪わないヒントを実際にポップアップすることです。どこかで見えるクリック可能なヒントですが、あまり侵襲的ではありません。したがって、ユーザーがアクションを実行したい場合、または実行していたことを完了できる場合は、アクションを実行します。または、完全に無視することもできます。
AnyPopup ()関数を使用します
GetLastActivePopup ()について。戻り値は、hWndパラメーターと同じ場合です
- hWndによって識別されたウィンドウは、最近アクティブになりました。
- hWndで識別されるウィンドウは、ポップアップウィンドウを所有していません。
- hWndで識別されるウィンドウはトップレベルウィンドウではないか、別のウィンドウが所有しています。
所属していません StackOverflow