AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ShellTreeView "expandieren"

Ein Thema von F.W. · begonnen am 22. Dez 2003 · letzter Beitrag vom 5. Feb 2004
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#11

Re: ShellTreeView "expandieren"

  Alt 3. Feb 2004, 21:57
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!]
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#12

Re: ShellTreeView "expandieren"

  Alt 4. Feb 2004, 14:02
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#13

Re: ShellTreeView "expandieren"

  Alt 5. Feb 2004, 13:28
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!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 18:01 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