Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Eigene Komponente mit erweitertem Construktor? (https://www.delphipraxis.net/194952-eigene-komponente-mit-erweitertem-construktor.html)

Codehunter 22. Jan 2018 14:22

AW: Eigene Komponente mit erweitertem Construktor?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1391649)
Zitat:

Zitat von sko1 (Beitrag 1391645)
Diese Komponente wird (aus hier nicht zu erklärenden Gründen) nicht in der Komponentenpalette installiert werden und wird immer per Code erzeugt, damit sind ein paar Einwände "entkräftet"...

Dann ist sie auch keine Komponenten im Sinne von, das ihre Vorfahrklasse TComponent sein müsste.
Dann reicht eine Ableitung von TObject auch aus.

Wenn es eine visuelle Komponente ist, dann schon. Ich habe auch etliche solche Komponenten gebaut, die nie in der Komponentenpalette auftauchen. So zum Beispiel Inline-Editoren für den Virtual Treeview. Die werden naturgemäß IMMER zur Runtime erzeugt.

mucsim 23. Jan 2018 11:05

AW: Eigene Komponente mit erweitertem Construktor?
 
Zitat:

ich möchte jetzt den Aufruf von Create um einen weiteren Parameter erweitern (z.B. ein Dateiname einer Datei die im Create bereits geladen werden soll)
Dafür erstellt man einfach einen

constructor Create(AOwner : TComponent; FileName : String)
begin
inherited Create( AOwner );
...
LoadFromFile( FileName );
end;

Man muss in dem code natürlich explizit dieses neue Create aufrufen - wie oben beschrieben kein Problem, da die Komponente/Control ja zur Laufzeit erzeugt werden soll.

Eigenschaften kann man dann auch innerhalb des Create setzen, also nachdem inherited aufgerufen wurde.

Wenn es sich um eine visuelle Komponente handelt muss man aufpassen - innerhalb von Create hat diese noch kein Fensterhandle.

Für Komponenten die aus der DFM geladen werden, wird nach dem Laden auch noch "Loaded" aufgerufen. Dies sollte man für manche Komponenten auch machen, wenn sie zur Laufzeit erzeugt wurden und die Eigenschaften gesetzt wurden.

Codehunter 23. Jan 2018 11:31

AW: Eigene Komponente mit erweitertem Construktor?
 
Willkommen in der DP!

Zitat:

Zitat von mucsim (Beitrag 1391746)
Delphi-Quellcode:
constructor Create(AOwner : TComponent; FileName : String)
begin
   inherited Create( AOwner );
   ...
   LoadFromFile( FileName );
end;

Vorsicht... Mit dem inherited ruft man den Konstruktor der Elternklasse auf, nicht den der eigenen Klasse. Wenn man da aber schon einen überschriebenen Konstruktor in Standarddeklaration hat, sollte man den aufrufen. Andernfalls kopiert man sich den selben Code in beide Konstruktoren und das ist unschön.

himitsu 23. Jan 2018 11:59

AW: Eigene Komponente mit erweitertem Construktor?
 
Zitat:

Zitat von Codehunter (Beitrag 1391748)
Vorsicht... Mit dem inherited ruft man den Konstruktor der Elternklasse auf, nicht den der eigenen Klasse. Wenn man da aber schon einen überschriebenen Konstruktor in Standarddeklaration hat, sollte man den aufrufen. Andernfalls kopiert man sich den selben Code in beide Konstruktoren und das ist unschön.

Jupp, für Ausführlich siehe Antwort #3.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:39 Uhr.
Seite 2 von 2     12   

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