Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2011, 14:57   #1
ProESM
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 27
По умолчанию Зависание CopyFileEx при перемещении формы

Приветствую всех!

Такая вот проблемка, помогите, пожалуйста, решить ее.

Копирую файлы функцией CopyFileEx
Код:
Windows.CopyFileEx(
      PChar(UpdatePath+FileList.Strings[i]),
      PChar(AppPath+FileList.Strings[i]),
      @ProgressRoutine,
      nil,
      nil,
      0
    );
Все прекрасно, файлы копируются, прогрессбар все отрисовывает корректно. Но при перемещении формы на рабочем столе, процесс копирования файла останавливается. Если прекратить перетаскивать форму, то процесс продолжается.

Как можно этого избежать?
ProESM вне форума Ответить с цитированием
Старый 25.04.2011, 15:50   #2
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Добавь в код строку
Код:
Application.ProcessMessages;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 25.04.2011, 16:01   #3
ProESM
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 27
По умолчанию

Уже имеется в CallBack функции:
Код:
function ProgressRoutine(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: LARGE_INTEGER;
  dwStreamNumber,	dwCallbackReason: DWord; hSourceFile,	hDestinationFile: THandle; lpData: Pointer): DWord; stdcall;
begin
  // Очередная порция данных равна 32768 байт (равно максимальному значению типа
  // данных SmallInt. Копируем порции только кратные, к примеру, числу 10.
  // Делитель "10" управляет балансом скорость/индикация. Чем выше делитель, тем
  // копирование идет быстрее, но индикация менее плавная. И наоборот
  if (TotalBytesTransferred.QuadPart mod 10) = 0 then
  begin
    MainForm.DetalProgressBar.Position := Round(TotalBytesTransferred.QuadPart / TotalFileSize.QuadPart * 1000);

    if TotalBytesTransferred.QuadPart > (TotalFileSize.QuadPart-StreamBytesTransferred.QuadPart) then
      MainForm.Caption := '';

    //    ProgressLabel.Caption := IntToStr(ProgressBar1.Position) + '%';
    MainForm.Update;
    Application.ProcessMessages;
  end;
  if IsCanceled then
    Result := PROGRESS_CANCEL
  else
    Result := PROGRESS_CONTINUE
end;
ProESM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перезапись при копировании/перемещении Shouldercannon Общие вопросы Delphi 4 12.09.2010 02:32
Отрисовка Series при перемещении формы Nigadyai Общие вопросы Delphi 7 26.05.2010 22:40
Изменить курсор при перемещении формы Nester Общие вопросы Delphi 11 28.09.2009 18:29
Процедура при перемещении формы Alex Cones Общие вопросы Delphi 7 28.07.2009 09:11
Запоминание координат при перемещении формы Shouldercannon Общие вопросы Delphi 5 21.06.2009 23:11