在我的设置中,我不想使用标准语言对话框表格。
相反,我想在我的Inno安装程序的欢迎页面添加一个组合框,以完成语言对话框所做的相同工作,以便它能够:
显示下拉列表中[Languages]
部分中包含的所有语言。因此,用户可以从此自定义组合框中选择一种语言。
将所选语言应用于整个设置。
我知道使用“普通方式”是不可能的,因为Inno Setup中没有可用于执行此工作的功能(!!!)。
所以,我在Inno Setup编译器中添加了几个函数,我从我的脚本中调用它们:
function GetAvailableLanguages: TStringList
:它可以返回所有活动语言的列表(完整数据),并且工作正常。
procedure SetChosenLanguage(const I:integer)
:它应该设置所选语言,但现在只能“部分”。语言将针对所有设置页面中的标签进行更改。因此,按钮标题,消息框,对话框,...所有语言都设置为所选语言,但所有标签仍然是默认(OS)语言。
我尝试使用Refresh
,Invalidate
,Update
解决,发送消息但没有成功。标签标题仍为原始默认语言。
以下链接是一个视频,显示我的测试设置,其中包含组合框和语言更改。我的默认(OS)语言是意大利语。该视频显示,即使我将语言更改为Deutsch,一切都会将语言更改为Deustch BUT标签。
http://screencast.com/t/SDI5VN67LFL
如果有人已经解决了这个问题,请帮助我!
答案 0 :(得分:2)
您必须逐个重新设置所有标签,方法与TWizardForm
代码将其初始化为初始语言的方式相同。
例如:
SelectTasksLabel.Caption := ExpandSetupMessage(msgSelectTasksLabel2);
有关详情,请参阅TWizardForm.Create
code。
没有更简单的方法。字符串被复制到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;
但是大多数其他标签都是静态的,永远不会更新,所以它们保持原始语言。