![]() |
CopyFileProgress mit Fehler
Hallo,
ich habe ein Problem mit CopyFileEx und CopyFileProgress festgestellt, welches ich nicht lösen kann.
Delphi-Quellcode:
Es scheint alles normal zu laufen, bis mir auf fiel, dass die Prozente einfach nicht passen. Zunächst dachte ich es liegt an schlechte Rundungen aber durch die Variable test ist mir aufgefallen, dass nicht dass passiert was soll. Ich habe 50 Dateien ausgewählt, die kopiert werden sollten. Diese 50 Dateien wurden auch sauber kopiert aber test sagt was anderes: 57. Deshalb stimmen auch die Prozente nicht. Der Fortschrittsbalken ist immer schon am Ende obwohl noch Daten kopiert werden.
var
test: Byte; // zu Beginn auf 0 gestezt function CopyFileProgress(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: LARGE_INTEGER; dwStreamNumber, dwCallbackReason, hSourceFile, hDestinationFile, lpData: DWORD): DWORD; stdcall; begin Application.ProcessMessages; if Main.bCopyCanceled = True then begin Result := PROGRESS_CANCEL; Exit; end; case dwCallbackReason of CALLBACK_CHUNK_FINISHED: begin Progress.PBrCopy.Position := TotalBytesTransferred.QuadPart; Result := PROGRESS_CONTINUE; end; CALLBACK_STREAM_SWITCH: begin inc(main.test); Main.Caption := inttostr(main.test); //Progress.PBrCopy.Max := Trunc(0.3 + Progress.PBrCopy.Max * 100 / Main.FullSize); Progress.PBrCopyAll.Position := Progress.PBrCopyAll.Position + Progress.PBrCopy.Max; Progress.PBrCopy.Max := TotalFileSize.QuadPart; Result := PROGRESS_CONTINUE; end; end; end; Wo liegt hier der Fehler? Gruß Mazel |
Re: CopyFileProgress mit Fehler
Hat keiner eine Idee?
|
Re: CopyFileProgress mit Fehler
Guck mal hier:
![]() |
Re: CopyFileProgress mit Fehler
Danke dir erst einmal. Ich habe jetzt versucht den Code bei mir einzubauen, dabei ist mir aufgefallen, dass da ein kleiner Fehler drinn ist:
Delphi-Quellcode:
Nun gut. Als ich das ausprobiert habe, kam sofort meine Meldung, dass alle Dateien übertragen wurden. Diese Meldung soll aber normaler Weise erst nach am Ende kommen. Auch die ProgressBars waren nicht zu sehen. Die Dateien wurden also im HiIntergrund kopiert.
ProgressBar1.Max := (Msg.LParam) shl 32) + Msg.WParam;
// ich glaube so sollte es sein oder? ProgressBar1.Max := (Int64(Msg.LParam) shl 32) + Msg.WParam; Deshalb habe ich an meinen alten Code weiter versucht das Problem zu lösen. Dabei habe ich dies mit Erfolg versucht:
Delphi-Quellcode:
Nun stimmt die übertragene Anzahl von Dateien. Jetzt stellt sich nur noch die Frage, ob ich das hier lassen kann.
CALLBACK_CHUNK_FINISHED:
begin Progress.PBrCopy.Position := TotalBytesTransferred.QuadPart; if Progress.PBrCopy.Position = Progress.PBrCopy.Max then begin inc(main.test); Main.Caption := inttostr(main.test); Progress.PBrCopy.Max := Trunc(0.4 + Progress.PBrCopy.Max * 100 / Main.FullSize); Progress.PBrCopyAll.Position := Progress.PBrCopyAll.Position + Progress.PBrCopy.Max; end; Result := PROGRESS_CONTINUE; end; Gruß Mazel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz