Einzelnen Beitrag anzeigen

Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#5

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

  Alt 26. Dez 2007, 14:31
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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat