Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-12773
exo
2003-04-21 18:19
2003.05.05
как выделить найденый текст в memo?


3-12625
Cranium
2003-04-14 17:28
2003.05.05
Как лучьше реализовать следующее


14-12875
wnew
2003-04-16 13:35
2003.05.05
Translation Manager


1-12803
Foxtrot
2003-04-22 14:52
2003.05.05
Как добыть время из структуры FILETIME ?


1-12692
Sirus
2003-04-23 08:00
2003.05.05
Как сделать чтобы форма не отображалась при запуске???





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