4

エラー状態が検出されたときにモーダルアラートダイアログをポップアップするDelphi2006アプリがあります。エラー状態のチェックはアイドルハンドラーで行われるため、別のモーダルダイアログが表示された場合、そのダイアログが別のモーダルダイアログの上にポップアップ表示されることがあります。これは、アラートダイアログが閉じられた後、アプリケーションのメインフォームがフォーカスを取得しないという、ユーザーにとって混乱を招く状況につながる可能性があります。これは、これらが別のあいまいなモーダルダイアログであるためです。

私がやりたいのは、アプリでモーダルダイアログが開いている間、アラートポップアップを延期することです。

GetLastActivePopup(MyMainWindow.Handle)を試しましたが、常にゼロ以外を返すようです。

4

3 に答える 3

5

TApplication.ModalLevelまたはTApplication.OnModalBeginおよびTApplication.OnModalEndイベントを参照してください。この質問も参照してください。

于 2010-07-22T07:10:35.213 に答える
3

テストするだけ

if not IsWindowEnabled(MyMainWindow.Handle) then

これにより、のようにDelphi以外のダイアログがモーダルに動作している場合の状況も処理されwindows.MessageBox(Handle...ます。または、一般的なダイアログが表示されています(つまり、TOpenDialog)。

于 2010-07-22T10:08:31.307 に答える
2

AnyPopup()関数を使用する

GetLastActivePopupについて()。戻り値は、hWndパラメータと同じである可能性があります。

  • hWndによって識別されたウィンドウは、最近アクティブでした。
  • hWndで識別されるウィンドウは、ポップアップウィンドウを所有していません。
  • hWndによって識別されるウィンドウは、トップレベルウィンドウではないか、別のウィンドウによって所有されています。
于 2010-07-22T07:06:34.220 に答える