Einzelnen Beitrag anzeigen

Yheeky

Registriert seit: 7. Jun 2002
1.339 Beiträge
 
#1

Dateien in ListView eintragen - Fortschritt anzeigen lassen

  Alt 25. Feb 2005, 23:22
Hi,

ich habe folgenden Code hier aus der DP genommen und in mein Programm eingebaut. Es handelt sich um den Code, mit dem man die Dateien eines Verzeichnisses (inkl. Unterverzeichnisse) auslesen kann. Dies kann ja bei vielen Dateien sehr lange dauern. Meine Frage ist nun, wie ich den Fortschritt in einer ProgressBar anzeigen lassen kann. Zudem sollten die Dateien erst in der ListView gezeigt werden, wenn alle eingetragen wurden (das geht mit BeginUpdate und EndUpdate, doch wo baue ich das hier im Code ein?).
Hier ist der genaue Code:

Code:
function TForm1.FindAllFiles(RootFolder: string; Mask: string = '*.*'; Recurse: Boolean = True) : TStringDynArray;
var
  wfd         : TWin32FindData;
  hFile       : THandle;
  SLVItem     : TListItem;
  IDTag       : TID3v2;
begin
  if AnsiLastChar(RootFolder)^ <> '\' then
    RootFolder := RootFolder + '\';
  if Recurse then
  begin
    hFile := FindFirstFile(PChar(RootFolder + '*.*'), wfd);
    if hFile <> INVALID_HANDLE_VALUE then
    try
      repeat
        if wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY =
          FILE_ATTRIBUTE_DIRECTORY then
          if (string(wfd.cFileName) <> '.') and (string(wfd.cFileName) <> '..')
            then
            FindAllFiles(RootFolder + wfd.cFileName, Mask, Recurse);
      until FindNextFile(hFile, wfd) = False;
    finally
      windows.FindClose(hFile);
    end;
  end;
  hFile := FindFirstFile(PChar(RootFolder + '*.*'), wfd);

  if hFile <> INVALID_HANDLE_VALUE then
  try
    repeat
      if wfd.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <>
        FILE_ATTRIBUTE_DIRECTORY then
      begin
      SLVItem := Form1.SmartListView1.Items.Add;
      SLVItem.SubItems.Add(wfd.CFileName);

      // MP3
      if LowerCase(Copy(wfd.CFileName, LastDelimiter('.', wfd.CFileName)+1, Length(wfd.CFileName)-LastDelimiter('.', wfd.CFileName))) = 'mp3' then
         begin
         SLVItem.ImageIndex := 0;
         SLVItem.SubItems.Add('Mp3 - Datei');

         // ID-Tags auslesen

         IDTag := TID3v2.Create;
         IDTag.ReadFromFile(RootFolder + wfd.CFileName);
         SLVItem.SubItems.Add(IDTag.Artist);
         SLVItem.SubItems.Add(IDTag.Title);
         SLVItem.SubItems.Add(IDTag.Genre);

         end;

      // WAVE
      if LowerCase(Copy(wfd.cFileName, LastDelimiter('.', wfd.cFileName)+1, Length(wfd.cFileName)-LastDelimiter('.', wfd.cFileName))) = 'wav' then
         begin
         SLVItem.ImageIndex := 0;
         SLVItem.SubItems.Add('Wave - Datei');
         end;

      // MPG, MPEG, AVI, WMV, ASF
      if IstVideoDatei(wfd.cFileName) = True then
         begin
         SLVItem.ImageIndex := 1;
         SLVItem.SubItems.Add('Video - Datei');
         end;

     // Wenn es keiner der o.a. Dateien ist
     if (LowerCase(Copy(wfd.cFileName, LastDelimiter('.', wfd.cFileName)+1, Length(wfd.cFileName)-LastDelimiter('.', wfd.cFileName))) <> 'mp3') and
        (LowerCase(Copy(wfd.cFileName, LastDelimiter('.', wfd.cFileName)+1, Length(wfd.cFileName)-LastDelimiter('.', wfd.cFileName))) <> 'wav') and
        (LowerCase(Copy(wfd.cFileName, LastDelimiter('.', wfd.cFileName)+1, Length(wfd.cFileName)-LastDelimiter('.', wfd.cFileName))) <> 'mpg') and
        (LowerCase(Copy(wfd.cFileName, LastDelimiter('.', wfd.cFileName)+1, Length(wfd.cFileName)-LastDelimiter('.', wfd.cFileName))) <> 'mpeg') and
        (LowerCase(Copy(wfd.cFileName, LastDelimiter('.', wfd.cFileName)+1, Length(wfd.cFileName)-LastDelimiter('.', wfd.cFileName))) <> 'wmv') and
        (LowerCase(Copy(wfd.cFileName, LastDelimiter('.', wfd.cFileName)+1, Length(wfd.cFileName)-LastDelimiter('.', wfd.cFileName))) <> 'asf') and
        (LowerCase(Copy(wfd.cFileName, LastDelimiter('.', wfd.cFileName)+1, Length(wfd.cFileName)-LastDelimiter('.', wfd.cFileName))) <> 'avi') then
        begin
        SLVItem.ImageIndex := 2;
        SLVItem.SubItems.Add('Sonstige Datei');
        end;


     end;
    until FindNextFile(hFile, wfd) = False;
  finally
    Windows.FindClose(hFile);

  end;


end;
Ich hoffe, mir kann jemand helfen. Danke!

Gruß Yheeky
  Mit Zitat antworten Zitat