Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi class function, constructor oder function - guter Stil (https://www.delphipraxis.net/128978-class-function-constructor-oder-function-guter-stil.html)

dataspider 10. Feb 2009 16:40


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:
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;
Somit kann ich jetzt über die Klasse immer meinen Dialog aufrufen
Delphi-Quellcode:
if TBranchenAuswahl.CreateAndShowModal(Self, AId) then
begin
  // mach was
end
Allerdings habe ich das Gefühl, dass meist lieber dafür ein Constructor benutzt wird.
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

mkinzler 10. Feb 2009 16:46

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.

Blup 11. Feb 2009 09:58

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.

himitsu 11. Feb 2009 10:21

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.

dataspider 11. Feb 2009 10:38

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

himitsu 11. Feb 2009 11:07

Re: class function, constructor oder function - guter Stil
 
Zitat:

Zitat von dataspider
Ich habe nämlich das Problem mit verdeckten modalen Fenstern (Z-Order) noch nicht 100%ig im Griff.

drum übetgib mal deinem Fenster einen passenden Parent ... dieses bewirkt Wunder :angel:

Delphi-Quellcode:
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;
Gruß Frank

dataspider 11. Feb 2009 12:05

Re: class function, constructor oder function - guter Stil
 
Zitat:

Zitat von himitsu
drum übetgib mal deinem Fenster einen passenden Parent ... dieses bewirkt Wunder

Meinst du wirklich Parent?.

Ich will einen modalen Dialog ja nicht auf ein anderes Form legen.
Es soll schon wie ein Dialogformular verschiebbar etc. sein.

Gruß, Frank

himitsu 11. Feb 2009 12:13

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