![]() |
XML-Struktur in Objekte verwalten
Hi,
ich habe ![]() Nun möchte ich diese Struktur gerne objektorientiert umsetzen (mit TObject und TObjectlist). Mein Problem ist hier, dass ich wie bei der TreeView ein TreeNode habe, der unendlich viele Nodes besitzen kann und DER wiederum auch unendlich viele besitzen kann. Wie kann ich das objektorientiert umsetzen, hat jemand eine Idee? |
Re: XML-Struktur in Objekte verwalten
Will noch ein kleines Beispiel nachschieben, damit meine Frage noch deutlicher ist ;-)
Ich habe ein Objekt...
Delphi-Quellcode:
...dennoch möchte ich, dass DIESES Objekt wiederum Objekte vom Typ TOrdner enthalten kann (Ordner können ja Unterordner enthalten und diese wiederum Unterordner usw.).
type
TOrdner = class(TObject) Ordnername : String; Expanded: Boolean; end; Diese ganzen Ordner, möchte ich dann in einem einzelnen Objekt (z.B. TOrdnerSammlung vom Typen TObjectList) ablegen und speichern. So, nun hoffe ich, dass es klarer ist - denke, dass man mit meinem ersten Post nicht soviel anfangen konnte ;-) |
Re: XML-Struktur in Objekte verwalten
Hallo Yheeky,
ich selbst habe auch so ein Problem gehabt (es ging aber um eine Website mit deren Unterseiten) und habe letztendlich jedem Node einfach den Pointer eines erstellten Objektes mitgegeben. Damit hast du die Struktur in einem Baum, aber die Inhalte in den einzelnen Objekten. Sobald du auf einen Node zugreifst, kannst du dann das drangehängte Objekte auslesen. Grüße Jürgen |
Re: XML-Struktur in Objekte verwalten
Hallo Jürgen,
klingt gut, aber verstehe ich leider nicht :-( Kannst du das vielleicht einem Laien nochmal erklären :-) Vielleicht auch mit Code, dann ist´s vielleicht eindeutiger. Danke! |
Re: XML-Struktur in Objekte verwalten
Delphi-Quellcode:
Allerdings sollte das ganze schon ordentlich gekapselt sein (ohne Setter...)
type
TOrdner = class(TObject) Ordnername : String; Expanded: Boolean; Unterordner: TOrdnerSammlung; end; |
Re: XML-Struktur in Objekte verwalten
Ja, sowas in der Art dachte ich auch, allerdings sagt mit Delphi, wenn ich die beiden Klassen (TOrdner und TOrdnerSammlung) in zwei Units auslagere, dass ich "keine Zirkuläre Unit-Referenz" haben darf - und diese brauchte ich ja, weil man sonst die Objekte nicht findet :-(
|
Re: XML-Struktur in Objekte verwalten
Zitat:
![]() Die Klasse TComponent ist übrigens ein Composite. Mit Hilfe des Property ComponentCount und dem Array-Property Components[] kann man ganze Baumstrukturen aufbauen. Das Property Owner ist ebenfalls wichtig, damit jedes Objekt seinen Vorfahren in der Hierarchie kennt. Du kannst dir die Sache am Anfang einfach machen und die Klasse TOrder von TComponent ableiten. Später willst du aber vielleicht von TComponent weggehen, da diese Klasse doch etwas Overhead mit sich rumträgt. |
Re: XML-Struktur in Objekte verwalten
Mit TComponent möchte ich ungern arbeiten. Ich würde gerne meine eigene Klasse entwickeln, weil ich - wie du schon vermutet hast - den ganzen Overhead nicht mit drinhaben möchte.
Ist das so schwer, solch eine Klasse zu entwickeln? |
Re: XML-Struktur in Objekte verwalten
Zitat:
Delphi-Quellcode:
NodeListU:
unit NodeTypeU;
interface type TNodeCustom = class end; implementation end.
Delphi-Quellcode:
NodeU:
unit NodeListU;
interface uses Classes, NodeTypeU; type TNodeList = class private FNodes: TList; public constructor create; destructor destroy; override; procedure Clear; procedure addNode(Node:TNodeCustom); end; implementation { TNodeList } constructor TNodeList.create; begin FNodes:=TList.Create; end; destructor TNodeList.destroy; begin Clear; FNodes.free; inherited; end; procedure TNodeList.Clear; var i:integer; ItemObject:TObject; begin for i:=1 to FNodes.Count do begin ItemObject:=FNodes[i-1]; ItemObject.free; end; FNodes.Clear; end; procedure TNodeList.addNode(Node: TNodeCustom); begin FNodes.Add(Node); end; end.
Delphi-Quellcode:
unit NodeU;
interface uses NodeTypeU, NodeListU; type TNode = class(TNodeCustom) private FChildNodes:TNodeList; public constructor create; destructor destroy; override; procedure addChild(Node:TNode); end; implementation { TNode } constructor TNode.create; begin FChildNodes:=TNodeList.create; end; destructor TNode.destroy; begin FChildNodes.free; inherited; end; procedure TNode.addChild(Node: TNode); begin FChildNodes.addNode(Node); end; end. |
Re: XML-Struktur in Objekte verwalten
Ich habe schon gelesen, dass man das umgehen kann, aber anhand deines Beispieles könnte ich jetzt nicht sehen, was da genau TOrdner und TOrdnerSammlung ist.
Sorry, aber das versteh ich noch nicht :cry: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 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-2025 by Thomas Breitkreuz