Hallo Zusammen,
sorry für den schlechten Titel.
Ich habe eine
MDI Anwendung. Bei diesem Projekt gibt es ein leeres TfrMaster Form aus diesem alle andere Form erben.
Damit jeder Form auch Parameter beim Create übergeben werden kann, habe ich den Constructor von TfrMaster überschrieben
und erweitert.
Constructor Create(AOwner: TComponent; aParams:TObject); overload;
Zusätzlich habe ich eine allgemeingültige Methode erstellt die jede Form erzeugen kann.
{}function TfrMain.StartChildForm(FormClass: TFormClass; Berechtigt:TBerechtigung; Params:TObject=nil):TForm;
Was mir jetzt nicht klar ist, wie erzeuge ich das Form mit dem neuen Constructor und wie muss der Construktor im abgeleiteten Form
aussehen damit er aufgerufen wird?
Das ist das MasterForm aus diesem alle Andere Form erben sollen.
Delphi-Quellcode:
unit Master;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs;
type
TfrMaster =
class(TForm)
private
{ Private-Deklarationen }
FParams:TObject;
public
{ Public-Deklarationen }
Constructor Create(AOwner: TComponent; aParams:TObject);
overload;
end;
var
frMaster: TfrMaster;
implementation
{$R *.dfm}
{ TForm1 }
constructor TfrMaster.Create(AOwner: TComponent; aParams: TObject);
begin
//Wird bei jeder erzeugten Form aufgerufen
inherited create(AOwner);
FParams := aParams;
end;
end.
Das ist eine abgeleitete Form. Der Constructor wird nicht aufgerufen um die Parameter konsumieren zu können
Delphi-Quellcode:
unit Adressen;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs, Master;
type
TfrAdressen =
class(TfrMaster)
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
FParams:TObject;
Constructor Create(AOwner: TComponent; aParams:TObject);
overload;
end;
var
frAdressen: TfrAdressen;
implementation
{$R *.dfm}
constructor TfrAdressen.Create(AOwner: TComponent; aParams: TObject);
begin
//Wird nicht aufgerufen!
inherited create(AOwner);
FParams := aParams;
end;
end.
Delphi-Quellcode:
{------------------------------------------------------------------------------------------------------------}
{}function TfrMain2.StartChildForm2(FormClass: TFormClass; Berechtigt:TBerechtigung; Params:TObject=nil):TForm;
{------------------------------------------------------------------------------------------------------------}
{-----------------------------------------}
{}procedure CreateAForm(var Result: TForm);
{-----------------------------------------}
begin
//Wie das ChildForm erzeugen?
result := FormClass.Create(Application); <<< so gehts, aber ohne Parameterübergabe
result := FormClass.Create(Application, Params); <<< so gehts nicht. Typcast?
with result as TfrMaster do
begin
AdvToolBar1.AddMDIChildMenu(result);
Inc(FChildCount);
result.OnClose := ChildFormClose;
AdvOfficeMDITabSet1.AddTab(result);
end;
end;{StartChildForm}
begin
CheckBerechtigtBis(Berechtigt);
result := nil;
if (GetKeyState(VK_LCONTROL)<0)then
begin
CreateAForm(Result);
end else
begin
result := BringChildFormToFront(copy(FormClass.ClassName,2,Length(FormClass.ClassName)),'');
if (result = nil)then
begin
CreateAForm(Result);
end;{if}
end;{if}
end;
Herzlichen Dank für die Hilfestellung.
Gruß Kostas