Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 191

/ вопрос открыт /

как копировать файлы функцией CopyFileEx со стату баром? что только не перепробовал какие где параметры кое как разобраться не могу. есть ли простенький пример применения фунции?

терехин алексей сергеевич Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: терехин алексей сергеевич (статус: Посетитель)
Вопрос отправлен: 10 декабря 2006, 20:28
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: min@y™

Хотел, было, уже сам, почитавши хэлп, написать примерчик, но вспомнил, что где-то я уже это видел.

Набрал в гугле "Копируем файл с индикатором процесса" и первая же ссылка и есть этот пример.

http://articles.org.ru/cfaq/index.php?qid=715&frommostrecent=yes

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 11 декабря 2006, 09:11
Оценка за ответ: 3

Комментарий к оценке: зачёт

Ответ #2. Отвечает эксперт: Матвеев Игорь Владимирович

Здравствуйте, терехин алексей сергеевич!
Все есть в MSDN и даже в Delphi Help (Win32 Programmer's Reference). Все довольно просто, есть только одна тонкость: в CopyFileEx передается параметр pbCancel, который должен быть указателем на переменную Boolean, так вот, эта переменная не должна быть локальной.

Готовый пример смотрите в прикреплённом файле.

Ключевой код приведен в приложении.
К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)

Приложение:
  1. function CopyProgressRoutine(
  2. TotalFileSize,
  3. TotalBytesTransferred,
  4. StreamSize,
  5. StreamBytesTransferred: LARGE_INTEGER;
  6. dwStreamNumber,
  7. dwCallbackReason: DWORD;
  8. hSourceFile,
  9. hDestinationFile: THandle;
  10.  
  11. begin
  12.  
  13.  
  14.  
  15.  
  16.  
  17. if dwCallbackReason = CALLBACK_STREAM_SWITCH then
  18. TProgressBar(lpData).Max := TotalFileSize.QuadPart;
  19.  
  20.  
  21. TProgressBar(lpData).Position := TotalBytesTransferred.QuadPart;
  22.  
  23.  
  24. Application.ProcessMessages;
  25. Result := PROGRESS_CONTINUE;
  26. end;
  27.  
  28. procedure TForm1.Button1Click(Sender: TObject);
  29. var
  30. Ch1, Ch2 : PChar;
  31. CallBack : TFNProgressRoutine;
  32. ErrCode : Integer;
  33. begin
  34. SetEnabled(False);
  35.  
  36. FCancelled := False;
  37. Ch1 := PChar(Edit1.Text);
  38. Ch2 := PChar(Edit2.Text);
  39. if CopyFileEx(Ch1, Ch2,
  40.  
  41. ProgressBar1, @FCancelled, COPY_FILE_RESTARTABLE) then
  42.  
  43. else
  44. begin
  45. ErrCode := GetLastError;
  46.  
  47.  
  48. end;
  49. ProgressBar1.Position := 0;
  50.  
  51. SetEnabled(True);
  52. end;


Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 11 декабря 2006, 10:54
Оценка за ответ: 5

Комментарий к оценке: наконец то понятное объяснение )

Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:51
Выполнено за 0.02 сек.