![]() |
Dateien in ListView eintragen - Fortschritt anzeigen lassen
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:
Ich hoffe, mir kann jemand helfen. Danke!
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; Gruß Yheeky |
Re: Dateien in ListView eintragen - Fortschritt anzeigen las
Zitat:
Kurz: Du brauchst einen maximalen Wert, um die Anzeige des Fortschritts sinnvoll zu gestallten. Und jetzt überleg mal, ob du den bekommst oder hast. Zitat:
Na bevor du das erste Elemten einträgst und dann nach dem du fertig bist und das letzte Element eingetragen hast. |
Re: Dateien in ListView eintragen - Fortschritt anzeigen las
Naja, also den Maximalwert bekomme ich ja erst, wenn auch alle Dateien eingetragen sind. Deswegen frage ich.
Den angesprochenen Thread, in dem das Thema bereits behandelt wurde, habe ich bis jetzt immer noch nicht gefunden. Okay, das Problem mit Begin-/EndUpdate ist dann klar. Gruß Yheeky |
Re: Dateien in ListView eintragen - Fortschritt anzeigen las
Zitat:
![]() |
Re: Dateien in ListView eintragen - Fortschritt anzeigen las
Erstens: Es mag auch Leute geben, die nicht jede Sekunde hier im Forum hängen und alle Threads auswendig kennen!
Zweitens: Dass du FindFirst in deiner Suche eingibst, ist ja schön, aber wenn man mit dem Thema nicht sonderlich vertraut ist, weiss man das eben nicht. Drittens: Auch deine zweite Antwort bezüglich dem Fortschritt hilft mir in keinster Weise! Vielleicht gibt´s ja noch jemanden, der mir in nem netten Ton eine Antwort zu dem Thema geben kann. Wäre nett, danke! Gruß Yheeky |
Re: Dateien in ListView eintragen - Fortschritt anzeigen las
Zitat:
Zitat:
Zitat:
|
Re: Dateien in ListView eintragen - Fortschritt anzeigen las
hi,
Delphi-Quellcode:
// 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 Warum so kompliziert und unübersichtlich? Du brauchst den Vergleichstring doch nur einmal erstellen. Ist nur ein Beispiel, da ich nicht weiß wie das ganze bei dir genau aussieht.
Delphi-Quellcode:
Ext := Lowercase(ExtractFileExt(FileName)); // gibt die Dateierweiterung eines String zurück
if Ext <> '' then if (Ext = '.mp3') or (Ext = '.wav') or (Ext = '.ogg') or (Ext = '.wma') then Audio_Files := True else Audio_Files := False; |
Re: Dateien in ListView eintragen - Fortschritt anzeigen las
Endlich mal was konstruktives! Danke Bigg, wird geändert!
Noch Vorschläge zum Problem? |
Re: Dateien in ListView eintragen - Fortschritt anzeigen las
das mit der Progressbar wirst du nicht hinnbekommen. Denn nicht das eintragen in die Progressbar dauert so lange sondern das abfrage mit FindFirst etc. welche dateien vorhanden sind. Und da weißt du eben erst am ende wieviel dateien das sind. Imho gibt es keine Lösung für dich da du nicht vor dem gesammten Listen der Dateien weißt wieviel dateien es sind.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz