Einzelnen Beitrag anzeigen

Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Contructor des verbten Forms aufrufen

  Alt 31. Jan 2013, 12:18
Delphi-Version: 5
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
  Mit Zitat antworten Zitat