![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Индикатор прогресса во время поиска файлов [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, не отпадет ли надобность в индикаторе? Дело в том, что для индикатора прогресса нехудо бы знать конечное значение (количество файлов).