Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ttreenodes Objekt erstellen (https://www.delphipraxis.net/74582-ttreenodes-objekt-erstellen.html)

Ruffy87 5. Aug 2006 17:03


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:
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;
Warum geht das bei der TreeView nicht so leicht wie mit einer Listbox?

Mit freundlichen Grüßen

Stefan

dataspider 5. Aug 2006 17:13

Re: Ttreenodes Objekt erstellen
 
Es geht genau so einfach:

Delphi-Quellcode:
Var
  ATreeNode: TTreeNode;
begin
  // statt nil einen TreeNode ergibt Untereintrag zu TreeNode
  ATreeNode := TreeView.Items.AddChild(nil, 'Caption des TreeNode');
Cu, Frank

Ruffy87 5. Aug 2006 17:41

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.

marabu 5. Aug 2006 17:44

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

Ruffy87 5. Aug 2006 17:59

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.

marabu 5. Aug 2006 18:17

Re: Ttreenodes Objekt erstellen
 
Zitat:

Zitat von Ruffy87
TtreeNodes.create() hatte ich schonmal ausprobiert, aber wie gesagt das ist ja dann nur eine Instanz von meiner TreeView.

Das Ergebnis ist eine Instanz von TTreeNodes und nicht von TTreeView.

Zitat:

Zitat von Ruffy87
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.

Spätestens jetzt weißt du um die Bedeutung einer vollständigen und fehlerfreien Problembeschreibung.

Zitat:

Zitat von Ruffy87
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.

Deine Überlegung ist grundsätzlich nicht falsch, aber zwei Dinge stehen dir im Weg: zuerst sind TreeNodes und TreeView per Design miteinander verwoben und dann fehlt dir ja auch ein Operator zum Mischen von hierarchischen Daten. Das letztere kannst du durch Programmieraufwand beheben, das erstere nicht.

Zitat:

Zitat von Ruffy87
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.

Dann empfehle ich dir selbst für die Trennung von Visualisierung und Datenhaltung zu sorgen. Definiere dir eine eigene nicht-visuelle Klasse zur Verwaltung der Knoten, bevor diese dann "ohne Abbruch" in die TreeView aufgenommen werden.

marabu

Ruffy87 5. Aug 2006 19:09

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.

DGL-luke 5. Aug 2006 19:22

Re: Ttreenodes Objekt erstellen
 
Zitat:

Zitat von Ruffy87
Eine neue nicht-visuelle Klasse zu erstellen ist bestimmt nicht gerade leicht.

:gruebel:

Delphi-Quellcode:
tempTV := TTreeView.Create(nil);

Was is daran schwireig?

Ruffy87 5. Aug 2006 19:33

Re: Ttreenodes Objekt erstellen
 
Ich bekomme aber bei diesem Code eine Fehlermeldung.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var tempTV: TTreeView;
begin
  tempTV := TTreeView.Create(nil);
  tempTV.Items.AddChild(nil, 'hallo');
end;
Also muss da doch irgendwas nicht stimmmen.

marabu 5. Aug 2006 19:47

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:
var
  tv: TTreeView;
begin
  tv := TTreeView.CreateParented(THandle(-3));
  tv.Items.AddChild(nil, 'hello');
  // ...
end;
marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:42 Uhr.
Seite 1 von 2  1 2      

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