问题描述
我使用Inno Setup 6.x的目标是自定义代码中的FinishedLabel
文本,即Pascal脚本。我使用Pascal脚本的原因是,我只想在IsAdminMode()
为true的情况下自定义/更改标签。我该怎么办?
以下两种方法不起作用:
-
使用脚本化常量:
[Messages] FinishedLabel={code:GetFinishedLabel}
[Code] function GetFinishedLabel(Param: String): String; begin Result := 'BLA'; end;
这将显示“ {code:GetFinishedLabel}”,而不是“ BLA”。
-
在
InitializeWizard
中自定义向导。完整(失败)示例:
[Code] procedure InitializeWizard(); begin WizardForm.FinishedLabel.Caption := 'BLA'; end;
FinishLabel
仍显示Default.isl
的原始文本
有什么想法吗?
解决方法
FinishedLabel
在安装结束时会根据各种因素进行更新。因此,您在InitializeWizard
中设置的值将被覆盖。您稍后必须设置自定义消息,例如在CurPageChanged(wpFinished)
中:
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpFinished then
begin
WizardForm.FinishedLabel.Caption := 'BLA';
end;
end;
您可能会考虑改进代码以执行Inno Setup会执行的操作,例如:
- 考虑到是否需要重新启动(
FinishedRestartLabel
); - 考虑到是否创建了图标(
FinishedLabel
与FinishedLabelNoIcons
); - 调整标签高度以适合消息;
- 根据邮件的高度移动
RunList
的位置。