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