Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ShellTreeView "expandieren" (https://www.delphipraxis.net/13624-shelltreeview-expandieren.html)

F.W. 3. Feb 2004 20:57

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:
//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;
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?

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!]

mirage228 4. Feb 2004 13:02

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

F.W. 5. Feb 2004 12:28

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.
Seite 2 von 2     12   

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