Habe es leider noch nicht selbst ausprobiert, aber auf der Seite
http://www.nikse.dk/delphi.html gibt es eine function RarCallbackProc mit "Current file progress" und "Total progress":
Delphi-Quellcode:
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
// 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.Refresh; // refresh misc status text
Application.ProcessMessages; // like DoEvents in VB
Result := 1;
end
else
Result := 1;
end;
end;
end; // RarCallbackProc