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 nach Namen und Vorkommen ordnen (https://www.delphipraxis.net/192781-treeview-nach-namen-und-vorkommen-ordnen.html)

Ajintaro 18. Mai 2017 14:25

TreeView nach Namen und Vorkommen ordnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DP!

Ich habe auf destructor.de den XML parser benutzt um eine kleine xml Datei (siehe Anhang) in einem TreeView anzuzeigen:
http://jaimy.net/tmp/tree.PNG

Meine Absicht ist es, die Knoten eines Levels zu zählen und diese dann in einen "Sammelknoten" zu verschieben. Beim Aufklappen des Sammelknotens werden die Kind-Knoten nummeriert. So sieht das ganze gelöst aus:
http://jaimy.net/tmp/sho.PNG

Das wäre ein deutliches Übersichts-Plus im Gegensatz zu endlos vielen Knoten, die sich einfach nur wiederholen. Lösen wollte ich das mit einer Stringliste, welche sich alle Knoten mit entsprechende Level merkt. Am Ende wird die Liste dann sortiert und das Treeview neu geschrieben. Allerdings scheint mir das ein recht komplizierter Lösungsansatz zu sein.

Delphi-Quellcode:
procedure TFrmMain.Button1Click(Sender: TObject);
var
  node: TTreeNode;
  merker_text:String;
  merker_level:integer;
  sl:TStringList;
begin
  node := TreeView.Items[0];
 TRY

  while Assigned( node ) do
  begin
   //Name und Level merken
    sl := TStringList.Create;
    merker_text := node.Text;
    merker_level := node.Level;
    //Stringlist schreiben
    sl.Add(merker_text+','+IntToStr(merker_level));
    node := node.getNextSibling;
  end;

  showmessage(sl.Text);

  FINALLY
     sl.Free;
  END;
End;
Gibt es keine einfacheren Zähl-Funktionen bei einem TreeView? So etwas wie count childnodes einer Ausgangsnode?

Gruß,

Ajin

ConnorMcLeod 18. Mai 2017 15:42

AW: TreeView nach Namen und Vorkommen ordnen
 
Schätze, Du mußt die Liste zweimal durchlaufen und eine eigene Struktur füllen.
Beim ersten Mal merkst Du Dir die unique Bezeichnungen als Überschriften (Elternknoten).
Beim zweiten Mal sammelst Du unterhalb der Überschriften alle jeweils gleichlautenden Kinder.
Danach baust Du anhand der Struktur den Baum.

Ghostwalker 18. Mai 2017 20:06

AW: TreeView nach Namen und Vorkommen ordnen
 
Ich würde das ganze gleich beim einlesen/aufbauen des Tree's machen.

Ansonsten:

Gugg doch mal ob dir Sort/onCompare vom Tree weiterhilft :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf