Delphi5で記述されたActiveXdllからMDI子ウィンドウを作成し、Delphi XE Windowsクライアントアプリケーションから作成されたMDI親ウィンドウに埋め込む方法はありますか?そうでない場合、動作を模倣する方法はありますか?
バックグラウンド
完全にDelphi5で記述されたアプリケーションがあります。アプリケーションの主な形式はMDI親ウィンドウです。アプリケーション内の他のすべてのフォームはMDI子フォームであり、それらはすべてActiveXライブラリから作成されます。親アプリケーションはActiveXを作成し、その後、ActiveXインターフェイスのメソッドを呼び出します。このメソッドからフォームが作成され、そのFormStyleがfsMDIChildに設定されます。この時点で、フォームはMDI親のMDI子です。これは、アプリケーションとActiveXライブラリの両方がランタイムパッケージを使用してコンパイルされるために機能します。その結果、すべてのフォームがTApplicationの同じインスタンスを共有します。
問題
アプリケーションは非常に大きいため、Delphi2010またはDelphiXEに移行する必要があります。最初にアプリケーションを移行し、次にActiveXライブラリを一度に1つずつ移行することで、アプリケーションを体系的に移行できれば素晴らしいと思います(約50個あります)。
問題は、コンソールアプリケーションがXEでコンパイルされている場合、Delphi5でコンパイルされているライブラリと同じTApplicationインスタンスを使用しなくなることです。
ActiveXライブラリのフォームを真のMDI子ウィンドウにすることができない場合でも、ActiveXから作成されたフォームのハンドルを返し、メインフォームから取得して、フォームをMDIの子。次に、イベントを処理するための独自のレイヤーを作成できます。
何か案は?
更新:このアプリケーションで現在採用されているアプローチは、MDIからSDIインターフェイスに移行されることです。各DLLの最初のフォームがそれ自体のデータ(追加のフォームのロード、保存、表示など)を処理できる限り、DelphiXEアプリケーションのDelphi5ActiveXDLLからTFormsをインスタンス化することは完全に可能です。問題は、元のMDI設計を維持することでした。SDI設計が受け入れ可能であることが証明されれば、MDIソリューションは必要ありません。それでも、誰かがMDIソリューションを実現する方法を知っているなら、私は知りたいです。