在我的安装程序中,我不想使用标准的“语言对话框”表单。
相反,我想向我的Inno Setup的“欢迎”页面添加一个组合框,以执行“语言对话框”所做的相同工作,以便能够:
[Languages]
在下拉列表中显示该部分中包含的所有语言。因此,用户可以从此自定义组合框中选择一种语言。
将所选语言应用于整个设置。
我知道使用“常规方式”是不可能的,因为Inno Setup中没有可用的功能来执行此作业(!!!)。
因此,我向Inno Setup编译器添加了几个函数,并从脚本中调用了它们:
function GetAvailableLanguages: TStringList
:可以返回所有有效语言的列表(完整数据),并且工作正常。
procedure SetChosenLanguage(const I:integer)
:它应该设置所选的语言,但现在只能“部分地”进行。所有语言都会更改,但所有“设置”页面中的标签均会更改。因此,按钮标题,消息框,对话框等都将语言设置为所选语言,但是所有标签仍为默认(OS)语言。
我试图解析使用Refresh
,Invalidate
,Update
,发送消息没有任何成功。标签标题仍为原始默认语言。
以下链接是一个视频,显示了我的测试设置以及组合框和语言更改。我的默认(OS)语言是意大利语。该视频显示,即使我将语言更改为例如Deutsch,一切也会将语言更改为Deustch但标签会更改。
http://screencast.com/t/SDI5VN67LFL
如果有人已经解决了该问题,请帮助我!
您将必须用TWizardForm
代码将它们初始化为初始语言的方式一一重置所有标签。
例如:
SelectTasksLabel.Caption := ExpandSetupMessage(msgSelectTasksLabel2);
查看TWizardForm.Create
代码了解更多。
没有比这更简单的方法了。字符串被复制到Windows(Win32)控件,它们不会神奇地得知您已更改语言。您必须用新值覆盖字符串。
例如,“下一步”和“后退”按钮的标签会随着语言的更改而更新,因为当页面更改时,它们总是从TWizardForm.SetCurPage
以下位置进行重置:
procedure TWizardForm.SetCurPage(const NewPageID: Integer);
...
begin
...
BackButton.Caption := SetupMessages[msgButtonBack];
if CurPageID = wpReady then begin
NextButton.Caption := SetupMessages[msgButtonInstall];
CancelButton.Caption := SetupMessages[msgButtonCancel];
end else if ((CurPageID = wpPreparing) and PrepareToInstallNeedsRestart) or (CurPageID = wpFinished) then begin
NextButton.Caption := SetupMessages[msgButtonFinish];
CancelButton.Caption := SetupMessages[msgButtonCancel];
end else begin
NextButton.Caption := SetupMessages[msgButtonNext];
CancelButton.Caption := SetupMessages[msgButtonCancel];
end;
...
end;
但是大多数其他标签是静态的,并且从不更新,因此它们保持原始语言。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句