![]() |
Re: ShellTreeView "expandieren"
Ich bin jetzt soweit, dass es geht, beim wiedereinlesen ist alles ungeordnet und alle Ordner, die Dateien beinhalten sind alle Doppelt.
Hier der Code:
Delphi-Quellcode:
Das es ungeordnet ist, ist nicht so schlimm, das einzige was mich noch stört und ich mir bis eben gerade noch die Zähne ausgebissen habe (ich weiß noch nicht wie): Wie bekomme ich die doppelten Ordner weg?
//Zum Erstellen eines Abbilds
var AText, DirRead: String; L: TStringList; ANb, I: Integer; begin if SelectDirectory('Verzeichnis zum durchleuchten wählen', 'MyComputer', DirRead) = False then Exit; InputQuery('Pfad ändern', 'Sie können den Pfad nun noch ändern', DirRead); DirRead := SetPfad(DirRead, True); L := TStringList.Create; try FileList(DirRead, '*.*', True, L); for I := 0 to L.Count-1 do begin AText := L[I]; if Pos('\.', AText) = Length(AText)-1 then begin SetLength(AText, Length(AText)-2); end; ANb := ReadForm.CountSlashes(AText)-2; L[I] := IntToStr(ANb)+'*]'+ExtractFileName(AText); end; if SDIa.Execute then L.SaveToFile(SDIa.FileName); finally L.Free; end; end; //Und zum Wieder ansehen(Tree ist der TTreeView) var Indes: Array of Integer; L: TStringList; ALevel, LGes, LNb, I: Integer; AItem, AText: String; Start, Ende: Cardinal; begin if not ODia.Execute then Exit; L := TStringList.Create; try L.LoadFromFile(ODia.FileName); SetLength(Indes, L.Count+1); for I := 0 to L.Count-1 do begin AItem := L[I]; LGes := Length(AItem); LNb := Pos('*]', AItem)-1; ALevel := StrToInt(Copy(AItem, 1, LNb)); AText := Copy(AItem, LNb+3, LGes-LNb); Indes[ALevel] := I; if ALevel = 0 then Tree.Items.Add(NIL, AText) else Tree.Items.AddChild(Tree.Items[Indes[ALevel-1]], AText); end; finally L.Free; end; end; PS: Danke mirage, dass du so schnell Rückantwort schreibst, denn es liegt ja doch schon etwas zurück! [Edit: Wichtig ist beim löschen, dass NICHT die Zeile gelöscht wird, die ohne mein SetLength(..) beim Einlesen das '\.' dahinter hätte!] |
Re: ShellTreeView "expandieren"
Wenn da noch sachen unsortiert sind ruf einfach mal die .Sort() Prozedur von TStringList auf.
Falls da noch was doppelt ist, kannst du Duplicates von TStringList vorher auf dupIgnore stellen. Um dir das "komplizierte" Rückschreiben in die TreeView zu sparen könntest du das Schreiben in die TreeView direkt in der Prozedur FileList erledigen. Ich versuche gleich da nochmal was zu basteln. mfG mirage228 |
Re: ShellTreeView "expandieren"
Na da bin ich ja mal gespannt, denn meine oben genannte Methode funktioniert nicht ganz so gut.
Beim Einlesen hauen die Zahlen, die davor geschrieben werden nicht immer ganz hin! Werde dran arbeiten, bin aber sehr neugierig, welche Methode du anwendest! :shock: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz