Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Индикатор прогресса во время поиска файлов [D6, 95/98]


Dr. Genius ©   (2007-01-14 18:15:00) 

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

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

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;


Garacio   (2007-01-15 15:59:00) [1]

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

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


Garacio   (2007-01-15 15:56:00) [2]

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


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


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

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


Джо   (2007-01-15 11:18:00) [4]

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

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


Garacio   (2007-01-15 11:17:00) [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:09:00) [6]

> Dr. Genius

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


Garacio   (2007-01-15 10:03:00) [7]

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


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

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


Virgo_Style   (2007-01-14 18:23:00) [9]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо