![]() |
MDI-Form & MDI-Child & DLL's
Hallo zusammen,
da ich gerade am planen bin für ein größeres Programm, wollte ich mal fragen ob es möglich ist die MDI-Child Fenster auszulagern in eine DLL ? Ich weiß, dass ich normale Forms in eine DLL auslagern kann, habe das auch schon des öfteren gemacht. Nur bei MDI-Fenster bin ich mir nicht ganz sicher. Meine Fragen dazu :
|
Re: MDI-Form & MDI-Child & DLL's
Ja, im Prinzip ist es möglich.
Wie war das noch ... :gruebel: 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:
Der Aufruf aus der Host-Anwendung könnte so aussehen:
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;
Delphi-Quellcode:
fCreateForm(Application,Form1);
Zitat:
Zitat:
Zitat:
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. |
Re: MDI-Form & MDI-Child & DLL's
Du kannst Forms in BPLs auslagern.
Schau mal hier: ![]() |
Re: MDI-Form & MDI-Child & DLL's
Zitat:
Die erzeugen DLL und können problemlos als MDI eingebunden werden. Das besondere von Delphi kann ein Hydra Plugin aufgerufen werden, welches das Net-Framework nutzt und in Netframework kann eine dll aufgerufen werden, welche in Delphi geschrieben ist. Das verkorkste bpl Prinzip würde ich nicht mehr bei neuen Projekten nutzen. Das ist mit allen Abhängigkeiten einfach nur noch kaputt. Gruß Peter |
Re: MDI-Form & MDI-Child & DLL's
Danke erstmal für eure Antworten.
Zitat:
Zitat:
Delphi-Quellcode:
Was muss ich jetzt ändern, damit ich ein MDI-Fenster in eine DLL packen kann und es dann in der MDI-Form angezeigt wird.
procedure OptionBox(appHandle: THandle); stdcall;
begin if appHandle = 0 then apphandle := GetActiveWindow; Application.Handle := appHandle; try with TMainOptionBox.Create(Application) do try ShowModal finally Free; end except on E: Exception do Application.HandleException(E); end; Application.Handle := 0; end; |
Re: MDI-Form & MDI-Child & DLL's
*dezentes push* Hat keiner für mich einen Tipp ? *dezentes push*
|
Re: MDI-Form & MDI-Child & DLL's
Der dezenteste Tipp den ich dir geben kann ist, es über BPLs - statt DLLs - zu machen.
Um MDI-Forms für Delphi in DLLs auszulagern und zu benutzen muss man fast mit Kanonen auf Spatzen schießen. BPLs sind zwar auch "nur" DLLs, die aber etwas umgebogen sind und hier von Haus aus unterstützung für solche Vorhaben mitbringen und deswegen besser geeignet sind - auch wenn anderes behauptet wird. |
Re: MDI-Form & MDI-Child & DLL's
Zitat:
|
Re: MDI-Form & MDI-Child & DLL's
BPLs sind "spezielle" DLLs. Man kann sie aber auch nach dem compilen von BPL nach DLL umbenennen.
Veraltet und Fehleranfällig würde ich nicht unbedingt sagen. Soweit ich weiß ist das einzige Manko: Man muss die BPLs mit ausliefern, die man im Projekt verwendet hat. Also rtl60, vcl60, vcljpg60, ... Wo vorher halt alles in die .exe reincompiled wurde. |
Re: MDI-Form & MDI-Child & DLL's
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 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