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

Вниз

ProgressBar при копировании   Найти похожие ветки 

 
DjVirus   (2003-04-22 11:14) [0]

Уважаемые Мастаки
Для начала объясню, что я делаю.
У меня Листбокс заполнен путями к каталогам.
Я выполняю процедуру вот эту.

procedure TfmMain.btnCopyClick(Sender: TObject);
begin
For I:=0 To ListBox1.Count-1 Do Begin
CopyDir(Application.Handle,ListBox1.Items[ListBox1.ItemIndex],"D:\distr\");
End;
end;

Вот процедура выполняющая копирование файлов.

Procedure TfmMain.CopyDir(AHandle:THandle;AFromDir,AToDir:String);
Var SHFileOpStruct:TSHFileOpStruct;
Begin
With SHFileOpStruct Do Begin
Wnd :=AHandle;
wFunc :=FO_COPY;
PFrom :=PChar(AFromDir+#0#0);
PTo :=PChar(AToDir+#0#0);
fFlags :=FOF_SILENT or FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
fAnyOperationsAborted :=False;
hNameMappings :=nil;
lpszProgressTitle :=nil;
End;
SHFileOperation(SHFileOpStruct);
End;

На форме у меня есть ProgressBar он должен отображать ход копирования(ProgressBar.Max=ссумме размеров каталогов), а позиция прогресс бара = сколько уже байт скопировано.

Так вот, как бы я не мучился, но на время копирования каталогов все мое приложение подвисает.

Помогите плиз. Очень нужно.


 
Anatoly Podgoretsky ©   (2003-04-22 11:17) [1]

Спрашиваешь про ProgressBar и не приводишь кода работы с ним, странно как то все это.


 
Skier ©   (2003-04-22 11:18) [2]

TApplication.ProcessMessages


 
DjVirus   (2003-04-22 11:23) [3]

Я пробовал код работы с прогрессбаром вставлять в разные места программы. Но УВЫ.
Я вот и хочу узнать куда его вставить.

procedure TfmMain.btnCopyClick(Sender: TObject);
begin
ProgressBar1.Max:=сумма размеров всех каталогов которые указаны в листбоксе
For I:=0 To ListBox1.Count-1 Do Begin
CopyDir(Application.Handle,ListBox1.Items[ListBox1.ItemIndex],"D:\distr\");
ProgressBar1.Position:=GetSizeDir("D:\distr\");
End;
end;

Вот так меня не устраивает. Так как он меняет позицию ProgressBar"a только после копирования каждого каталога. А вдруг один каталог у меня большой и много маленьких. Пока большой копируется прогресбар молчит.


 
DjVirus   (2003-04-22 11:25) [4]

ProcessMessage возникает только после копирования целого каталога. Я уже и так пробовал.


 
mrcat ©   (2003-04-22 11:30) [5]

Копирование выносишь в отдельную нить. Там же периодически опрашиваешь статус (сколько скопировано/осталось) и в основной нити выводишь рез-т на TProgressBar.


 
DjVirus   (2003-04-22 11:34) [6]

>>mrcat © (22.04.03 11:30)

Если не трудно. Объясни пожалуйста, что такое нить?


 
Anatoly Podgoretsky ©   (2003-04-22 11:35) [7]

DjVirus (22.04.03 11:23)
прогресбар не молчит, а четко показывает количество обработанных элементов из ListBox1


 
DjVirus   (2003-04-22 11:38) [8]

>>DjVirus (22.04.03 11:23)
прогресбар не молчит, а четко показывает количество обработанных элементов из ListBox1

Ну я это и хотел сказать. Вообщем меня поняли.
А мне нужно чтоб он показывал не кол-во обработанных эл-ов из листбокса, а количество скопированных байт.


 
evvcom ©   (2003-04-22 11:48) [9]

Нить - это поток, см. TThread
А не пробовал убрать FOF_SILENT?


 
Cobalt ©   (2003-04-22 11:50) [10]

Тогда придется копировать вручную папки с файлами, и файлы тоже ручками (а вдруг у тебя попадется файл на 300 МБ?, а остальные по 1 МБ?), и обрабатывать во время каждого копирования - если процент копирования увеличился на 1, то тогда перерисовываем Прогрессбар.


 
Anatoly Podgoretsky ©   (2003-04-22 11:51) [11]

DjVirus (22.04.03 11:38)
Так для этого надо копировать не по папкам, а хотя юы по файлам, а лучше блоками.


 
DjVirus   (2003-04-22 11:57) [12]

А нельзяли сделать проще.
вот например при копировании процедурой SHFileOperation можно отображать пройесс копирования. В этом окошке копирования отображается прогрессбар такой какой мне нужен. Вот можно как-нибудь этот прогрессбар перенаправит на мой(который на форме)?
По мойму я что-то не то ляпнул.



Страницы: 1 вся ветка

Текущий архив: 2003.05.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.041 c
1-12784
DDF
2003-04-22 10:40
2003.05.05
[Error] на значении Nil


14-12865
programmer1
2003-04-16 17:20
2003.05.05
Как мне посмотреть все заданные мной вопросы?


1-12808
Bug
2003-04-18 11:07
2003.05.05
Stay On Top


14-12893
Soft
2003-04-16 19:01
2003.05.05
Использование несколько цветов в тексте


3-12637
SiJack
2003-04-15 14:27
2003.05.05
Как создать запрос SQL?