AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Contructor des verbten Forms aufrufen

Ein Thema von Kostas · begonnen am 31. Jan 2013 · letzter Beitrag vom 31. Jan 2013
Antwort Antwort
Seite 2 von 2     12   
Kostas

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

AW: Contructor des verbten Forms aufrufen

  Alt 31. Jan 2013, 21:35
Jetzt funkts einwandfrei.

Umgesetzt wie empfohlen über eine virtuelle Methode.
Jetzt kann ich jedes abgeleitete Form erzeugen zentral über die Methode StartChildForm erzeugen lassen und kann beliebige Parameter übergeben.

Tausend Dank für die großartige Hilfestellung.
Gruß Kostas

[Edit]
Was mit gerade wundert, ich habe mit Absicht die Methode SetMyParams aus dem Child Form entfernt. Das Form wird erzeugt ohne eine Exception!
Ich rufe ja hier die Methode SetMyParams auf.
Eigentlich müsste man ein Interface benutzen. Dann ist man gezwungen die Methode im ChildForm zu implementieren.

Delphi-Quellcode:
with result as TfrmBaseChild do
begin
  TfrmBaseChild(result).SetMyParams(Params);
end;




Delphi-Quellcode:
{------------------------------------------------------------------------------------------------------------}
{}function TfrMain2.StartChildForm(FormClass: TFormClass; Berechtigt:TBerechtigung; Params:TObject=nil):TForm;
{------------------------------------------------------------------------------------------------------------}
 
                    {-----------------------------------------}
                    {}procedure CreateAForm(var Result: TForm);
                    {-----------------------------------------}
                    begin
                      if FormClass.InheritsFrom(TfrMaster) then
                      begin
                        result := TFormClass(FormClass).Create(Application);
                      end;

                      if (result<>nil) then
                      begin
                        with result as TfrMaster do
                        begin
                          TfrMaster(result).SetMyParams(Params);

                        end;
                        AdvToolBar1.AddMDIChildMenu(result);
                        Inc(FChildCount);
                        result.OnClose := ChildFormClose;
                        AdvOfficeMDITabSet1.AddTab(result);
                      end;
                    end;{CreateAForm}

 
begin
   CheckBerechtigtBis(Berechtigt); //führ Abort aus falls keine Berechtigung
   result := nil;
 
   if (GetKeyState(VK_LCONTROL)<0)then //mit Absicht eine weitere Instanz des ChildForms erzeugen
   begin
     CreateAForm(Result);
   end else
   begin
     //existierendes Form in den Vordergrund holen
     result := BringChildFormToFront(copy(FormClass.ClassName,2,Length(FormClass.ClassName)),'');

     //neues Form erzeugen
     if (result = nil)then
     begin
       CreateAForm(Result);
     end;{if}
   end;{if}
end;{StartChildForm}
//Das Masterformular aus dem geerbt wird
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 }
   public
     { Public-Deklarationen }
     procedure SetMyParams(const Value: TObject); virtual;
  end;
 
var
   frMaster: TfrMaster;
 
implementation
 
{$R *.dfm}
 
{ TForm1 }
 

procedure TfrMaster.SetMyParams(const Value: TObject);
begin
  inherited;

end;
 
end.

//Das ChildForm welches aus TfrMaster erbt
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 }
    FParams:TObject;
   public
     { Public-Deklarationen }
     procedure SetMyParams(const Value: TObject); override;

   end;
 
var
   frAdressen: TfrAdressen;
 
implementation
 
{$R *.dfm}
 
procedure TfrAdressen.SetMyParams(const Value: TObject);
begin
  inherited;
  FParams := value;

end;
 

end.

Geändert von Kostas (31. Jan 2013 um 21:44 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz