Форум: "Основная";
Текущий архив: 2003.05.05;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c