Главная страница
    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.047 c
2-1168871380
pound
2007-01-15 17:29
2007.02.04
сделать перетаскиваемую форму за любое место


2-1168863693
Obormot
2007-01-15 15:21
2007.02.04
Программное управление формой


1-1165575251
Hell's Angel
2006-12-08 13:54
2007.02.04
Динамический вызов dll с формой


2-1169307240
wl
2007-01-20 18:34
2007.02.04
Реализация алгоритма поиска по словарю


2-1169198094
Steep
2007-01-19 12:14
2007.02.04
Flash Drive





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский