3

セカンダリ アプリケーションのユーザー インターフェイス (UI) をプライマリ アプリケーションに埋め込む必要があります。SetParent を使用して、セカンダリ アプリケーションのメイン フォームをプライマリ アプリケーションに簡単にホストできます。名前付きパイプを使用して 2 つのアプリケーション間で通信しています。プライマリ アプリケーションでダミーの TEdit を使用して、セカンダリ アプリケーションで AttachThreadInput API を使用して、タブの問題を解決することもできます。ここまでは順調ですね。

次の問題を解決できません。セカンダリ アプリケーションのモーダル フォームが、プライマリ アプリケーションのモーダルとして認識されず、大きな問題が発生します。

ところで: DLL、OCX、ActiveX を使用するように言わないでください。2 つのプレーンな exe ファイルがあります。

ヘルプ/ヒントをいただければ幸いです。

4

1 に答える 1

5

モーダル フォームは次のように機能します。

  1. モーダル フォームが表示されると、そのオーナー ウィンドウが無効になります。
  2. これは、所有者との対話を不可能にする効果があります。
  3. モーダル ウィンドウが閉じると、所有者が再度有効になります。

ただし、シナリオでは、セカンダリ アプリケーションのモーダル ウィンドウがプライマリ アプリのウィンドウを無効にすることはありません。したがって、問題を解決するには、セカンダリ アプリがプライマリ アプリに到達し、モーダル フォームが表示されている間は適切なウィンドウを無効にする必要があります。

モダリティはややトリッキーな領域です。あらゆる種類の悪い結果を招くことは簡単です。モダリティとウィンドウ所有者の処理を正しいものに近づけるには、少なくとも 10 回の VCL のリリースが必要でした! Raymond Chen は、モダリティに関する非常に深刻な記事を書いています。

于 2013-04-01T17:27:57.600 に答える