我需要在显示Select Setup语言对话框之前执行pascal代码,遗憾的是 InitializeSetup 事件在执行之后执行。
function InitializeSetup(): Boolean; //This event occurs to late
begin
DoSomething();
Result := True;
end;
所以可以在显示Select Setup language对话框之前执行脚本代码吗?
答案 0 :(得分:2)
我有类似的问题,我想到了不同的解决方法:手动设置所有设置,或者进行内部本地化,但它们从一开始就看起来如此注定。 Select Setup language Dialog
我已经分叉了issrc,在本地构建它,并查看了Setup项目的main.pas。我看到现在这样做的想法:人们可能想在{Language}
中使用InitializeSetup
,所以在AskForLanguage
方法之后调用它。
要查看我对main.pas做了一些小改动的想法:在AskForLanguage
inited和CodeRunner
调用后调用InitializeSetup
。我得到了VCL的选择设置语言对话框,但不是全部 - 非客户区域不是VCL:
我尝试继承的语言形式不是来自TForm
类,而是来自TSetupForm
,或者在设置过程中调用它或进行其他更改 - 没有结果。如果有人知道为什么它不是VCL' - 请告诉我!
然后我阅读了Custom Window Frame Using DWM文章,并将表格边框设为bsNone
并获得了此内容:
所以现在我很好。
表示这种形式在样式设置的许多页面之前没有样式如果我们想以正确的方式做到这一点,我想所有需要做的事情 - 在CodeRunner
之前移动AskForLanguage
init,并添加自定义代码函数,如StyleInit
左右。然后所有人都会很高兴:{Language}
将在InitializeSetup
中提供,对话将是VCL。
答案 1 :(得分:1)
不,首先调用函数InitializeSetup()。 稍后会调用所有其他函数。
当然你可以修改Inno的来源并添加自定义功能,但我认为不是你的情况。
你为什么需要这个?也许有解决方案可以解决您的情况,请告诉我们详细信息。
答案 2 :(得分:0)
另一种可能的解决方案是使用Inno setup Ultra,它有几个推论,而InitializeLanguageDialog函数就是其中之一。只需加载样式。 (此外,您可以自由更改语言对话本身,这是非常好的)。