I would like to show percent done, elapsed time and estimated time values for the installation process. Is there a way to add text labels whose are marked in the below screenshot ?
Asked
Active
Viewed 5,144 times
1 Answers
20
It was not that easy to implement this feature before the CurInstallProgressChanged
event method was introduced in Inno Setup 5.5.4. But now, having this event available, you can write a script like this:
Special thanks to user1662035 for the proposed idea for the fix of hiding labels at rollback process.
[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;
-
@user1662035, yes, that was the immediate thought I had. But I'll try to look at something more precise yet. Anyway, you might use the ready made [`ExitSetupMsgBox`](http://www.jrsoftware.org/ishelp/index.php?topic=isxfunc_exitsetupmsgbox) function to show the exit confirmation dialog. However, isn't that message different from "*Do you want to exit setup ?*". I don't have Inno Setup by hand at this time to check... – TLama Nov 20 '13 at 18:03
-
As of now, one can use built-in [`CreateCallback` function](https://jrsoftware.org/ishelp/index.php?topic=isxfunc_createcallback) instead of using external `WrapTimerProc` from `InnoCallback.dll`. For an example see [Inno Setup - How to show percent done, elapsed time and estimated time progress at uninstaller?](https://stackoverflow.com/q/41698725/850848). – Martin Prikryl Aug 17 '20 at 08:08