Einzelnen Beitrag anzeigen

Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

Re: Form kann nicht angezeigt werden?

  Alt 9. Mai 2005, 17:58
Hallo allerseits,

neue Woche, neues Glueck: ich habs geschafft. Damit nicht nur ich profitiere, stelle ich die Loesung mal hier rein:

Die Loesung verwendet die oben erwaehnten CreateParams. Die Funktion die das Form erstellt (in der DLL) wird so deklariert:
Delphi-Quellcode:
function GetMainForm(ParentHandle: HWND): TForm; stdcall;
begin
   if ParentHandle > 0 then
      Result := TfrmDLL.CreateParented(ParentHandle)
   else
      Application.CreateForm(TfrmDLL, Result);
end;
Das Form muss die CreateParams-Methode im public-Bereich ueberschreiben:
procedure CreateParams(var Params: TCreateParams); override; Die Implementation sieht dann so aus:
Delphi-Quellcode:
procedure TfrmDLL.CreateParams(var Params: TCreateParams);
begin
   inherited CreateParams(Params);
   if Self.ParentWindow > 0 then
      Params.Style := Params.Style or WS_CHILD;
end;
Bei der Verwendung wird zuerst der Funktionstyp deklariert:
TGetDLLFrm = function(ParentHandle: HWND): TForm; stdcall; Nun kann man sich den Pointer auf die Funktion holen:
DLLFormProc := GetProcAddress(DLLHandle, PChar('GetMainForm')); Und anschliessend kann man sich auch das Form holen:
Delphi-Quellcode:
ModuleForm := TGetDLLFrm(DLLFormProc)(Panel1.Handle);
with ModuleForm do
begin
   BorderStyle := bsNone;
   Align := alClient;
   Visible := True;
end;
Bei mir funktioniert das, vielen Dank an alle die geholfen haben

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat