ユーザーがログインすると、モーダルダイアログが表示され、そこで作業したい施設を選択する必要があるアプリケーションがあります。この段階で、アプリケーションは次のようになります。
このメソッドを呼び出すと、モーダル ダイアログが表示されます。
bool __fastcall ShowFacChoiceForm()
{
TFacChoiceForm *Form = new TFacChoiceForm( Application );
bool Result = ( Form->ShowModal() == mrOk );
delete Form;
return Result;
}
この場合、TFacChoiceForm
から継承するTForm
ため、関数はここに記載されている標準メソッドShowFacChoiceForm()
を呼び出しています。TForm.ShowModal
私が直面している問題は、アプリケーションがフォーカスを失った場合、モーダル ダイアログ自体をクリックしない限り、再びアクティブ ウィンドウになれないことです。これをよりよく説明するために、次のシナリオを提示します。
金曜日の午後だとしましょう。私は少し間抜けでウェブ コミックを読むことにしました。アプリケーションを開いた状態で、その上に別のウィンドウを開きます。次のようにします。
その後、どこからともなく上司がパフォーマンス レビューにやってきたので、メイン フォームのどこかをクリックしてアプリケーションに再び焦点を合わせようとしました。たとえば、次の画像のこの赤い X の位置。
上の画像では、赤い X の場所をクリックしました。これで、Web コミックを含むフォームとアプリケーションの両方が非アクティブになります。したがって、私のアプリケーションは画面の前面に来ません。
ただし、次の画像の赤い X のように、モーダル ダイアログのどこかをクリックできれば...
...すると、私のアプリケーションは予想通り前面に出てきます。
これを解決するために、Windows API からSetForegroundWindowのようなものを使用することを検討しましたが、モーダル ダイアログが開いている間はメイン フォームがイベントを発生させないため、イベントをトリガーする方法を見つけることができませんでした。
私の質問は、ユーザーがアプリケーションのどこかをクリックした場合に、それが前面に表示されるようにするにはどうすればよいですか? これを行うためにフォームで編集できるプロパティはありますか?