![]() |
Ttreenodes Objekt erstellen
hallo,
ich bin an einem Projekt dran in dem ich mehrere Baumknoten zuerst in ein Ttreenodes Objekt hinzufügen will, sind alle Baumknoten hinzugefügt will ich Die fertige Baumstruktur in mein TreeView "kopieren". Ich weiß aber nicht wie ich ein Ttreenodes Objekt erstellen kann oder brauche ich da ein anderes Objekt??? In der Hilfe steht nur das man mit Ttreenodes.create eine Instanz erstellt. Mal ein Beispiel an der ListBox:
Delphi-Quellcode:
Warum geht das bei der TreeView nicht so leicht wie mit einer Listbox?
procedure TForm1.Button1Click(Sender: TObject);
var Liste: TStringList; begin Liste := TStringList.Create; Liste.Add('hallo'); //der Listeneintrag ist im Objekt Liste, die ListBox ist noch LEER!!! . . . ListBox1.Items := Liste; //erst am Ende werden alle Einträge in die ListBox übernommen!!! end; Mit freundlichen Grüßen Stefan |
Re: Ttreenodes Objekt erstellen
Es geht genau so einfach:
Delphi-Quellcode:
Cu, Frank
Var
ATreeNode: TTreeNode; begin // statt nil einen TreeNode ergibt Untereintrag zu TreeNode ATreeNode := TreeView.Items.AddChild(nil, 'Caption des TreeNode'); |
Re: Ttreenodes Objekt erstellen
So meinte ich das nicht!
Bei deinem Code erstellst du ja direkt den Baumknoten in der Treeview und bekommst eine Instanz des Baumknotens -> Atreenode. Es soll aber so ablaufen das du z.B. 200 Baumknoten zuerst mal im Hintergrund (also man sieht es nicht) in einem Objekt erstellt werden. Dann soll der Benutzer mit einem Button OK bestätigen und danach sollen erst die Baumknoten in die Treeview übernohmen werden. Ich hab jetzt mal in meinem Listbox Beispiel Kommentare eingefügt. |
Re: Ttreenodes Objekt erstellen
Hallo Stefan,
du musst beim Aufruf von TTreeNodes.Create() eine TreeView als Owner angeben, weil z.B. die Methode AddChild() intern die Methode Owner.CreateNode() aufruft um den neuen Knoten zu erzeugen. Aber dein Ziel kannst du auch einfacher erreichen: verwende die Methoden BeginUpdate() und EndUpdate() um den Aufbau der Nodes ungestört von irgendwelchen Events vornehmen zu können. Grüße vom marabu @Frank: du hast TreeNode und TreeNodes verwechselt ... |
Re: Ttreenodes Objekt erstellen
TtreeNodes.create() hatte ich schonmal ausprobiert, aber wie gesagt das ist ja dann nur eine Instanz von meiner TreeView.
Die Methoden BeginUpdate() und EndUpdate() kannte ich noch nicht, hilft mir aber nicht weiter da die Baumknoten auf jeden Fall übernommen wird. Ich hatte vergessen zusagen das der Benutzer auch die Möglichkeit haben soll abzubrechen. Im ganzen sieht das halt so aus das in der TreeView vielleicht schon ein paar Baumknoten enthalten sind. In einem automatischen Suchlauf wird eine Ordnerstruktur durchsucht, diese Ordnerstruktur soll zuerste mal "temporär" in einem Objekt von TtreeNodes erstellt werden. Ist der Suchlauf fertig kann der Benutzer die Ordnerstruktur in der TreeView übernehmen oder auch mitten im Suchlauf abbrechen. Beim Abbruch wird die "temporäre Ordnerstruktur" verworfen, also KEINE Änderung in der TreeView. |
Re: Ttreenodes Objekt erstellen
Zitat:
Zitat:
Zitat:
Zitat:
marabu |
Re: Ttreenodes Objekt erstellen
Nun muss ich es wohl direkt in die TreeView übernehmen.
Eine neue nicht-visuelle Klasse zu erstellen ist bestimmt nicht gerade leicht. Also ich wüsste jetzt nicht genau wie das geht. Noch danke an ALLE für die schnellen Antworten. |
Re: Ttreenodes Objekt erstellen
Zitat:
Delphi-Quellcode:
tempTV := TTreeView.Create(nil);
Was is daran schwireig? |
Re: Ttreenodes Objekt erstellen
Ich bekomme aber bei diesem Code eine Fehlermeldung.
Delphi-Quellcode:
Also muss da doch irgendwas nicht stimmmen.
procedure TForm1.Button1Click(Sender: TObject);
var tempTV: TTreeView; begin tempTV := TTreeView.Create(nil); tempTV.Items.AddChild(nil, 'hallo'); end; |
Re: Ttreenodes Objekt erstellen
Borlands Komponente TTreeView kapselt ein MS Common Control, welches intern stark mit Nachrichten arbeitet. Der Owner darf zwar nil sein, aber die property Parent nicht. Um das Control ohne Visualisierung zu benutzen muss man es als message only window betreiben:
Delphi-Quellcode:
marabu
var
tv: TTreeView; begin tv := TTreeView.CreateParented(THandle(-3)); tv.Items.AddChild(nil, 'hello'); // ... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 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