Guten Tag,
Ich habe ein kleines Problem mit der Anzeige von den Totalen- und Entpackten Bytes beim Entpacken von Rardateien.
Das komische ist wenn die Entpackte Datei groesser wie 1 GB ist, wird die Anzeige falsch dargestellt.
Wenn Sie kleiner ist klappt alles.
Die Datei besteht aus mehreren Rar-Volumen.
Kann mir da einer helfen bitte?
Danke im voraus.
Delphi-Quellcode:
function Bytes2String(i: longint): string;
begin
Bytes2String := FormatFloat('###,###,###', i div 1024);
end; // Bytes2String
/////////////////////////////////////////////////////////////////////////////////
function RarCallbackProc(msg: UINT; UserData, P1, P2: integer): integer; stdcall;
var
s: string;
begin
Result := 0;
case msg of
UCM_CHANGEVOLUME:
if (P2 = RAR_VOL_ASK) then
begin
end;
UCM_PROCESSDATA:
begin
if RARExtract then
begin
lKBytesDone := lKBytesDone + P2; // bytes written so far
//frmUnrar.Refresh; // refresh misc status text
Application.ProcessMessages;
// Current file progress
frmUnrar.pbCurrentFile.Position := frmUnrar.pbCurrentFile.Position + P2;
frmUnrar.lblBytes.Caption := Bytes2String(lKBytesDone) +
' kb of ' + Bytes2String(RARHeaderData.UnpSize) + ' kb';
// Total progress
lKBWritten := lKBWritten + (P2 div 1024);
frmUnrar.pbTotalProgress.Position := lKBWritten;
frmUnrar.lblTotalMB.Caption := Bytes2String(lKBWritten) +
' mb of ' +
Bytes2String(lTotalSize) + ' mb';
frmUnrar.Label2.caption := IntToStr(lTotalSize);
// Time elapsed
RARElapsedTime := Time - RARStartTime;
DecodeTime(RARElapsedTime, Hour, Min, Sec, MSec);
if Min < 10 then
s := '00:0' + IntToStr(Min) + ':'
else
s := '00:' + IntToStr(Min) + ':';
if Sec < 10 then
s := s + '0';
s := s + IntToStr(Sec);
if s <> frmUnrar.lblElapTime.Caption then
frmUnrar.lblElapTime.Caption := s;
// Estimated time left
if lTotalSize > 0 then
begin
RARPctDone := (lKBWritten * 100) div lTotalSize;
if RARPctDone = 0 then RARPctDone := 1;
end
else
RARPctDone := 50;
RARPctLeft := 100 - RARPctDone;
if RARPctLeft > 0 then
begin
iRARDoneTime := (Min * 60) + Sec;
iRAREsti := ((iRARDoneTime * 100) div RARPctDone) - iRARDoneTime;
Min := iRAREsti div 60;
Sec := IRAResti - (60 * Min);
if Min < 10 then
s := '00:0' + IntToStr(Min) + ':'
else
s := '00:' + IntToStr(Min) + ':';
if Sec < 10 then
s := s + '0';
s := s + IntToStr(Sec);
if s <> frmUnrar.lblEstiTime.Caption then
frmUnrar.lblEstiTime.Caption := s;
end;
//frmUnrar.Refresh; // refresh misc status text
Application.ProcessMessages;
Result := 1;
end
else
Result := 1;
end;
end;
end; // RarCallbackProc
Gruss Lucius,