Danke erstmal für eure Antworten.
Zitat von
hanspeter:
Falls es was kosten darf, würde ich Dir die Hydra-Plugins von Remobjects empfehlen.
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.
Da ich nur mit Turbo Delphi Explorer arbeitet, ist glaube ich das Hydra Plugin nicht ganz das richtige.
Zitat von
gmc616:
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);
Ich habe diesen Code mal in verschiedenen Varianten ausprobiert, nur leider gibt es dann immer den Fehler, dass er keine
MDI-Child Fenster erzeugen kann, weil keine
MDI-Form zur Verfügung steht. Meine Procedure in der
DLL sah bisher wie folgt aus :
Delphi-Quellcode:
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;
Was muss ich jetzt ändern, damit ich ein
MDI-Fenster in eine
DLL packen kann und es dann in der
MDI-Form angezeigt wird.