Einzelnen Beitrag anzeigen

gmc616

Registriert seit: 25. Jun 2004
Ort: Jena
627 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: MDI-Form & MDI-Child & DLL's

  Alt 19. Dez 2007, 16:41
Ja, im Prinzip ist es möglich.
Wie war das noch ...

Ich hab da mal 'n stück alten Code rausgesucht. Aber ob der korrekt funktioniert kann nicht garantieren.

Das ist die Dll-Funktion:
Delphi-Quellcode:
procedure fCreateForm(PApp: TApplication; PForm: TForm); stdcall; // P Steht für Parameter nicht für Pointer, obwohls quasi einer ist
var
  dllApp: TApplication;
begin
  dllApp := Application;
  Application := PApp; // das Application-Objekt auf die Host-Anwendung einstellen
  frmDll := TFrmDll.Create(PForm); // MDI-Child erzeugen
  frmDll.ParentForm := PForm;
  frmDll.ParentApplication := PApp;
  frmdll.FormStyle := fsMDIChild;
  frmDll.Show;
  Application := dllApp; // das Application-Objekt zurücksetzen, damit die DLL vernünftig beendet werden kann
end;
Der Aufruf aus der Host-Anwendung könnte so aussehen:
fCreateForm(Application,Form1);
Zitat von RWarnecke:
Worauf sollte ich achten ?
...das du beim Erstellen der Dll-Form das Application-Object der DLL mit dem Application-Object der Hostanwendung überschreibst und nach dem Erstellen wieder auf das DLL-Applaction-Object zurücksetzt. Ebenso beim Freigeben (... glaube ich, ich hab den Code leider nicht mehr. Ich nutze keine MDI's mehr in meinen Programmen.)

Zitat von RWarnecke:
Gibt es irgendwelche Besonderheiten gegenüber normalen Form's ?
Da kannst nicht auf das MDI-Parent zugreifen. Zumindest nicht schreibend bzw nicht ohne MemoryManager.

Zitat von RWarnecke:
Was wären von Vorteil, die DLL dynamisch zu laden oder statisch ?
Das ist glaube ich relativ egal, wenn du's richtig anstellst.
Beim dynamischen Laden, solltest du nicht in der DllMain (zwischen BEGIN und END in der Dll) das Fenster sofort versuchen zu erstellen, da ja evtl. dein Host-Application bzw. Form1 noch nicht existiert. Besser über eine exportierte Funktion, wie oben. Anders kriegst du ja die Parameter eh nicht rüber.

Ich hoffe, ich konnte helfen.
  Mit Zitat antworten Zitat