Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];

Вниз

Индикатор прогресса во время поиска файлов   Найти похожие ветки 

 
Dr. Genius   (2007-01-14 18:15) [0]

Здравствуйте!

Пользуюсь данным кодом для поиска всех файлов в папке (включая и файлов во вложенных подпапках). Код работает нормально, только вот хочу сделать, чтобы во время выполнения поиска отображался индикатор прогресса. Как это сделать? Я, честно говоря, даже не знаю с чего начать.

procedure AddFilesFromFolder(Folder: string);
 var
   Rec: TSearchRec;
 begin
   Folder := IncludeTrailingBackslash(Folder);
   if (FindFirst(Folder + "*.*", faAnyFile, Rec) = 0) then
   begin
     repeat
       if ((Rec.Attr and faDirectory) = faDirectory) then
       begin
         if (Rec.Name <> "..") and (Rec.Name <> ".") then
           AddFilesFromFolder(Folder + Rec.Name + "\");
       end else
       begin
         DirList.Items.Add(Folder + Rec.Name);
         Application.ProcessMessages;
       end;
     until (FindNext(Rec) <> 0);
     FindClose(Rec);
   end;
 end;


 
Virgo_Style ©   (2007-01-14 18:23) [1]

А если DirList"у сделать BeginUpdate - EndUpdate, не отпадет ли надобность в индикаторе? Дело в том, что для индикатора прогресса нехудо бы знать конечное значение (количество файлов).


 
Dr. Genius   (2007-01-14 18:27) [2]

А что такое BeginUpdate - EndUpdate?


 
Garacio ©   (2007-01-15 10:03) [3]

Я долго обсуждал такой-же вопрос, пытался что-то изобрести... Лучше, чем поместить на форму TPanel и отображать в нём во время процесса название найденного файла, ничего не получится! Т.е. у меня во время поиска на панели "пробегают" названия файлов, а после FindClose(Rec) я пишу на панели "готово"!


 
Джо ©   (2007-01-15 11:09) [4]

> Dr. Genius

Интересно, как ты себе представляешь такой прогресс-индикатор? Ведь истину глаголет Virgo_Style ©: «для индикатора прогресса нехудо бы <заранее> знать конечное значение (количество файлов)». А до полного выполнения поиска ты его как-раз не знаешь. :)


 
Garacio ©   (2007-01-15 11:17) [5]

Можно сначала всё посчитать!
procedure TForm1.CountFilesInDir(const Dir: string): integer;
var sr: TSearchRec;
   err: integer;
begin
Result:=0;
//Кроме обычных, искать archive, read-only, hidden и system по маске *.*
err:=FindFirst(Dir+"\*.*", faArchive+faReadOnly+faHidden+faSysFile, sr);
try
 while err=0 do
  begin
    inc(Result);
    err:=FindNext(sr);
end;
finally
 FindClose(sr);
end;
end;

Но мороки будет больше!


 
Джо ©   (2007-01-15 11:18) [6]

> [5] Garacio ©   (15.01.07 11:17)
> Можно сначала всё посчитать!

Прости, но твой совет лишен какого-либо смысла, тем более, практического.


 
КиТаЯц ©   (2007-01-15 12:32) [7]


> Dr. Genius   (14.01.07 18:15)
> ...
>  только вот хочу сделать, чтобы во время выполнения поиска
> отображался индикатор прогресса.
> ...

Сейчас подумал...
А есть хоть одна программа которая так работает?


 
Garacio ©   (2007-01-15 15:56) [8]

А есть хоть одна программа которая так работает?
Антивирус! Ты выбираешь нужную папку, нажимаешь "Пуск" и... появляется индикатор поиска зараженных файлов! Разьве он не по такому-же принципу работает?


 
Garacio ©   (2007-01-15 15:59) [9]

твой совет лишен какого-либо смысла

для индикатора прогресса нехудо бы <заранее> знать конечное значение (количество файлов)



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.045 c
11-1147493813
igorek_2005
2006-05-13 08:16
2007.02.04
Преобразование типов(время в строку) в KOL_MCK


15-1168695294
vitv
2007-01-13 16:34
2007.02.04
Автоматическое копирование образа


3-1163674156
petrovskyi
2006-11-16 13:49
2007.02.04
Изменение порядка значений при экспорте в Excel


2-1168750003
koha
2007-01-14 07:46
2007.02.04
Копировать массив в вдругой массив через TMemoryStream


4-1159092228
Psychedelic
2006-09-24 14:03
2007.02.04
Как отключить сервис ZoneAlarm?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский