![]() |
class function, constructor oder function - guter Stil
Hi,
bitte nicht gleich lynchen für die simple Frage, aber ich bin jetzt irgendwie gedanklich festgefahren. Ich habe ein Basis - Dialogform. Davon gibt es dann einige Ableitungen. Im Programm reicht mir dann ein Aufruf des Forms, welches lediglich eine ID (gewählter Datensatz) zurückgibt. Momentan habe ich das mit einer class function im Basisform gemacht und es scheint auch das zu tun, was es soll.
Delphi-Quellcode:
Somit kann ich jetzt über die Klasse immer meinen Dialog aufrufen
class function TfrmBase.CreateAndShowModal(AOwner: TComponent; var AParam:
Integer): Boolean; Var f: TfrmBase; begin // dirkter Aufruf Constructor ? f := Create(AOwner); try f.Init; Result := f.ShowModal = mrOK; if Result then AParam := f.GetParam; finally f.Free; end; end;
Delphi-Quellcode:
Allerdings habe ich das Gefühl, dass meist lieber dafür ein Constructor benutzt wird.
if TBranchenAuswahl.CreateAndShowModal(Self, AId) then
begin // mach was end Dann wäre noch die Möglichkeit, eine Methode zu schreiben, die die Forms dann entsprechend der Klasse erzeugt (so etwa CreateSelectFormAndShowModal(AFormClass: TFormClass...) Ist gegen die class function etwas einzuwenden? Oder noch einfacher gefragt: Welcher Stil ist sauber? [Edit]Rechtschreibfehler korrigiert[/EDIT] Danke, Frank |
Re: class function, constructor oder function - guter Stil
Ein Konstruktor ist ja auch eine Art Klassenmethode.
Deine Lösung hat den Vorteil, dass keine Instanz existieren muss. |
Re: class function, constructor oder function - guter Stil
Im Prinzip ist diese Konstruktion Ok, habe ich auch schon so gemacht.
Problematisch ist eventuell der Owner, hier besser nil übergeben, da deine Funktion die Freigabe selbst übernimmt. |
Re: class function, constructor oder function - guter Stil
Den Owner braucht man hier wirklich nicht und den Grund hat Blup ja schon erwähnt,
aber manchmal wäre einen Parent nicht schlecht übergeben. Also ein Fenster zu dem das hier erstellte Fenster untergeordnet sein soll. |
Re: class function, constructor oder function - guter Stil
Erst mal vielen Dank an Alle!
Jetz kann ich auf diesem Weg beruhigt meine Dialogformular - Aufrufe vereinfachen. Den Owner übergebe ich, um evtll. das PopupParent setzen zu können. [EDIT]Klar, ich sollte dann den Parameter besser APopupParent nennen.[/EDIT] Ich habe nämlich das Problem mit verdeckten modalen Fenstern (Z-Order) noch nicht 100%ig im Griff. (Das betrifft aber wahrscheinlich nur Anwendungen unter Citrix und ist halt ein anderes Problem) Frank |
Re: class function, constructor oder function - guter Stil
Zitat:
Delphi-Quellcode:
Gruß Frank
class function TfrmBase.CreateAndShowModal(AParent: TComponent; var AParam: Integer): Boolean;
Var f: TfrmBase; begin f := Create(nil); try f.Parent := AParent; f.Init; Result := f.ShowModal = mrOK; if Result then AParam := f.GetParam; finally f.Free; end; end; class function TfrmBase.CreateAndShowModal(AParent: TComponent; out AParam: Integer): Boolean; begin with Create(nil) as TfrmBase do try Parent := AParent; Init; Result := ShowModal = mrOK; if Result then AParam := GetParam; finally Free; end; end; |
Re: class function, constructor oder function - guter Stil
Zitat:
Ich will einen modalen Dialog ja nicht auf ein anderes Form legen. Es soll schon wie ein Dialogformular verschiebbar etc. sein. Gruß, Frank |
Re: class function, constructor oder function - guter Stil
Bei Fenstern ist das so, daß das ParentWindows gesperrt wird (keine Eingabe dort möglich) und daß das ChildWindow immer vor dem ParentWindow liegt.
Ohne Parent sind die Beiden unabhängig voneinander, also auch was die Z-Order betrifft ... es sei denn zu steuerst selber die Z-Order. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 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 by Thomas Breitkreuz