AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

eigene Ordnerstruktur in TreeView

Ein Thema von Weazy · begonnen am 30. Jan 2008 · letzter Beitrag vom 22. Aug 2011
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Weazy
Weazy

Registriert seit: 7. Apr 2005
Ort: Bern (Schweiz)
414 Beiträge
 
Delphi 2007 Enterprise
 
#1

eigene Ordnerstruktur in TreeView

  Alt 30. Jan 2008, 10:07
Hallo zusammen,

Ich habe ein tStringList welches etwa wie folgt aussieht:

Ordner\
Ordner\A
Ordner\A\B
Ordner2\C\D

nun möchte ich die Strings in ein TreeView einlesen (das ist auch kein problem), jedoch möchte ich dass das dann so aussieht:

- Ordner
-A
-B
- Ordner2
-C
-D

Es sollen also die Ordner nicht einfach blind eingefügt werden, sondern si sollen strukturiert alls unterordner eingefügt werden. Vielleicht liese sich das durch Rekursion lösen.... Bringe es einfach nicht hin!

Danke!!!!
Philippe Wechsler
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: eigene Ordnerstruktur in TreeView

  Alt 30. Jan 2008, 10:23
teste mal eine Struktur in TTreeview, speichere diese und schaue dir an, wie sie ausieht.
So musst Du dann die uin TStringlist anlegen und kannst diese ohne viel zu prog. per LoadFromFile sogar direkt in TTreeview einlesen.
Da sprach der Stumme zum Blinden: "Du wirst sehen ..."
oder
Wer lesen kann, ist klar im Vorteil!
  Mit Zitat antworten Zitat
Benutzerbild von Weazy
Weazy

Registriert seit: 7. Apr 2005
Ort: Bern (Schweiz)
414 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: eigene Ordnerstruktur in TreeView

  Alt 30. Jan 2008, 11:18
Ich glaube du hast mich falsch verstanden: ich weiss wie ich untereinträge einfüge, ich suche nur nach etwas code um z.b aus dem String ordner\A\ ein parent Ordner und ein child A zu erstellen:

-Ordner
-A

Das schwierige ist dass es mit beliebig vielen unterordnern funktionieren soll!
Philippe Wechsler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: eigene Ordnerstruktur in TreeView

  Alt 30. Jan 2008, 13:15
Hallo Philippe,

es wäre natürlich toll, wenn die Pfadnamen in der StringList bereits in dem Format vorliegen würden, welches die TreeView selbst als Textrepräsentation kennt, aber ausgehend von deinen Beispieldaten kannst du so vorgehen:

Delphi-Quellcode:
function PathToNode(s: string; tn: TTreeNodes): TTreeNode;
var
  dir, subDir: string;
begin
  dir := ExcludeTrailingPathDelimiter(s);
  subDir := ExtractFileName(dir);
  dir := ExtractFileDir(dir);
  if dir = ''
    then Result := tn.AddChild(nil, subDir)
    else Result := tn.AddChild(PathToNode(dir, tn), subDir)
end;

procedure PathesToNodes(s: TStrings; tn: TTreeNodes);
var
  i: Integer;
begin
  for i := 0 to Pred(s.Count) do
    PathToNode(s[i], tn);
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
var
  i: Integer;
  sl: TStringList;
begin
  sl := TStringList.Create;
  sl.Assign(Memo.Lines);
  sl.Sorted := True;
  for i := sl.Count - 2 downto 0 do
    if AnsiStartsText(sl[i], sl[Succ(i)]) then
      sl.Delete(i);
  TreeView.Items.Clear;
  PathesToNodes(sl, TreeView.Items);
  sl.Free;
end;
Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Weazy
Weazy

Registriert seit: 7. Apr 2005
Ort: Bern (Schweiz)
414 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: eigene Ordnerstruktur in TreeView

  Alt 30. Jan 2008, 15:44
Vielen Dank, das ist genau wonach ich gesucht habe!!! Es gibt nur noch ein Problem wenn ein Ordner mehrere Unterordner hat, so werden die Parents mehrfach erstellt:

statt

Ordner
-a
-b

gibt es

ordner
-a
ordner
-b
Philippe Wechsler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: eigene Ordnerstruktur in TreeView

  Alt 30. Jan 2008, 21:57
Das hatte ich nicht bedacht, aber jetzt:

Delphi-Quellcode:
function PathToNode(s: TStrings; tn: TTreeNodes; path: string): TTreeNode;
var
  dir, subDir: string;
  index: Integer;
begin
  subDir := ExtractFileName(path);
  dir := ExtractFileDir(path);
  if dir = 'then
  begin
    index := s.IndexOf(subDir);
    if index < 0
      then Result := nil
      else Result := TTreeNode(s.Objects[index]);
    if not Assigned(Result) then
      Result := tn.AddChild(nil, subDir);
  end else
  begin
    index := s.IndexOf(dir);
    if index < 0
      then Result := nil
      else Result := TTreeNode(s.Objects[index]);
    if Assigned(Result)
      then Result := tn.AddChild(Result, subDir)
      else Result := tn.AddChild(PathToNode(s, tn, dir), subDir);
  end;
end;

procedure PathesToNodes(s: TStrings; tn: TTreeNodes);
var
  i: Integer;
begin
  for i := 0 to Pred(s.Count) do
    s.Objects[i] := PathToNode(s, tn, s[i]);
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
var
  i: Integer;
  sl: TStringList;
begin
  sl := TStringList.Create;
  sl.Assign(Memo.Lines);
  sl.Sort;
  for i := sl.Count - 2 downto 0 do
    if SameText(sl[i], sl[Succ(i)]) or (sl[i] = '')
      then sl.Delete(i)
      else sl[i] := ExcludeTrailingPathDelimiter(sl[i]);
  sl.Sorted := True;
  TreeView.Items.Clear;
  PathesToNodes(sl, TreeView.Items);
  sl.Free;
end;
Gute Nacht
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#7

Re: eigene Ordnerstruktur in TreeView

  Alt 30. Jan 2008, 22:44
sag mal, wieso nimmste nicht einfach 'n shelltreeview? einfach auf diene form ziehen und schon hast deine ordner schön dargestellt
  Mit Zitat antworten Zitat
Benutzerbild von Weazy
Weazy

Registriert seit: 7. Apr 2005
Ort: Bern (Schweiz)
414 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: eigene Ordnerstruktur in TreeView

  Alt 31. Jan 2008, 09:02
Danke viel mals! Funktioniert super!!!!

an grenzgaenger:
geht nicht, da es sich um ordner handelt, welche in einem Archiv sind, wie kann ich die denn in ein ShellTreeView bringen, da kann ich ja nur "echte" Ordner anzeigen...
Philippe Wechsler
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Troisdorf
1.171 Beiträge
 
Delphi 2007 Architect
 
#9

AW: eigene Ordnerstruktur in TreeView

  Alt 21. Aug 2011, 17:44
Hi,
im moment bin ich auch an so einer stelle. Ich glaube ich bin zu dusselig da zu. Im moment stehe ich total auf dem schlauch. Ich habe es so ähnlich wie Weazy. Aber bei mir schmeisst sich das teil mit einem StackOverflow weg.

Meine zeilen sehen wie folgt aus. Wär toll wenn mir da jemand helfen könnte. Wie gesagt, im moment stehe ich auf dem schlauch und komme an dieser stelle nicht weiter.

C:\WINXP\system\
C:\WINXP\system32\
C:\WINXP\system32\1031\
C:\WINXP\system32\1033\
C:\WINXP\system32\argosoft\
C:\WINXP\system32\CatRoot\{127D0A1D-4EF2-11D1-8608-00C04FC295EE}\
C:\WINXP\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\
C:\WINXP\system32\CatRoot2\
C:\WINXP\system32\CatRoot2\{127D0A1D-4EF2-11D1-8608-00C04FC295EE}\
C:\WINXP\system32\CatRoot2\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\
C:\WINXP\system32\Com\
C:\WINXP\system32\config\
C:\WINXP\system32\config\systemprofile\
usw....

Da dürfte ja dann nur ein WINXP mit einem + sein, ein system ohne + und nur ein system32 mit einem +

Danke im voraus
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#10

AW: eigene Ordnerstruktur in TreeView

  Alt 21. Aug 2011, 21:29
Hallo,

schau dir das mal an:
[TTreeView, VCL Win32] ...Node-Pfad (String) ins TreeView einfügen/TreeView füllen?
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:37 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