現在、Delphi 7でビルドされたSDIアプリケーションがあり、最終ユーザーが実行時にSDIとMDIの間のインターフェイスのタイプを選択するようにします。私の質問は、実行時にSDIとMDIの間でアプリケーションの動作をどのように変更できるかということです。
現在、これを可能にするいくつかのアプリケーションがdelphiで構築されていることを知っています。EMSSQLManagerとTOADです。
前もって感謝します。
現在、Delphi 7でビルドされたSDIアプリケーションがあり、最終ユーザーが実行時にSDIとMDIの間のインターフェイスのタイプを選択するようにします。私の質問は、実行時にSDIとMDIの間でアプリケーションの動作をどのように変更できるかということです。
現在、これを可能にするいくつかのアプリケーションがdelphiで構築されていることを知っています。EMSSQLManagerとTOADです。
前もって感謝します。
Jedi JVCL をダウンロードしてインストールし、JvDocking "docking in code" のデモを見てください。彼らはこれを正確に行います。
多くの問題が必要でない限り、実際には FormStyle=fsMDIChild を使用しないことを意味します。MDI は、必要なときにコードにドッキングすることで「エミュレート」されます。
ウィンドウをフレームに変換しないでください。これは悪い解決策です。
MDI の問題がない MDI のような環境では、ドッキング ソリューション (ドッキングをサポートする商用またはオープン ソースのコンポーネント) を使用します。フリーでオープンソースの JEDI JVCL に含まれている JvDocking を使用しています。
フォームを「ドッキング」モードと「ドッキング解除」(フローティング) モードの両方で使用すると、ドッキングされた IDE のルック アンド フィール (VIsual Studio および RAD Studio) と、ドッキングされていない IDE のルック アンド フィール (ドッキングされていない RAD Studio、または古典的なデルファイ 7)。
現在のウィンドウをフレームに変換し、これらのフレームを align=alClient で構成された mdi 子ウィンドウまたは通常のウィンドウに配置します。
しかし、注意してください: 私は実際にこれを行ったことがないので、私が知らない問題があるかもしれません.
実行時に、SDI または MDI が必要かどうかに応じて、TForm.FormStyle を fsNormal または fsMDIChild に設定します。
@WarrenP のソリューションと同様に、ドッキングベースのソリューションを強くお勧めします。これを実現するために Jedi VCL を使用する必要はありません。例として、これは私が作成した非常に単純な (すべてネイティブの vcl) コンポーネントです。これにより、フォームにできるだけ多くのインスタンスをドロップし、それらの配置を設定してドッキング (およびタブ付きドッキング) を有効にすることができます。地域。
MDI自体は、場所が起こるのを待っている事故です。MDI 自体を使用せずに「MDI のルック アンド フィール」を実現するためのソリューションはありますが、「きちんとした」と思われるソリューションにはまだ遭遇していません (おそらく見た目が悪いため)。
最終的には、オプションとして MDI を提供することの賢明さに疑問を呈する必要があります。ドッキング (ドッキング解除機能の有無にかかわらず、特にユーザーがタブ付きドッキングを選択する場合) はよりモダンに感じられ、(適切に行われると) MDI よりもはるかに柔軟で直感的になります。
ちょうど私の2ペンスの価値があります。