Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.04;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.051 c
15-1168688652
Kerk
2007-01-13 14:44
2007.02.04
Самые дорогие кейворды Google Adsense


2-1169119994
Apachi
2007-01-18 14:33
2007.02.04
как узнать заблокирован файл другим процессом или нет и его можно


2-1169063960
Pasha L
2007-01-17 22:59
2007.02.04
overload или ещё чт-то нужно?


2-1168867030
Glivera
2007-01-15 16:17
2007.02.04
CoolTrayIcon


15-1168974200
PHPdeveloper
2007-01-16 22:03
2007.02.04
форумы по юридическим вопросам