Форум по Delphi программированию



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.07.2016, 09:48
Gakuro Gakuro вне форума
Прохожий
 
Регистрация: 18.01.2012
Адрес: о. Сахалин
Сообщения: 34
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Animate, ProgressBar

У меня проблема с отображением процесса хода длительных операций, помогите разобраться:
На Panel2 есть Animate1 (CommonAVI=aviCopyFiles), ProgressBar1, Gauge1, Timer1. При нажатии Button1:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Panel2.Visible:=True;
  Animate1.Active:=True;
  Timer1.Enabled:=True;
  CopyFile(PAnsiChar(ExistFile),PAnsiChar(NewFile),False);
  Animate1.Active:=False;
  Timer1.Enabled:=False;
  Panel2.Visible:=False;
end;
В событии таймера:
Код:
procedure TForm1.Timer1Event(Sender: TObject);
begin
  Timer1.Enabled:=False;
  ProgressBar1.StepIt;
  if ProgressBar1.Position = ProgressBar1.Max then ProgressBar1.Position:=0;
  Gauge1.Progress:=Gauge1.Progress+1;
  if Gauge1.Progress = Gauge1.MaxValue then Gauge1.Progress:=0;
  Timer1.Enabled:=True;
end;
При опробовании (без CopyFile) всё работает отлично. С CopyFile при копировании файла Animate1 зависает, ProgressBar1 стоит на месте, а Gauge1 вообще не видно! Пробовал в Timer1Event() перед Timer1.Enabled:=True добавить Panel2.UpdateControlState - ничего нового. Зараннее всем спасибо.

MAD: «code» tag.

Последний раз редактировалось M.A.D.M.A.N., 13.07.2016 в 14:04.
Ответить с цитированием
  #2  
Старый 13.07.2016, 11:27
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Используй CopyFileEx с lpProgressRoutine или SHFileOperation и будет очень красиво.
А так событие таймера не срабатывает когда CopyFile выполняется.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 13.07.2016, 13:58
Gakuro Gakuro вне форума
Прохожий
 
Регистрация: 18.01.2012
Адрес: о. Сахалин
Сообщения: 34
Версия Delphi: Delphi 7
Репутация: 10
Хорошо

Спасибо, у меня в книге по Delphi бывает что чего-то не бывает. И во встроенной справке Delphi тоже такое бывает. Кстати, по сайту лазил, читал... А какая заморочка между 32 и 64-битными? У меня XP SP2 x86. А у товарища 8.3 x64 и ничего - работает. Единственное - это форма взяла его темы. Но я заменил Button на Panel, для формы и объектов определил стандартные цвета - и всё! Только заголовок остался по его теме...
Ответить с цитированием
  #4  
Старый 13.07.2016, 14:45
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Мне SHFileOperation больше нравится. В нем уже отображается стандартный диалог копирования с именем объекта, откуда, куда, оценкой оставшегося времени, скоростью копирования, возможностью отмены операции, возможностью выполнения операции над несколькими файлами. Используются исключительно стандартные цвета и модальность над нужным окном.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 13.07.2016, 15:13
Gakuro Gakuro вне форума
Прохожий
 
Регистрация: 18.01.2012
Адрес: о. Сахалин
Сообщения: 34
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

У меня такой функции нет. Не подскажите код, как её использовать? Про копирование нескольких файлов - у меня так: ExtractFilePath(FileName) в Memo, а потом по нажатии Button "копировать" все файлы из списка Memo копируются в куда надо. Ну и составляется отдельно список файлов (с путями), которые не скопировались.
Ответить с цитированием
  #6  
Старый 13.07.2016, 15:38
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
uses
  ShellAPI,
...
var
  SHFileOpStruct: TSHFileOpStruct;
begin
  ZeroMemory(@SHFileOpStruct, SizeOf(TSHFileOpStruct));
  SHFileOpStruct.Wnd:=Handle;
  SHFileOpStruct.wFunc:=FO_COPY;
  SHFileOpStruct.pFrom:='d:\HDD\Sw.vdi'#0;
  SHFileOpStruct.pTo:='d:\CommonFiles';
  SHFileOpStruct.fFlags:=0;
  SHFileOpStruct.lpszProgressTitle:='CommonFiles';
  SHFileOperation(SHFileOpStruct);
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 13.07.2016, 18:11
Gakuro Gakuro вне форума
Прохожий
 
Регистрация: 18.01.2012
Адрес: о. Сахалин
Сообщения: 34
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо! NumLock, подскажите пожалуйста ссылочку на книгу, по которой можно вот такому научиться.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:10.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2021

ВКонтакте   Facebook   Twitter   Ссылка на Telegram