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 TreeView mit eigenen Daten (https://www.delphipraxis.net/57123-treeview-mit-eigenen-daten.html)

FrankBrin 16. Nov 2005 08:12


TreeView mit eigenen Daten
 
Hallo Delphianer,
Bin mir absolut nicht sicher, ob meine Ansprüche an ein TTreeView Element (Delphi 7) nicht doch zu groß sind.

Mein Problem:
Ich möchte einen TreeView mit eigenen Daten versehen, die pro Knoten gesetzt werden, aber nicht angezeigt werden sollen.

Ich stell mir das so vor:

- Name1 (Scope; Typ; Anzahl; ...)
- SubName1 (Scope; Typ; Anzahl; ...)
- SubName2 (Scope; Typ; Anzahl; ...)
- ...
- Name2 (Scope; Typ; Anzahl; ...)
...

Nun sollen die Namen und Subnamen in dem TreeView angezeigt werden. Hat der Bediener dann einen Eintrag ausgewählt, werden die Parameter (Scope; Typ; Anzahl; ...) an eine übergeordnete Funktion gegeben.

Hat jemand eine Idee dies zu realisieren

Gruß FrankBrin

himitsu 16. Nov 2005 08:22

Re: TreeView mit eigenen Daten
 
Jedes TTreeNode hat eine Eigenschaft Namens Data und dieses ist ein einfacher Pointer.

Du legst also einen Record mit den gewünschten Daten und kannst dann inen Pointer darauf in Data abspeichern.

Type erstellen;
Delphi-Quellcode:
Type TRecord = Redord
    Scope: ...;
    Typ: ...;
    Anzahl: ...;
    ...
  End;
  PRecord = ^TRecord;
Und Daten in den Knoten einzutragen:
Delphi-Quellcode:
TreeNode.Data := GetMem(SizeOfTRecord);
PRecord(TreeNode.Data)^.scope := ...;
...
Zugreifen kannst du natürlich auch ganz einfach:
Delphi-Quellcode:
... := PRecord(TreeNode.Data)^.scope

Und nicht vergessen, du ußt natürlich auch selber dafür sorgen, daß am Ende alles wieder freigegeben wird ;)
Delphi-Quellcode:
FreeMem(TreeNode.Data);

Sharky 16. Nov 2005 08:24

Re: TreeView mit eigenen Daten
 
Hai FrankBrin,

das kannst Du ohne Probleme mit einem TTreeView machen. Ein Item eines TreeViews besteht neben dem Text(caption) auch noch aus einem Pointer. In diesem kannst Du einfach einen Pointer auf zum Beispiel einen Record oder eine Instanz einer eigenen Klasse hinterlegen. In diesem Beitrag hat MathiasSimmack das mal gemacht.

Wichtig ist dabei nur das Du, wenn Du ein Item löschst auch den Speicher den dein Objekt belegt selber freigeben musst.

Edit und grummel
Wärend ich wie ein Wolf nach einem Beispiel in der DP suche hat der Foren(b)engel schon einen ganzen Beitrag mit Beispiel geschrieben ;-)

FrankBrin 16. Nov 2005 08:38

Re: TreeView mit eigenen Daten
 
Hey Danke für die prompten Hinweise.

Werd mich gleich ans Werk machen und die Beispiele ausprobieren!

oki 16. Nov 2005 08:40

Re: TreeView mit eigenen Daten
 
Hallo,

ich bin teilweise auch dazu übergegangen in den Member Data ein spezielles Objekt zu speichern. Wenn du hinter deinen Daten noch weitere Funktionalitöt brauchst ist das in der Regel sehr praktisch. Hier mußt du jedoch sauber arbeiten wenn du auf die Daten zugreifen möchtest. Data ist wie beschrieben vom Typ Pointer. Somit mußt du beim lesen auf jeden Fall eine Typkovertierung durchführen.

Bsp.:
Delphi-Quellcode:
var MyObj : TMyObj;
    Name : String;
begin
  MyObj := TMyObj(MyTreeView.Items[0].Data);
  Name := MyObj.Name;
end;
Gruß oki


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