Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi BaumStruktur in Treeview erstellen! (https://www.delphipraxis.net/60806-baumstruktur-treeview-erstellen.html)

Nillen 12. Jan 2006 13:53


BaumStruktur in Treeview erstellen!
 
Folgendes Problem :

Ich habe eine Datei, in der bsp. folgende Pfade stehen :

C:\Eigene Dateien\Eigene Dokumente\Proggen\a.html
C:\Eigene Dateien\Eigene Dokumente\Proggen\test\b.html
C:\Eigene Dateien\Eigene Dokumente\c.html

Nun soll folgende Baumstruktur entstehen :

-c:\
-Eigene Dateien
-Eigene Dokumente
c.html
-Proggen
a.html
-test
b.html

Sieht jetzt n bisschen komisch aus, aber im Grunde soll es halt aussehen wie im Windoof Explorer :)

Hat da jemand ne Idee ? Vielleicht sogar per Komponenteneigenschaften/methoden oder so ?

Danke schonmal

(ich sehe grade, dass man die Tabs nicht sieht, ich hoffe ihr könnt euch denken wie es aussehen soll)

ichbins 12. Jan 2006 14:06

Re: BaumStruktur in Treeview erstellen!
 
Welche Delphi-Version verwendest du denn?

zumindest ab D7 gibt's die Komponente TShellTreeView.

mit diesem Code kannst du alle Dateien/Verzeichnisse in einem Verzeichniss ermitteln:
Delphi-Quellcode:
function dirup(s:string):string;
begin
  try
    if s[length(s)]='\' then result:=s else result:=s+'\'
  except
    result:=s;
  end;
end;

procedure getdirsindir(const verzeichniss:string;var dirs:tstringlist);
var
  sd:string;
  s:tsearchrec;
  i:integer;
begin
  dirs:=tstringlist.Create;
  sd:=dirup(verzeichniss);
  if findfirst(sd+'*.*',faanyfile,s)<>0 then begin
    sysutils.findclose(s);
    exit;
  end;
  dirs.add(s.Name);
  while findnext(s)=0 do
    dirs.Add(s.name);
  i:=0;
  while i<dirs.count do begin
    if ((dirs[i]='..') or (dirs[i]='.')) then begin
      dirs.Delete(i);
      i:=i-1;
    end else
      if not directoryexists(sd+dirs[i]) then begin
        dirs.Delete(i);
        i:=i-1;
      end;
    inc(i);
  end;
  sysutils.findclose(s);
end;

function getfilesindir(const verzeichniss,filter:string;var files:tstringlist):extended;
var
  sd:string;
  s:tsearchrec;
  i:integer;
  e:extended;
  flt:string;
begin
  if filter='' then
    flt:='*.*'
  else
    flt:=filter;
  e:=0;
  sd:=dirup(verzeichniss);
  result:=0;
  files:=tstringlist.Create;
  if findfirst(sd+flt,faanyfile,s)<>0 then begin
    sysutils.findclose(s);
    exit;
  end;
  files.add(s.Name);
  while findnext(s)=0 do begin
    files.Add(s.name);
    e:=e+s.Size;
  end;
  i:=0;
  while i<files.count do begin
    if ((files[i]='..') or (files[i]='.')) then begin
      files.Delete(i);
      i:=i-1;
    end else
      if directoryexists(sd+files[i]) then begin
        files.Delete(i);
        i:=i-1;
      end;
    inc(i);
  end;
  result:=e;
  sysutils.findclose(s);
end;

function gettreeindir(const root:string;var files,dirs:tstringlist;filter:string):extended;
var
  sd:string;
  i,j:integer;
  fls,unterverzeichnisse:tstringlist;
  flt:string;
  groesse:extended;
begin
  groesse:=0;
  if filter='' then
    flt:='*.*'
  else
    flt:=filter;
  sd:=dirup(root);
  files:=tstringlist.Create;
  dirs:=tstringlist.Create;
  dirs.Add(sd);
  i:=0;
  while i<dirs.Count do begin
    getdirsindir(dirs[i],unterverzeichnisse);
    for j:=0 to unterverzeichnisse.Count-1 do
      dirs.Add(dirup(dirs[i])+unterverzeichnisse.Strings[j]);
    inc(i);
  end;
  for i:=0 to dirs.Count-1 do begin
    groesse:=groesse+getfilesindir(dirs[i],flt,fls);
    for j:=0 to fls.Count-1 do
      files.Add(dirup(dirs[i])+fls.strings[j]);
  end;
  result:=groesse;
end;

Nillen 12. Jan 2006 14:11

Re: BaumStruktur in Treeview erstellen!
 
Ich hab Vesrion 7! Unter was finde ich diese Komponente ?

Ok, hab sie, jetzt nur noch rausfinden wie es geht ;)

Wenn du lust hast kannst mir ja ne kleine Instruction geben ;)

Nillen 12. Jan 2006 14:20

Re: BaumStruktur in Treeview erstellen!
 
Mh, vielleicht habe ich auch mein Problem falsch beschrieben ...
ich möchte wirklich nur die Dateien in der Treeview angezeigt bekommen, die auch in
der Datei stehen ...

ichbins 12. Jan 2006 14:22

Re: BaumStruktur in Treeview erstellen!
 
Zitat:

Zitat von Nillen
Mh, vielleicht habe ich auch mein Problem falsch beschrieben ...
ich möchte wirklich nur die Dateien in der Treeview angezeigt bekommen, die auch in
der Datei stehen ...

:wiejetzt: und was macht die shelltreeview falsch?

Nillen 12. Jan 2006 14:30

Re: BaumStruktur in Treeview erstellen!
 
Ich bin mir nicht sicher was TShellTreeview kann!
Nur dein Quellcode verwirrt mich enorm...
Als ich diesen Eintrag gemacht habe, habe ich gehofft, dass mir ev. jemand
eine Komponente und ein paar Methoden vorschlägt, mit denen man etwas anfangen kann ...

Lannes 12. Jan 2006 18:48

Re: BaumStruktur in Treeview erstellen!
 
Hallo,
Zitat:

Zitat von Nillen
Mh, vielleicht habe ich auch mein Problem falsch beschrieben ...
ich möchte wirklich nur die Dateien in der Treeview angezeigt bekommen, die auch in
der Datei stehen ...

In der Code-Library gibt es etwas für Dich:
TTreeView-Node-Bäume schnell anlegen
Wenn Du in der Funktion den Separator entsprechend eingibst, passt das.

Ich hab den Tipp mal getestet, da fehlte irgendwo ein begin oder end im Code,
kann mich aber daran erinnern das der Fehler schnell zu finden war.
Kann aber auch sein das der Fehler im dem Code schon behoben ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:45 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