Inno setup Inno设置-如何在.arc解压缩时显示完成百分比、经过的时间和估计的时间进度?

Inno setup Inno设置-如何在.arc解压缩时显示完成百分比、经过的时间和估计的时间进度?,inno-setup,compression,Inno Setup,Compression,如何在.arc解压缩时显示完成百分比、经过的时间和估计的时间进度?我正在尝试使用此代码的一部分(百分比)将其添加到 我正在尝试将ISDone代码用于我的脚本。ISDone代码使用以下功能: function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword; begin if OveralPct<=1000 then ISD

如何在.arc解压缩时显示完成百分比、经过的时间和估计的时间进度?我正在尝试使用此代码的一部分(百分比)将其添加到

我正在尝试将ISDone代码用于我的脚本。ISDone代码使用以下功能:

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct<=1000 then ISDoneProgressBar1.Position := OveralPct;
  LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
  LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-ScaleX(100));
  LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
  LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
  LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
  Result := ISDoneCancel;
end;

此代码是ISDone 0.6代码的一部分。

我假设您需要自由弧提取以及ISDone的时间标签功能?如果是这样,您不必同时使用ISDone代码和ISFreeArcExtract代码,因为ISDone实现了Freearc提取。您可以使用ISArcExract函数来解压缩.arc文件。下面是函数定义

function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@files:ISDone.dll stdcall delayload';
下面是你如何使用它。以下代码可以在脚本的CurStepChanged过程中找到。您可以添加包含多个arc文件的多行和PctOfTotal,以表示特定arc文件在100%的总体安装中所占的百分比

if not ISArcExtract ( 0, 10, ExpandConstant('{src}\data.arc'), ExpandConstant('{app}\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
此处data.arc将被提取为freearc存档,并将消耗安装的10%


请注意,以上部分摘自ISDone 0.6

您尝试了什么?@MartinPrikryl我正在尝试使用ISDone 0.6和IsFreeArcExtract的代码。看起来不错。有什么问题吗还要注意
ProgressPage.SetText(格式('Extracted:%d%%',[Percent]),''虽然你最好从这里开始:-但我想你知道,因为你使用了相同的问题标题。@MartinPrikryl抱歉,Martin,我想展示一个像样的代码,这需要我花时间。对我来说很复杂。
if not ISArcExtract ( 0, 10, ExpandConstant('{src}\data.arc'), ExpandConstant('{app}\'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;