Wie kann ich ein MDI-Kind-Fenster aus einer Delphi 5 ActiveX-DLL erstellen, und binde sie in einem Delphi XE MDI Elternteil?

StackOverflow https://stackoverflow.com/questions/4412618

Frage

Gibt es eine Möglichkeit, ein untergeordnetes MDI-Fenster aus einem ActiveX zu erstellen DLL in Delphi 5 geschrieben, und es in einem übergeordneten MDI-Fenster aus einer Delphi XE Windows-Client-Anwendung erstellt einzubetten? Wenn nicht, gibt es eine Möglichkeit, zu imitieren das Verhalten?

Hintergrund

Es ist eine Anwendung vollständig in Delphi 5. Die wichtigste Form der Anwendung geschrieben wird, ein übergeordnetes MDI-Fenster. Alle anderen Formen in der Anwendung sind untergeordnete MDI-Formulare, und jeder von ihnen ist aus einer ActiveX-Bibliothek erstellt. Die Stammanmeldung schafft die ActiveX, nach dem Aufruf einer Methode der ActiveX-Schnittstelle ist. Von diesem Verfahren wird ein Formular erstellt und Formstyle ist es ist auf fsMDIChild. An diesem Punkt ist die Form ein MDI-Kind der übergeordneten MDI. Dies funktioniert sowohl, weil die Anwendung und die ActiveX-Bibliotheken verwenden Runtime-Pakete zusammengestellt. Als Ergebnis teilen alle Formen die gleiche 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 kann, indem man zuerst die Anwendung migrieren, und dann die Bibliotheken eines ActiveX Migration zu einer Zeit (es gibt etwa 50 von ihnen).

Das Problem ist, dass, wenn die Konsolenanwendung in XE kompiliert wird, wird es nicht länger die gleiche TApplication Instanz wie die Bibliotheken kompilierten noch in Delphi 5.

Auch wenn die Formen in der ActiveX-Bibliothek nicht wahr untergeordnetes MDI-Fenster sein können, scheint es, wie ich in der Lage sein sollte, den Griff der Form zurückzukehren, die aus dem ActiveX erstellt wird und es aus der Hauptform zu packen und die Form erscheinen ein MDI-Kind zu sein. Ich konnte dann für den Umgang mit Ereignissen meine eigene Ebene 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, instantiate TForms aus einer Delphi 5 ActiveX-DLL aus einer Delphi XE Anwendung, solange die erste Form von jeder DLL kann kümmern sich um sie eigenen Daten (Laden, Speichern, Anzeigen zusätzlicher Formulare, etc.). Das Problem war in der ursprünglichen MDI-Design zu halten. Wenn das SDI-Design akzeptabel beweist, gibt es keine Notwendigkeit für eine MDI-Lösung sein. wenn jemand weiß noch, wie die MDI-Lösung zu erreichen, ich würde gerne wissen.

War es hilfreich?

Lösung

Ursprünglich, ich sagte, dass man nicht so schaffen machen. Ich habe mir einige mehr und fand heraus, dass es möglich ist, es zu tun. Sie müssen sehr vorsichtig, obwohl sein.

Hier einige Quelle, die ich vor kurzem aus der Idee zum Test erstellt: http://cc.embarcadero.com/ Artikel / 28168

Der Code laicht der Windows-Rechner und Notizblock app, dann MDIize die externen Fenster in das MDI-Formular.

Klicken Sie auf Starten Sie Notepad nach dem Start der App und sehen, was passiert.

Es soll möglich sein, um die Arbeit zu ändern weiter, so dass Sie erreichen, was Sie brauchen.

Beachten Sie, dass Sie benötigen, um sicherzustellen, dass Ihr MDI Kind in der ActiveX-DLL vollständig in sich geschlossen ist.

Andere Tipps

Auch wenn die Formen im ActiveX Bibliothek kann nicht wahr MDI Kind sein Fenster, scheint es, wie ich sein sollte Lage, den Griff der Form zurückzukehren die aus dem ActiveX erstellt und greifen sie von der Haupt-Form und Make erscheint das Formular ein MDI-Kind zu sein. ich könnte dann meine eigene Ebene schaffen für Behandlung von Ereignissen.

würde ich so etwas wie diese (inspiriert von Marjan Kommentar) versuchen:
in den Delphi 5 MDI-Fenster, spaltete die Fenster in zwei Schichten für jede der Formen:

  • eine Reihe von rahmenlos TForms / TFrames den Inhalt, die (vielleicht aussetzen dies als ActiveX-Formulare)
  • für jeden rahmenlos Inhalt, ein MDI Kind, dass Griffe der MDI

in der Delphi XE host:

  • erhalten Sie den Griff für jede der Delphi 5 rahmenlos TForms / TFrames
  • einbetten, dass Griff in einer MDI-Kind Form

Es wahrscheinlich bedeutet, dass Sie, um doppelten Teil der Delphi 5 MDI in Delphi XE Handhabung.

- jeroen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top