![]() |
bei Ableitung Typ eines vorhandenen Felds ändern
Ich habe folgendes Problem.
Ich habe eine Klasse TTLTree, die von TTreeView abgeleitet ist. Ich habe eine Klasse TTLNodes, die von TTreeNodes abgeleitet ist. Wie erreiche ich es nun, dass meine Klasse TTLTree unter der Eigenschaft 'Items' statt der herkömmlichen TTreeNodes meine Klasse TTLNodes benutzt? (Tatsächlich ist die Sache noch komplizierter, TTLNodes nur deswegen von mir abgeleitet wurde, damit ich auch TTLNode dort benutzen kann, denn dort habe ich die eigentliche Anpassung gemacht). Ich habe das auf folgendem Weg probiert:
Delphi-Quellcode:
Hierbei bekomme ich aber EAccessViolations, die ich nicht zuordnen kann. Aber bei der Definition von TTLTreeView.Items und TTLTreeNodes.Item habe ich schon gemerkt, dass ich da keine Ahnung was ich dort eintragen soll.
TTLTreeNode= class(TTreeNode)
private fObjekt: TObject; public property Objekt:TObject read fObjekt write fObjekt; end; TTLTreeNodes= class(TTreeNodes) public Item: array of TTLTreeNode; end; TTLTree = class(TTreeView) private fRootNode: TTreeNode; public Items: TTLTreeNodes; property rootNode: TTreeNode read fRootNode; end; In der OH steht die Definition folgendermaßen: für TTreeView.Items:
Delphi-Quellcode:
Hier fällt mir schon auf, dass das so gar nicht funktioniert, denn Delphi erwartet an dieser Stelle mindestens eine READ oder WRITE Anweisung.
property Items: TTreeNodes;
für TTreeNodes.Item:
Delphi-Quellcode:
Hier hab ich noch mehr Verständnisprobleme. Ist das jetzt ein array oder was sagt diese Definition aus? Was bedeutet das Wort 'default' an dieser Stelle. Und auch hier das selbe Problem, dass Delphi den Mangel an READ und WRITE bemängelt.
property Item[Index: Integer]: TTreeNode; default;
Ich weiß nun nicht, wie ich vorgehen soll, um mein Ziel zu erreichen. Falls das ganze jetzt etwas zu konfus war, noch mal in anderen Worten. Ich habe die Klasse TTLTreeNode von TTreeNode abgeleitet und dort eine Änderung eingebracht. Diese Klasse möchte ich nun in einem TreeView verwenden, den ich dafür (und für andere Anpassungen) auch abgeleitet habe. Wie erreiche ich das? Gruß Marco |
Re: bei Ableitung Typ eines vorhandenen Felds ändern
alles ohne Gewähr : 8)
1. statt als public,als published deklarieren 2. die Feld-Properties, also die mit dem Anfangs "f" müssen irgendwo auch besetzt werden. Davon sehe ich bei dir aber nichts. Hier ein Bsp.:
Delphi-Quellcode:
TMyLabel = class(TCustomLabel)
private FPosition: Boolean; ... published property Position: TLabelPosition read FPosition write SetPosition; end; procedure TMyLabel.SetPosition(const Value: TLabelPosition); begin FPosition := Value; ... end; |
Re: bei Ableitung Typ eines vorhandenen Felds ändern
Also ich muss zugeben, verstanden habe ich es immer noch nicht. Allerdings muss ich das zum Glück auch nicht mehr (obwohl es schön wäre die Lösung hierfür zu finden), denn ich habe festgestellt, dass TTreeNode bereits die Möglichekeit bietet ein Objekt dahinter zu hängen. Und mehr brauch ich im Moment eigentlich nicht (und hoffe dass es auch nicht mehr wird, damit ich nicht wieder vor dem selben Problem stehe...)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 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