AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MDI-Form & MDI-Child & DLL's

Ein Thema von RWarnecke · begonnen am 12. Dez 2007 · letzter Beitrag vom 29. Dez 2007
Antwort Antwort
gmc616

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

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

  Alt 19. Dez 2007, 15: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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz