Hallo zusammen,
bin am verzweifeln und hoffe auf eure Hilfe.
Ich möchte ein Form in ein Mainform platzieren (ähnlich MDIChild). Da aber Verwaltungsaufgaben in MainForm noch auszuführen sind, muss das DLLForm in MainForm zugänglich sein. Für Units (über uses) ist das kein Problem, bei DLLs sieht das jedoch anders aus. Deshalb habe ich mir folgenden Aufbau ausgedacht:
Delphi-Quellcode:
unit DLL_0_U1;
interface
uses
ShareMem, Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type
TMainForm =
class(TForm)
OpenDLLForm: TButton;
procedure OpenDLLFormClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
// Entweder als DLL oder als Unit einbinden - siehe unten
// function Show_DLLForm : TForm; stdcall; external 'DLL_1.DLL';
var
MainForm: TMainForm;
implementation
{$R *.DFM}
// Entweder als DLL (siehe oben) oder als Unit einbinden
uses DLL_1_U1;
procedure TMainForm.OpenDLLFormClick(Sender: TObject);
var F : TForm;
begin
F := Show_DLLForm;
F.Top := 1;
F.Left := 1;
F.Visible := true;
Application.ProcessMessages;
// nur zum Debuggen
F.Parent := MainForm;
// DLLForm als Child vom Mainform
Application.ProcessMessages;
// F.Show; // wird nicht gebraucht, da durch Create angezeigt ?!
end;
end.
unit DLL_1_U1;
interface
uses
ShareMem, Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ExtCtrls;
type
TDLLForm1 =
class(TForm)
Label1: TLabel;
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
function Show_DLLForm : TForm;
implementation
{$R *.DFM}
function Show_DLLForm : TForm;
var
DLLForm: TDLLForm1;
begin
DLLForm := TDLLForm1.Create (Application);
Result := TForm (DLLForm);
end;
end.
Soweit funktioniert auch alles. Wenn ich nun die DLL_1_U1 als
DLL-Datei einbinde (siehe "// Entweder als
DLL..." in
unit DLL_0_U1), wird das Fenster auch erzeugt und angezeigt. Doch bei der Zuweisung
F.Parent := MainForm;
verschwindet das Fenster. Einfach weg!
Ich würde es jedoch gerne über DLLs lösen. Nur der Vollständigkeit halber:
Delphi-Quellcode:
library DLL_1;
uses
ShareMem, SysUtils,
Classes,
DLL_1_U1 in 'DLL_1_U1.pas' {DLLForm1};
{$R *.RES}
exports
Show_DLLForm name 'Show_DLLForm';
begin
end.
Hat jemand eine Erklärung dafür oder noch besser EINE LÖSUNG ???
[edit=sakura] Nicht aller Text muss fett sein Mfg, sakura[/edit]