Gibt es eine Möglichkeit, ein untergeordnetes MDI-Fenster aus einer in Delphi 5 geschriebenen ActiveX-DLL zu erstellen und es in ein übergeordnetes MDI-Fenster einzubetten, das aus einer Delphi XE-Windows-Clientanwendung erstellt wurde? Wenn nicht, gibt es eine Möglichkeit, das Verhalten nachzuahmen?Wie erstelle ich ein untergeordnetes MDI-Fenster aus einer Delphi 5-ActiveX-DLL und bette es in einen Delphi XE MDI-Elternteil ein?
Hintergrund
Es ist eine Anwendung geschrieben vollständig in Delphi 5. Die wichtigste Form der Anwendung ist ein übergeordnetes MDI-Fenster. Alle anderen Formulare in der Anwendung sind untergeordnete MDI-Formulare und jedes einzelne Formular wird aus einer ActiveX-Bibliothek erstellt. Die übergeordnete Anwendung erstellt das ActiveX, nach dem eine Methode der ActiveX-Schnittstelle aufgerufen wird. Von dieser Methode wird ein Formular erstellt und es ist FormStyle auf fsMDIChild festgelegt. Zu diesem Zeitpunkt ist das Formular ein untergeordnetes MDI des übergeordneten MDI. Dies funktioniert, da sowohl die Anwendung als auch die ActiveX-Bibliotheken mithilfe von Laufzeitpaketen kompiliert werden. Daher haben alle Formulare dieselbe Instanz von TApplication.
Das Problem
Die Anwendung ist sehr groß, und muss Delphi 2010 oder Delphi XE migriert werden. Es wäre fantastisch, wenn die Anwendung systematisch migriert werden könnte, indem zuerst die Anwendung migriert wird und dann die ActiveX-Bibliotheken nacheinander migriert werden (es gibt ungefähr 50 davon).
Das Problem ist, dass, wenn die Konsolenanwendung in XE kompiliert wird, ist es nicht mehr die gleiche TApplication Instanz sein wird, mit wie diese Bibliotheken in Delphi kompiliert noch 5.
Auch wenn die Formen in der ActiveX-Bibliothek kann nicht sein, Wahre MDI-Unterfenster, es scheint, als ob ich in der Lage sein sollte, das Handle des Formulars zurückzugeben, das von dem ActiveX erstellt wird, und es aus dem Hauptformular zu ziehen, und das Formular scheint, ein MDI-Kind zu sein. Ich könnte dann meine eigene Ebene für die Behandlung von Ereignissen erstellen.
Irgendwelche Ideen?
Update: Der Ansatz zur Zeit mit dieser Anwendung genommen wird, ist, dass es von MDI auf eine SDI-Schnittstelle migriert wird. Es ist durchaus möglich, TForms von einer Delphi 5 ActiveX DLL aus einer Delphi XE-Anwendung zu instanziieren, solange das erste Formular von jeder DLL sich um ihre eigenen Daten kümmert (Laden, Speichern, Anzeigen zusätzlicher Formulare usw.). Das Problem bestand darin, das ursprüngliche MDI-Design beizubehalten. Wenn das SDI-Design akzeptabel ist, wird keine MDI-Lösung benötigt. Dennoch, wenn jemand weiß, wie man die MDI-Lösung erreicht, würde ich es gerne wissen.
Sie könnten einbetten vielleicht die Formulare aus der ActiveX-Bibliothek in untergeordneten MDI-Formularen in der XE App erstellt ... (Re-Elternschaft der activex Formen in die XE instanziiert Formen - und nicht zu ändern Der Formularstil "activex forms" –