如何显示已完成的百分比,已用时间和估计的时间进度?

我想显示安装过程的完成百分比,已用时间和估计的时间值。 有没有办法添加标记在下面的截图的文本标签?

在这里输入图像描述

在Inno Setup 5.5.4中引入CurInstallProgressChanged事件方法之前,实现此function并不那么容易。 但现在,有了这个事件,你可以写一个这样的脚本:

特别感谢user1662035提供的回滚过程中隐藏标签修复的build议。

 [Setup] AppName=My Program AppVersion=1.5 DefaultDirName={pf}\My Program [Files] Source: "MyProg.exe"; DestDir: "{app}" Source: "MyProg.chm"; DestDir: "{app}" Source: "Readme.txt"; DestDir: "{app}" [Code] function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall'; var StartTick: DWORD; PercentLabel: TNewStaticText; ElapsedLabel: TNewStaticText; RemainingLabel: TNewStaticText; function TicksToStr(Value: DWORD): string; var I: DWORD; Hours, Minutes, Seconds: Integer; begin I := Value div 1000; Seconds := I mod 60; I := I div 60; Minutes := I mod 60; I := I div 60; Hours := I mod 24; Result := Format('%.2d:%.2d:%.2d', [Hours, Minutes, Seconds]); end; procedure InitializeWizard; begin PercentLabel := TNewStaticText.Create(WizardForm); PercentLabel.Parent := WizardForm.ProgressGauge.Parent; PercentLabel.Left := 0; PercentLabel.Top := WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + 12; ElapsedLabel := TNewStaticText.Create(WizardForm); ElapsedLabel.Parent := WizardForm.ProgressGauge.Parent; ElapsedLabel.Left := 0; ElapsedLabel.Top := PercentLabel.Top + PercentLabel.Height + 4; RemainingLabel := TNewStaticText.Create(WizardForm); RemainingLabel.Parent := WizardForm.ProgressGauge.Parent; RemainingLabel.Left := 0; RemainingLabel.Top := ElapsedLabel.Top + ElapsedLabel.Height + 4; end; procedure CurPageChanged(CurPageID: Integer); begin if CurPageID = wpInstalling then StartTick := GetTickCount; end; procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); begin if CurPageID = wpInstalling then begin Cancel := False; if ExitSetupMsgBox then begin Cancel := True; Confirm := False; PercentLabel.Visible := False; ElapsedLabel.Visible := False; RemainingLabel.Visible := False; end; end; end; procedure CurInstallProgressChanged(CurProgress, MaxProgress: Integer); var CurTick: DWORD; begin CurTick := GetTickCount; PercentLabel.Caption := Format('Done: %.2f %%', [(CurProgress * 100.0) / MaxProgress]); ElapsedLabel.Caption := Format('Elapsed: %s', [TicksToStr(CurTick - StartTick)]); if CurProgress > 0 then begin RemainingLabel.Caption := Format('Remaining: %s', [TicksToStr( ((CurTick - StartTick) / CurProgress) * (MaxProgress - CurProgress))]); end; end;