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/)
-   -   TreeView Nodes anhand einer Datei selektieren (VirtualStringTree als Alternative?) (https://www.delphipraxis.net/207055-treeview-nodes-anhand-einer-datei-selektieren-virtualstringtree-als-alternative.html)

DieDolly 21. Feb 2021 10:50


TreeView Nodes anhand einer Datei selektieren (VirtualStringTree als Alternative?)
 
Eingangsfrage: Kann man das einfacher mit einem VirtualStringTree realisieren? Die Komponente da oben ist ein modifiziertes TreeView mit CheckBoxen aus 2010.

Info: ich spiel gerade mit den MustangpeakVirtualshellTools von TurboPack rum.
Die Demo "Explorer CheckBoxes" scheint fast genau das zu machen was ich suche.
Das die Komponente wohl nicht kann ist sowas wie D:\Dateien\*.txt abzufangen und dann nur Textdateien zu markieren.

Thema:
Seit Jahren benutze ich einen Code der eigentlich immer gut funktioniert hat. Jetzt ist aber ein Problem dazwischen bekommen, was mir vorher nicht klar war.
Folgende Verzeichnisstruktur
Code:
[1]
D:\Dateien
D:\Dateien\Datei1.txt

[2]
D:\Dateien\Test\Dateien
D:\Dateien\Test\Dateien\Datei2.txt
Lasse ich durch meinen grotten schlechten Code jetzt "Dateien\*" laufen, sollten eigentlich nur D:\Dateien und Datei1.txt angehakt werden.
Es werden aber auch alle in D:\Dateien\Test\Dateien angehakt, das liegt an meinem IndexOf.
Das TreeView zeigt den Inhalt von D:\ in diesem Fall.

Jetzt möchte ich bitte richtig lernen. Wie mache ich das richtig? Der Code ist so schlecht und alt, dass ich ehrlich gesagt gar nicht mehr weiß was da so richtig passiert.

Delphi-Quellcode:
 SL.Clear;
 checkBoxTreeView.UncheckAll;

 SL.Add('Dateien\*');
 checkBoxTreeView.Items.BeginUpdate;

 for i := 0 to checkBoxTreeView.Items[0].Count do
  begin
   Node := checkBoxTreeView.Items[i];

   Str:= StringReplace(Node.Text, checkBoxTreeView.Items[0].Text, '', [rfReplaceAll]);

   if SL.IndexOf(Str) > -1 then // Findet IndexOf ein Vorkommen, egal wo, wird alles angehakt
    begin
     if not checkBoxTreeView.IsNodeChecked(Node) then
      checkBoxTreeView.SetNodeChecked(Node, True);
    end;

   if Recurse and Node.HasChildren then
    ProcessChildren(Node, False)
   else
    Break;
  end;

 checkBoxTreeView.Items.EndUpdate;


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