Delphi-PRAXiS

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/)
-   -   Delphi Konstruktor bei abgeleitetem TTreeView überschreiben (https://www.delphipraxis.net/29443-konstruktor-bei-abgeleitetem-ttreeview-ueberschreiben.html)

unerwartet 9. Sep 2004 09:53


Konstruktor bei abgeleitetem TTreeView überschreiben
 
Hallo,

ich habe eine Klasse von TTreeView abgeleitet. Nun möchte ich ein paar Anweisungen bereits bei der Erzeugung dieser Klasse ausführen lassen. Also wollte ich dafür den Konstruktor überschreiben. Nur will mir das nicht so recht gelingen.
Was mich bereits wunderte, in der OH von Delphi wird der Konstruktor von TTreeView nur in C++-Syntax angegeben. Er erwartet ein TComponent als Parameter und gibt ein TCustomTreeView zurück. Wenn ich allerdings versuche einen eben solchen Konstruktor anzulegen, beschwert sich Delphi dass eine Prozedur keinen Ergebnistyp haben kann.

Was mache ich an dieser Stelle falsch?
Entschuldigt bitte, wenn ich mich hier ein bisschen anstelle, ich bin noch nicht so bewandert in Delphi...

sieppl 9. Sep 2004 11:39

Re: Konstruktor bei abgeleitetem TTreeView überschreiben
 
Kannst du den betreffenden Code posten? Danke!

unerwartet 9. Sep 2004 11:47

Re: Konstruktor bei abgeleitetem TTreeView überschreiben
 
So steht der Konstruktor von TTreeView in der OH:
Code:
C++ Syntax:

__fastcall virtual TTreeView(Classes::TComponent* AOwner) : Qcomctrls::TCustomTreeView(AOwner) { }
Ich wollte nun folgenden Konstruktor schreiben:
Delphi-Quellcode:
constructor Create(owner: TComponent): TCustomTreeView;
begin
  inherited Create(owner);
  Self.fRootNode:= Self.Items.Add(nil, 'System');
end;
Wie der Konstruktor nun Am Ende aussieht, ist mir ja recht egal. Mir würde auch schon ein Konstruktor ohne Rückgabewert und ohne Parameter reichen. Nur würde er dann auch aufgerufen, wenn ich die Klasse intanziere?

sieppl 9. Sep 2004 12:53

Re: Konstruktor bei abgeleitetem TTreeView überschreiben
 
also wenn ich in der Delphi-Hilfe gucke, finde ich folgendes:
Delphi-Quellcode:
constructor Create(AOwner: TComponent);
also lass mal den rückgabe-parameter weg, der hat da nichts verloren.. :wink:

unerwartet 9. Sep 2004 13:19

Re: Konstruktor bei abgeleitetem TTreeView überschreiben
 
Zitat:

Zitat von sieppl
Delphi-Quellcode:
constructor Create(AOwner: TComponent);

Nanu? Wo hast du das gefunden? Ich hab wie gesagt nur das von mir gepostete gesehen. Aber gut. Kompilieren tut es damit ja. Und wenn du das so gefunden hast, wird das ja auch richtig sein. :-)

Nun hab ich nur noch folgendes Problem, dass ich nicht weiß, wie ich meinen Tree jetzt statt dem normalen TTreeView verwende (hier soll in einer bestehenden Anwendung der TreeView durch meinen ersetzt werden).
Ich wollte einfach per Hand den Typ im Interface-Abschnitt abändern. Wenn ich dann allerdings kompilieren will, sagt Delphi:
Code:
Feld bla muss vom Typ TTreeView sein, ist aber als TTLTreeView deklariert. Soll die Deklaration korrigiert werden?
Was muss denn da noch angepasst werden? Ich wollte den Tree eigentlich nicht erst zur Laufzeit erzeugen, sondern genauso wie es mit den Standardkomponenten von Delphi passiert.

Wenn ich bei dieser Abfrage auf Nein klicke, kompiliert das Ganze zwar, allerdings macht mir diese Abfrage schon etwas Sorgen. Wie werde ich sie los? Vor allem wie werde ich sie auf die 'richtige' Art los? ;-)

unerwartet 9. Sep 2004 13:41

Re: Konstruktor bei abgeleitetem TTreeView überschreiben
 
Hab die Lösung dafür jetzt selbst gefunden. Habe sie als Komponente in Delphi registriert und kann sie nun benutzen, wie das originale TTreeView.
Aber wie soll es anders sein, ich habe neue Probleme :-)
Denn der Konstruktor scheint ignoriert zu werden. Andere von mir zusätzlich angelegte Methoden sind verfügbar, werden auch korrekt ausgeführt, der Code im Konstruktor aber offenbar nicht. Was mache ich also noch immer falsch?

unerwartet 9. Sep 2004 14:04

Re: Konstruktor bei abgeleitetem TTreeView überschreiben
 
Ich habe jetzt in der OH endlich etwas darüber gefunden, wie man den Konstruktor von visuellen Komponenten überschreibt.

Delphi-Quellcode:
type
  **TWrapMemo = class(TMemo)
  public { Konstruktoren sind immer als public deklariert }
    ****constructor Create(AOwner: TComponent); override; { Diese Syntax ist immer gleich }
  *end;
...
constructor TWrapMemo.Create(AOwner: TComponent);*****{ Dies kommt nach der Implementierung }
begin
  **inherited Create(AOwner);***************************{ Diesen Schritt IMMER zuerst! }
  **WordWrap := False;**********************************{ Neuen Wert setzen }

*end;
Vermutlich lag es an dem fehlenden override bei mir. Jetzt klappt das schon mal. Vermutlich werden aber bald die nächsten Probleme auftauchen. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 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