¿Cómo mostrar el porcentaje hecho, el tiempo transcurrido y el tiempo estimado de progreso?

Me gustaría mostrar el porcentaje de tiempo realizado, el tiempo transcurrido y los valores de tiempo estimados para el proceso de instalación. ¿Hay alguna manera de agregar tags de texto que están marcadas en la siguiente captura de pantalla?

enter image description here

No fue tan fácil implementar esta característica antes de que se introdujera el método de evento CurInstallProgressChanged en Inno Setup 5.5.4. Pero ahora, teniendo este evento disponible, puedes escribir un script como este:

Un agradecimiento especial al usuario1662035 por la idea propuesta para la solución de tags ocultas en el proceso de reversión.

 [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;