AGB  ·  Datenschutz  ·  Impressum  







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

Verzeichnis im Listview darstellen

Ein Thema von ehem. Benutzer · begonnen am 17. Jan 2005 · letzter Beitrag vom 25. Jan 2005
Antwort Antwort
ehem. Benutzer
(Gast)

n/a Beiträge
 
#1

Verzeichnis im Listview darstellen

  Alt 17. Jan 2005, 18:04
Guten Abend,
ich habe bereits in der Delphi Hilfe und im Delphi Forum gesucht,
aber nichts genaues dazu gefunden.
Meine Frage: Wie kann ich ein Verzeichnis auf der Festplatte, welches man durch eine
TShellComboBox wählt, in einem ListView darstellen?

Die Lösung ist sicherlich sehr einfach, nur komm ich leider nicht drauf



MfG
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Verzeichnis im Listview darstellen

  Alt 17. Jan 2005, 18:51
HI ,

ist doch eigendlich ganz einfach, mit FindFirst und FindNext.
Damit füllst Du 2 Listen eine für die Dateien und die andere List mit
den Verzeichnissen. Dann die Listen sortieren und das Listview füllen

Habe in alten Sachen was dazu gefunden:
Delphi-Quellcode:
type
  PSRec = ^TSRec;
  TSrec = record
     Attr : Array[0..4] of Char;
     Name : String;
     Size : String;
     Time : TDateTime;
  end;

var
  SearchRec : pSRec;
  FChangeDir : String;

  function Compare(Item1, Item2: Pointer): Integer;
  begin
    Result := CompareText(PSRec(Item1).Name, PSRec(Item2).Name);
  end;


  procedure CalcAttributes(FindData : TSearchRec; var Attributes : Array of Char);
  begin
    FillChar(Attributes, SizeOf(Attributes), ' ');
    if (FindData.Attr and faARCHIVE) = faARCHIVE then Attributes[0] := 'A';
    if (FindData.Attr and faREADONLY) = faREADONLY then Attributes[1] := 'R';
    if (FindData.Attr and faHIDDEN) = faHIDDEN then Attributes[2] := 'H';
    if (FindData.Attr and faSYSFILE) = faSYSFILE then Attributes[3] := 'S';
    if (FindData.Attr and faDIRECTORY) = faDIRECTORY then Attributes[4] := 'D';
  end;

  procedure FindFolders(var FolderList : TList; var NonFolderList : TList);
  var
     SRec : TSearchRec;
  begin
    if FindFirst('*.*', faAnyFile, SRec) = 0 then
    begin
      repeat
        if (SRec.Name <> '.') and (SRec.Name <> '..') then
        begin
          SearchRec := New(pSRec);
          with SearchRec^ do
          begin
            Name := SRec.Name;
            Time := FileDateToDateTime(SRec.Time);
            Size := CalcFileSize(SRec);
          end;
          CalcAttributes(SRec, SearchRec^.Attr);
          if (SRec.Attr and faDirectory) = faDirectory then FolderList.Add(SearchRec)
                                                       else NonFolderList.Add(SearchRec);
        end;
      until FindNext(SRec) <> 0;
      FindClose(SRec);
    end;
    FolderList.Sort(Compare);
    NonFolderList.Sort(Compare);
  end;
CalcFileSize(SRec) macht nichts weiter als bei (SRec.Attr and faDirectory) = faDirectory
die Größenbezeichnung = "Verzeichnis" zurück zu geben.
Da FindFirst('*.*' ohne Path aufgerufen wird, muss Du Dich selber darum kümmern, vieleicht so:

Delphi-Quellcode:
...
var
   FolderList : TList;
   NonFolderList : TList;
   FCurrDir : String;
begin
  if FChangeDir[Length(FChangeDir)] <> '\then FChangeDir := FChangeDir + '\';
  if DirectoryExists(FChangeDir) then
  begin
    GetDir(0, FCurrDir);
    ChDir(FChangeDir);
    lvFolders.Items.BeginUpdate;
    lvFolders.Items.Clear;
    FolderList := TList.Create;
    try
      NonFolderList := TList.Create;
      try
        FindFolders(FolderList, NonFolderList);
        InsertItems(FolderList);
        InsertItems(NonFolderList);
      finally
        NonFolderList.Free;
      end;
    finally
      FolderList.Free;
    end;
    lvFolders.Items.EndUpdate;
    ChDir(FCurrDir);
  end;
end;
Wenn Du alles richtig verstanden und umgesetzt hast kann es so aussehen:
Miniaturansicht angehängter Grafiken
lv_200.jpg  
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#3

Re: Verzeichnis im Listview darstellen

  Alt 18. Jan 2005, 09:02
Du kannst natürlich auch einfach die TShellListView nehmen und die ggf. erweitern. Bei der TShellComboBox gibt es das Property Listview o.ä., was du einfach mit der TShellListview verbinden kannst....
Dann brauchst du dich gar nicht darum kümmern.
Alexander
  Mit Zitat antworten Zitat
ehem. Benutzer
(Gast)

n/a Beiträge
 
#4

Re: Verzeichnis im Listview darstellen

  Alt 25. Jan 2005, 15:18
Vielen Dank es geht,
nun muss ich nur noch rausfinden wie ich ein ShellListView mit IdFTP verbinde.



MfG
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Verzeichnis im Listview darstellen

  Alt 25. Jan 2005, 15:22
Gar nicht. Der ShellListview arbeitet intern mit den API-Funktionen FindFirstFile und FindNextFile. Nur leider haben die mit dem FTP Protokoll rein gar nichts am Hut. Da wirst du wohl die List Methode deiner FT-Komponenten bemühen müssen, um per FTP ein Verzeichnis aufgelistet zu bekommen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ehem. Benutzer
(Gast)

n/a Beiträge
 
#6

Re: Verzeichnis im Listview darstellen

  Alt 25. Jan 2005, 15:25
Ok, danke.
Werde dann eine "normale" ListView nehmen.



MfG
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:47 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