Форум: "Начинающим";
Текущий архив: 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.04 c