Einzelnen Beitrag anzeigen

lucius

Registriert seit: 6. Okt 2005
Ort: Niederlande
215 Beiträge
 
Delphi 7 Enterprise
 
#1

Anzeige lKBytesDone und lTotalSize falsch?

  Alt 21. Apr 2007, 15:29
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,
  Mit Zitat antworten Zitat