Einzelnen Beitrag anzeigen

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