Nein, ohne callback(nil) das gleiche Problem.
Am Cancel liegt das nicht, das war vorher auch dort nicht drin, brauch ich auch nicht.
Die Funktion wird sofort abgebrochen. Aber eben nur wenn Optimierung an ist.
pbCancel [in, optional]
If this flag is set to TRUE during the copy operation, the operation is canceled. Otherwise, the copy operation will continue to completion.
Callback sendet nur Messages, aber wie gesagt ohne Callback gehts auch nicht.
Delphi-Quellcode:
function CopyFileProgress(TotalFileSize, TotalBytesTransferred, StreamSize,
StreamBytesTransferred: LARGE_INTEGER; dwStreamNumber, dwCallbackReason,
hSourceFile, hDestinationFile: DWORD; lpData: Pointer): DWORD; stdcall;
begin
if CancelCopy = True then
begin
SendMessage(THandle(lpData), CEXM_CANCEL, 0, 0);
result:= PROGRESS_CANCEL;
exit;
end;
case dwCallbackReason of
CALLBACK_CHUNK_FINISHED:
begin
SendMessage(THandle(lpData), CEXM_CONTINUE, TotalBytesTransferred.LowPart, TotalBytesTransferred.HighPart);
result:= PROGRESS_CONTINUE;
end;
CALLBACK_STREAM_SWITCH:
begin
SendMessage(THandle(lpData), CEXM_MAXBYTES, TotalFileSize.LowPart, TotalFileSize.HighPart);
result:= PROGRESS_CONTINUE;
end;
else
result:= PROGRESS_CONTINUE;
end;
end;