Hallo,
ich habe jetzt mal versucht, eine Datei zu kopieren und den Fortschritt in einer ProgressBar anzeigen zu lassen.
Das funktioniert auch, aber nur mit kleinen Dateien
Wenn die Datei mehrere 100 MB groß ist, dann passiert gar nichts
Hier der Code:
Delphi-Quellcode:
function CopyFileProgress(TotalFileSize, TotalBytesTransferred, StreamSize,
StreamBytesTransferred: LARGE_INTEGER; dwStreamNumber, dwCallbackReason,
hSourceFile, hDestinationFile, lpData: DWORD): DWORD; stdcall;
begin
Application.ProcessMessages;
if CancelCopy = True then
begin
ShowMessage('Abbruch');
result := PROGRESS_CANCEL;
Form1.ProgressBar1.Position := 0;
Exit;
end
else
Application.ProcessMessages;
case dwCallbackReason of
CALLBACK_CHUNK_FINISHED:
begin
Form1.ProgressBar1.Position := TotalBytesTransferred.QuadPart;
result := PROGRESS_CONTINUE;
end;
CALLBACK_STREAM_SWITCH:
begin
Form1.ProgressBar1.Max := TotalFileSize.QuadPart;
result := PROGRESS_CONTINUE;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Cancel: PBOOL;
begin
CancelCopy := False;
Cancel := nil;
CopyFileEx('C:\aaa.exe', 'D:\aaa.exe',
@CopyFileProgress, nil, Cancel, 0);
Form1.ProgressBar1.Position := 0;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
CancelCopy := True;
end;
end.
Bin dankbar für Hilfe!
Paul