如何执行Inno Select语言对话框之前的代码

时间:2014-02-06 20:07:02

标签: inno-setup

我需要在显示Select Setup语言对话框之前执行pascal代码,遗憾的是 InitializeSetup 事件在执行之后执行。

function InitializeSetup(): Boolean; //This event occurs to late
begin
    DoSomething(); 
    Result := True;
end;

所以可以在显示Select Setup language对话框之前执行脚本代码吗?

enter image description here

3 个答案:

答案 0 :(得分:2)

我有类似的问题,我想到了不同的解决方法:手动设置所有设置,或者进行内部本地化,但它们从一开始就看起来如此注定。 Select Setup language Dialog

我已经分叉了issrc,在本地构建它,并查看了Setup项目的main.pas。我看到现在这样做的想法:人们可能想在{Language}中使用InitializeSetup,所以在AskForLanguage方法之后调用它。

要查看我对main.pas做了一些小改动的想法:在AskForLanguage inited和CodeRunner调用后调用InitializeSetup。我得到了VCL的选择设置语言对话框,但不是全部 - 非客户区域不是VCL:

enter image description here

我尝试继承的语言形式不是来自TForm类,而是来自TSetupForm,或者在设置过程中调用它或进行其他更改 - 没有结果。如果有人知道为什么它不是VCL' - 请告诉我!

然后我阅读了Custom Window Frame Using DWM文章,并将表格边框设为bsNone并获得了此内容:

enter image description here

所以现在我很好。

表示这种形式在样式设置的许多页面之前没有样式

如果我们想以正确的方式做到这一点,我想所有需要做的事情 - 在CodeRunner之前移动AskForLanguage init,并添加自定义代码函数,如StyleInit左右。然后所有人都会很高兴:{Language}将在InitializeSetup中提供,对话将是VCL。

答案 1 :(得分:1)

不,首先调用函数InitializeSetup()。 稍后会调用所有其他函数。

当然你可以修改Inno的来源并添加自定义功能,但我认为不是你的情况。

你为什么需要这个?也许有解决方案可以解决您的情况,请告诉我们详细信息。

答案 2 :(得分:0)

另一种可能的解决方案是使用Inno setup Ultra,它有几个推论,而InitializeLanguageDialog函数就是其中之一。只需加载样式。 (此外,您可以自由更改语言对话本身,这是非常好的)。