Einzelnen Beitrag anzeigen

Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: XML-Struktur in Objekte verwalten

  Alt 24. Aug 2008, 09:18
Hallo Christian,

ich frage nochmal nach, was genau der Zweck dieses objektorientierten Aufbaus ist.

Nehmen wir an, diese Infos soll Dein Objekt halten:
Delphi-Quellcode:
type
  TOrdner = class(TObject)
    Ordnername : String;
    Expanded: Boolean;
  end;
In dem Fall würden ja alleine die Infos im gefüllten TreeView
aussreichen, d.h. du bräuchtest eigentlich nicht noch Objekte anlegen,
sondern könntest bei Bedarf direkt auf den Node des TreeViews zugreifen.


Falls das Objekt größer werden soll, hier noch mal eine genauere
Beschreibung meiner Umsetzung:

Dem TreeView kannst du anstatt nur einer Beschreibung auch eine
Beschreibung mit einem Pointer mit auf den Weg geben, also so:
NewTreeNode:= aTreeView.Items.AddChildObject(aParent, 'Nodename', Pointer); Du könntest also beim Füllen des TreeViews ein Ordner-Objekt
erstellen und dessen Pointer an den Knoten dranhängen, etwa so:

Delphi-Quellcode:
     
      { Ordner-Objekt erstellen }
      NewFolder:= TFolder.Create(aXmlNode.Nodes[i].AttributeByName['Name']);
      { Pointer des Ordner-Objektes dem erstellten Knoten übergeben, sowie
        den oben bereits übergebenen Ordnernamen }

      NewTreeNode:= aTreeView.Items.AddChildObject(aParent, NewFolder.Foldername, NewFolder);
Dabei habe ich das Ordner-Objekt so deklariert:

Delphi-Quellcode:
type
  TFolder = class(TObject)
  private
    fFoldername : String;
    fExpanded: Boolean;
  public
    constructor Create(const aFoldername: string);
    property FolderName: string read fFoldername write fFoldername;
  end;

Ganz wichtig zu sagen ist jedoch, dass der TreeView nicht automatisch
auch die Freigabe dieser erstellen Ordner-Objekte durchführt.
Löschst du also einen Knoten aus dem Baum, bist du auch für die
Freigabe des Ordner-Objektes verantwortlich.

Es gibt eine stark erweiterte Tree-Komponente, die sich TVirtualStringTree
nennt (oft auch unter VST hier im Forum zu finden). Dieser ist von
Grund auf neu programmiert und besitzt u.a. auch eine automatische
Speicherverwaltung der übergebenen Objekte.


Nun zum Abrufen des Knotens mit Objekt:

Delphi-Quellcode:
  
  { Normaler Text des Knotens }
  ShowMessage(TreeView1.Selected.Text);
  { Über casten mit TFolder kannst du den Pointer des Knotens
    gezielt ansprechen und die Eigenschaft Foldername abfragen }

  ShowMessage(TFolder(TreeView1.Selected.Data).FolderName);
Im obigen Fall würde jetzt beides mal das gleiche angezeigt,
aber du kannst ja dein Objekt wie gewünscht aufbauen.



Grüße
Jürgen
Jürgen Höfs
  Mit Zitat antworten Zitat