![]() |
AW: Contructor des verbten Forms aufrufen
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:
//Das Masterformular aus dem geerbt wird
{------------------------------------------------------------------------------------------------------------}
{}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}
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz