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 bei Ableitung Typ eines vorhandenen Felds ändern (https://www.delphipraxis.net/29474-bei-ableitung-typ-eines-vorhandenen-felds-aendern.html)

unerwartet 9. Sep 2004 14:43


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:
 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;
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.
In der OH steht die Definition folgendermaßen:

für TTreeView.Items:
Delphi-Quellcode:
property Items: TTreeNodes;
Hier fällt mir schon auf, dass das so gar nicht funktioniert, denn Delphi erwartet an dieser Stelle mindestens eine READ oder WRITE Anweisung.

für TTreeNodes.Item:
Delphi-Quellcode:
property Item[Index: Integer]: TTreeNode; default;
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.

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

Hansa 10. Sep 2004 09:14

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;

unerwartet 10. Sep 2004 10:55

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