AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls TreeView Nodes anhand einer Datei selektieren (VirtualStringTree als Alternative?)

TreeView Nodes anhand einer Datei selektieren (VirtualStringTree als Alternative?)

Ein Thema von DieDolly · begonnen am 21. Feb 2021
Antwort Antwort
DieDolly

Registriert seit: 22. Jun 2018
1.913 Beiträge
 
#1

TreeView Nodes anhand einer Datei selektieren (VirtualStringTree als Alternative?)

  Alt 21. Feb 2021, 10:50
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;

Geändert von DieDolly (21. Feb 2021 um 12:08 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf