|
Вопрос # 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 дней с момента отправки ответа)
Приложение: Переключить в обычный режим- function CopyProgressRoutine(
- TotalFileSize,
- TotalBytesTransferred,
- StreamSize,
- StreamBytesTransferred: LARGE_INTEGER;
- dwStreamNumber,
- dwCallbackReason: DWORD;
- hSourceFile,
- hDestinationFile: THandle;
-
- begin
-
-
-
-
-
- if dwCallbackReason = CALLBACK_STREAM_SWITCH then
- TProgressBar(lpData).Max := TotalFileSize.QuadPart;
-
-
- TProgressBar(lpData).Position := TotalBytesTransferred.QuadPart;
-
-
- Application.ProcessMessages;
- Result := PROGRESS_CONTINUE;
- end;
-
- procedure TForm1.Button1Click(Sender: TObject);
- var
- Ch1, Ch2 : PChar;
- CallBack : TFNProgressRoutine;
- ErrCode : Integer;
- begin
- SetEnabled(False);
-
- FCancelled := False;
- Ch1 := PChar(Edit1.Text);
- Ch2 := PChar(Edit2.Text);
- if CopyFileEx(Ch1, Ch2,
-
- ProgressBar1, @FCancelled, COPY_FILE_RESTARTABLE) then
-
- else
- begin
- ErrCode := GetLastError;
-
-
- end;
- ProgressBar1.Position := 0;
-
- SetEnabled(True);
- end;
 |
Ответ отправил: Матвеев Игорь Владимирович (статус: Студент)
Время отправки: 11 декабря 2006, 10:54
Оценка за ответ: 5
Комментарий к оценке: наконец то понятное объяснение )
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|