AGB  ·  Datenschutz  ·  Impressum  







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

TreeView und ListView

Ein Thema von Malte Koch · begonnen am 11. Sep 2007 · letzter Beitrag vom 13. Sep 2007
Antwort Antwort
Seite 3 von 4     123 4      
Malte Koch

Registriert seit: 11. Sep 2007
Ort: Recklinghausen
15 Beiträge
 
Delphi 2007 Professional
 
#21

Re: TreeView und ListView

  Alt 12. Sep 2007, 16:29
Liest die Ordner aus:

Delphi-Quellcode:
procedure TForm2.HoleVerzeichnisse(const Pfad: String; var Tree: TTreeView;
                                  Start: TTreeNode);
var
 SR: TSearchRec;
  begin
    if FindFirst(Pfad + '\*.*', faAnyFile, SR) = 0 then
  repeat
    Application.ProcessMessages;
    if (SR.Attr AND faDirectory = faDirectory) AND (SR.Name[1] <> '.')
        AND (SR.Name[1] <> '_') then
    begin
      baum := Tree.Items.Addchild(Start, SR.Name);
      baum.SelectedIndex := 1;
      baum.ImageIndex := 1;
      baum.StateIndex := -1;
      HoleVerzeichnisse(Pfad+'\'+ SR.Name, Tree, baum);
    end;
  until (FindNext(SR) <> 0);
 SysUtils.FindClose(SR);
end;
Zeigt die entsprechenden Dateien an:

Delphi-Quellcode:
procedure TForm2.HoleDateien(const Pfad: String; ListV: TListView; Filter: String);
var
 SR: TSearchRec;
 anItem:TListItem;
   begin
    if FindFirst(Pfad + '\' + Filter, faAnyFile, SR) = 0 then
  repeat
    Application.ProcessMessages;
    if (SR.Attr AND faDirectory <> 16) AND (SR.Name[1] <> '.')
        AND (SR.Name[1] <> '_') then
    begin
            anItem:=ListV.Items.Add;
            anItem.Caption:=SR.Name;

            anItem.SubItems.Add( IntToStr(GetFileSizeEx(Pfad+'\'+SR.Name)div 1024));
            anItem.SubItems.Add( GetFileTypename(Pfad+'\'+SR.Name));
            anItem.SubItems.Add( DateToStr(GetFileLastAccessTime(Pfad+'\'+SR.name)));
            anItem.SubItems.Add( DateToStr(GetCreationTimeOfFile(Pfad+'\'+SR.Name)));
      end;
  until (FindNext(SR) <> 0);
  SysUtils.FindClose(SR);
end;
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#22

Re: TreeView und ListView

  Alt 12. Sep 2007, 22:06
Hm,

du musst auch noch auf

( SR.Name[1] <> '..') ueberpruefen!

Und was soll das sein?

  (SR.Name[1] <> '_') Du weist schon dass du das ganze einfacher in einer einzigen Funktion mit Rekursion schreiben kannst?
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Malte Koch

Registriert seit: 11. Sep 2007
Ort: Recklinghausen
15 Beiträge
 
Delphi 2007 Professional
 
#23

Re: TreeView und ListView

  Alt 12. Sep 2007, 22:57
Das (SR.Name[1] <> '_') habe ich gemacht, weil der mir sonst auch _history Ordner anzeigt was ich aber nich haben möchte.

Und (SR.Name[1] <> '..') hab ich nicht gemacht da ich es ja schon mit einem Punkt habe. Wenn das erste Zeichen ungleich '.' ist schliesst es '..' ja logischerweise auch aus, da dies ja schon 2 Zeichen sind.

Wie kann ich das denn in einer Funktion machen? Ich habe Stunden lang rumprobiert und es nicht hinbekommen. Danach habe ich mich dann für 2 Funktionen entschieden. Für eine Lösung in einer Funktion wäre ich sehr dankbar. Vorallem das mit der Rekursion wäre interessant, da ich somit dann auch Dateien aus SubOrdnern auslesen könnte.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#24

Re: TreeView und ListView

  Alt 12. Sep 2007, 23:08
Siehe dir doch den Link in meinen ersten Beitrag (Beitrag #2) an. Da sind rekursive Funktionen zu finden, die du wenn, dann nur leicht anpassen musst.
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#25

Re: TreeView und ListView

  Alt 12. Sep 2007, 23:13
Entweder hast du meinen Beitrag #16 total ignoriert oder ich sehe net wo das Problem liegt Du musst einfach wenn es im Result um einen Ordner handelt in diesen Ordner reingehen und dort weitersuchen bis es keine weiteren Unterordner mehr gibt.

Hab dir hier mal ein kleines Beispiel was du mit etwas anpassen verwenden kannst (hab ich aus einem aktuellen Projekt rauskopiert) oder aber auch einfach umschreiben kannst um Delphi's TSearchRec zu nutzen!

Delphi-Quellcode:
procedure SearchFiles(aRoot: String; var Files : TStringList; Mask: String = '*.*'; Recursive : Boolean = False);
var
  wfd : TWin32FindData;
  hFile : THandle;
begin
  aRoot := IncludeTrailingPathDelimiter(aRoot);
  if Recursive then
  begin
    hFile := FindFirstFile(PChar(aRoot + Mask), wfd);
    if ( hFile <> INVALID_HANDLE_VALUE ) then
    try
      repeat
        if ( wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY ) then
        begin
          if ( (String(wfd.cFileName) <> '.') and (String(wfd.cFileName) <> '..') ) then
          begin
            SearchFiles(aRoot + wfd.cFileName, Files, Mask, Recursive); // hier wird die Rekursion angewandt
          end;
        end;
      until FindNextFile(hFile, wfd) = False;
    finally
      Windows.FindClose(hFile);
    end;
  end;
  hFile := FindFirstFile(PChar(aRoot + Mask), wfd);
  if ( hFile <> INVALID_HANDLE_VALUE ) then
  try
    repeat
      if (wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <> FILE_ATTRIBUTE_DIRECTORY ) then
      begin
        Files.Add(wfd.cFileName);
      end;
    until FindNextFile(hFile, wfd) = False;
  finally
    Windows.FindClose(hFile);
  end;
end;
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Malte Koch

Registriert seit: 11. Sep 2007
Ort: Recklinghausen
15 Beiträge
 
Delphi 2007 Professional
 
#26

Re: TreeView und ListView

  Alt 12. Sep 2007, 23:24
Tut mir ja leid das ich das alles noch nicht sofort verstehe aber ich arbeite noch nicht so lange mit delphi.

Ich werde das morgen dann mal ausprobieren und meinen Erfolg hier posten!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#27

Re: TreeView und ListView

  Alt 12. Sep 2007, 23:32
Moin Malte,

Zitat von Malte Koch:
Und (SR.Name[1] <> '..') hab ich nicht gemacht da ich es ja schon mit einem Punkt habe. Wenn das erste Zeichen ungleich '.' ist schliesst es '..' ja logischerweise auch aus, da dies ja schon 2 Zeichen sind.
Ich denke Mackhack wollte darauf hinweisen, dass Du explizit auf

(SR.Name <> '.') and (SR.Name <> '..') prüfen musst.

Eine Prüfung auf SR.Name[1] <> '.' ist schlichtweg falsch, da ein Datei-/Ordername durchaus mit einem Punkt beginnen kann.
Nur weil man das im Explorer nicht so eingeben kann heisst noch lange nicht, dass es nicht geht, bzw. nicht erlaubt ist

(ich weiss, dass man das oft so sieht, aber dadurch wird es nicht richtiger )
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#28

Re: TreeView und ListView

  Alt 12. Sep 2007, 23:59
Zitat von Malte Koch:
Tut mir ja leid das ich das alles noch nicht sofort verstehe aber ich arbeite noch nicht so lange mit delphi.

Ich werde das morgen dann mal ausprobieren und meinen Erfolg hier posten!
Ich glaube kaum dass du dich hier entschuldigen musst. Kein Meister ist vom Himmel gefallen und jeder hat mal klein angefangen. Ich wollte das auch nicht als erhobenen Zeigefinger darstellen sondern nur drauf hinweisen dass du die Hilfen die du hier bekommst nicht uebersehen oder ignorieren sollst. Mehr net.

Und klar sag ruhig wenn es geklappt hat oder ob du noch mehr Hilfe brauchst, dazu ist ja das Forum da!
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
Malte Koch

Registriert seit: 11. Sep 2007
Ort: Recklinghausen
15 Beiträge
 
Delphi 2007 Professional
 
#29

Re: TreeView und ListView

  Alt 13. Sep 2007, 09:28
Entweder bin ich zu doof um die Funktion umzubauen oder die tut einfach nicht das was ich möchte.

Jetzt zeigt er mir im TreeView nichts mehr an und im ListView zeigt er mir ALLES an.

also Ordner + unterordner + dateiname

und dabei listet er die Ordner und Unterordner auch einzeln auf.

z.B.: C:\
C:\Test
C:\Test\test.txt

Hat jemand ne Lösung?

Hier meine umgebaute Funktion:
Delphi-Quellcode:
procedure TForm2.FindAllFiles(FileList: TListView;
                              RootFolder: string;
                              Mask: string ='*';
                              Recurse: Boolean = True;
                              AddFolderNames: Boolean = False;
                              IgnoreMaskAtFolderNames: Boolean = True);
  procedure LFindAllFiles(AParentFolder: String);
  var LSearchRec: TSearchRec;
  begin
    if FindFirst(AParentFolder + '*', faAnyFile, LSearchRec) = 0 then
    begin
      repeat
        if (LSearchRec.Name <> '.') and (LSearchRec.Name <> '..') then
        begin
          if LSearchRec.Attr and faDirectory = faDirectory then
          begin
            if AddFolderNames and
               (IgnoreMaskAtFolderNames or Like(AnsiLowerCase(LSearchRec.Name), Mask)) then
              FileList.AddItem(AParentFolder + LSearchRec.Name, TObject(True));
            if Recurse then
              LFindAllFiles(AParentFolder + LSearchRec.Name + '\');
          end
          else if Like(AnsiLowerCase(LSearchRec.Name), Mask) then
            FileList.AddItem(AParentFolder + LSearchRec.Name, TObject(False));
        end;
      until FindNext(LSearchRec) <> 0;
      FindClose(LSearchRec);
    end;
  end;
begin
  Mask := AnsiLowerCase(Mask);
  LFindAllFiles(IncludeTrailingPathDelimiter(RootFolder));
end;
Ich vermute einfach mal das FileList.AddItem(AParentFolder + LSearchRec.Name, TObject(True)); auf keinen Fall so richtig ist. Aber wie komm ich an AddObject ???
  Mit Zitat antworten Zitat
Malte Koch

Registriert seit: 11. Sep 2007
Ort: Recklinghausen
15 Beiträge
 
Delphi 2007 Professional
 
#30

Re: TreeView und ListView

  Alt 13. Sep 2007, 16:30
Hab es endlich richtig hinbekommen. Danke für die Hilfe
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 08: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