1

ユーザーがログインすると、モーダルダイアログが表示され、そこで作業したい施設を選択する必要があるアプリケーションがあります。この段階で、アプリケーションは次のようになります。

ここに画像の説明を入力

このメソッドを呼び出すと、モーダル ダイアログが表示されます。

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のようなものを使用することを検討しましたが、モーダル ダイアログが開いている間はメイン フォームがイベントを発生させないため、イベントをトリガーする方法を見つけることができませんでした。

私の質問は、ユーザーがアプリケーションのどこかをクリックした場合に、それが前面に表示されるようにするにはどうすればよいですか? これを行うためにフォームで編集できるプロパティはありますか?

4

1 に答える 1