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;