AGB  ·  Datenschutz  ·  Impressum  







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

Eigene Komponente mit erweitertem Construktor?

Ein Thema von sko1 · begonnen am 22. Jan 2018 · letzter Beitrag vom 23. Jan 2018
Antwort Antwort
Seite 1 von 2  1 2      
sko1

Registriert seit: 27. Jan 2017
588 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Eigene Komponente mit erweitertem Construktor?

  Alt 22. Jan 2018, 11:21
Hallo,

eine eigene Komponente erzeuge ich normalerweise mit

Delphi-Quellcode:
    constructor Create(AOwner: TComponent); override;
...
constructor TMyControl.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
...
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)

Irgendwie fehlt mir der Ansatz wie man das bewerkstelligen könnte ...

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Eigene Komponente mit erweitertem Construktor?

  Alt 22. Jan 2018, 11:30
Bei (GUI)-Controls sollte man das nicht machen, da diese ja nach nicht mehr ohne Einschränkung durch "Fallen lassen" in der Delphi-IDE eingestzt werden können.
Den das normale Dephi-DFM-Streaming zum erzeugen des Formulares kann nur mit dem Standard-Konstruktor umgehen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#3

AW: Eigene Komponente mit erweitertem Construktor?

  Alt 22. Jan 2018, 11:36
Ohne das override , da du ja was Neues machst.
Und wie bereits gemacht, das inherited; mit explititem Aufruf inherited Create(AOwner); , aber besser ohne Inherited, also nur Create(AOwner); , siehe abschließenden Absatz.

Eventuell aber mit virtual , falls du es in Nachfahren überschreiben willst.
Aber zu bedenken ist, dass bei Erstellung über die DFM (Komponente auf der Form) immer nur das originale Create(AOwner) vom DFM-Loader aufgerufen wird,
also wichtige Initialisierungscodes müssen immer in Create. Aus diesem Grund auch ohne inherited, um auch nachfolgende Überschreibungen von Create(AOwner) zu erwischen.

[edit] Wie Bernhard schon sagte: Der wichtige Code muß ins originale Create und nur zusätzlicher/abweichender Codes in deinen neuen Constructor.
Da dann auch immer den normalen Constructor Create(AOwner) aufrufen ... wenn es nicht anders geht, dann Create(AOwner) als final dekalieren und ein weiteres Überschreiben sperren.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (22. Jan 2018 um 13:12 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
970 Beiträge
 
Delphi 6 Professional
 
#4

AW: Eigene Komponente mit erweitertem Construktor?

  Alt 22. Jan 2018, 13:37
Hmm..

Um eine neue neue Function/Constructor mit anderen Parameter zu erstellen gibt es (meines Wissens) das reintroduce, damit wird ähnlich des Overloads eine neue Function mit anderen Parametern angelegt, mit dem Unterschied, dass die Überschriebene Function der Vorgängerclasse nicht mehr direkt verwenden kann.

Wenn Du nur eine 2., alternative Funktion erstellen willst, ist das overload statt reintroduce das Richtige.


Ersetzen:
Delphi-Quellcode:
    constructor Create(AOwner: TComponent;AFileName : string); reintroduce;
...
constructor TMyControl.Create(AOwner: TComponent;AFileName : string);
begin
  inherited Create(AOwner);
  FFileName := AFileName;
end;

...

Zusätzlich
Delphi-Quellcode:
    constructor Create(AOwner: TComponent;AFileName : string); overload;
...
constructor TMyControl.Create(AOwner: TComponent;AFileName : string);
begin
  inherited Create(AOwner);
  FFileName := AFileName;
end;

...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

AW: Eigene Komponente mit erweitertem Construktor?

  Alt 22. Jan 2018, 14:00
Nein, reintroduce gibt nur dem Compiler zu verstehen, dass du absichtlich eine alte virtuelle Methode verdecken willst, und deaktiviert da die Compilerwarnung.
Es ist quasi das Gegenteil von overload .
http://docwiki.embarcadero.com/RADSt...i)#Reintroduce

Ist nötig, wenn man nur den neuen Constructor verwenden und den alten Constructor verstecken will, was aber keine gute Idee ist, falls die Komponente auch auf eine Form gepappt werden kann/darf.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (22. Jan 2018 um 14:02 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
970 Beiträge
 
Delphi 6 Professional
 
#6

AW: Eigene Komponente mit erweitertem Construktor?

  Alt 22. Jan 2018, 14:11
Hmm.

Nein, reintroduce gibt nur dem Compiler zu verstehen, dass du absichtlich eine alte virtuelle Methode verdecken willst, und deaktiviert da die Compilerwarnung.
Es ist quasi das Gegenteil von overload .

hatte ich das nicht geschrieben:

Um eine neue neue Function/Constructor mit anderen Parameter zu erstellen gibt es (meines Wissens) das reintroduce, damit wird ähnlich des Overloads eine neue Function mit anderen Parametern angelegt, mit dem Unterschied, dass die Überschriebene Function der Vorgängerclasse nicht mehr direkt verwenden kann.
OK, vielleicht nicht so klar ausgedrückt
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
588 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Eigene Komponente mit erweitertem Construktor?

  Alt 22. Jan 2018, 14:57
Vielen Dank, ich denke da komme ich jetzt weiter!

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"...

Was ich aber gerade denke:
Kann man eine public Property der Komponente bereits vor dem Create beschreiben und im Create verwenden?

Also z.B. einen Filenamen setzen bevor Create aufgerufen wird (diese Datei soll das Aussehen der Komponente steuern).

Ich mag für so was keine globale Variable einsetzen...

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

AW: Eigene Komponente mit erweitertem Construktor?

  Alt 22. Jan 2018, 15:11
Du kannst keine Eigenschaften von etwas setzen, was noch gar nicht existiert. Ohne Variable außerhalb der Klasse (oder evtl. eine Klassenvariable), die Du initialisierst und deren Wert Du im/nach dem Konstruktor dann der Property zuweist, dürfte das also schwierig werden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Eigene Komponente mit erweitertem Construktor?

  Alt 22. Jan 2018, 15:11
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#10

AW: Eigene Komponente mit erweitertem Construktor?

  Alt 22. Jan 2018, 15:15
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 braucht es aber doch auch keine Komponente zu sein. Dann kannst du ja von TObject ableiten und den Constructor aufbauen, wie du willst.

Edit: Sorry, Bernhard war schneller.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:39 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