2012-11-13 45 views
2

我想用我的设置中的组件页面交换SelectDir页面。如何更改InnoSetup页面的顺序?

我找到了一个解决方案,将其他页面的内容分配给当前页面。

Procedure CurPageChanged(CurPageID: Integer); 
Begin 
    Case CurPageID of 
    wpSelectDir: 
    begin 
     WizardForm.SelectDirPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage; 
     WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectComponents) 
     WizardForm.Hint:= WizardForm.PageDescriptionLabel.Caption; 
     WizardForm.PageDescriptionLabel.Caption:= SetupMessage(msgSelectComponentsDesc) 
    end; 
    wpSelectComponents: 
    begin 
     WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage; 
     WizardForm.DiskSpaceLabel.Caption:= WzardForm.ComponentsDiskSpaceLabel.Caption; 
     WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir) 
     WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint 
    end; 
    end; 
End; 

使用此方法的问题是只有内容而不是实际页面发生更改。消息框和错误消息不受影响。我写了许多代码行来解决这些问题,但我遇到了越来越多的问题...

有没有更好的解决方案?我希望你可以帮助我!

编辑:尝试了一下后,我想出了这个:

procedure RedesignWizard; 
var 
    Page: TWizardPage; 
begin 
    Page := CreateCustomPage(wpWelcome, 'bla', 'bla'); 
    WizardForm.ComponentsList.Parent := Page.Surface; 
    //Here I am changing the layout of the pages... 
end; 

procedure InitializeWizard; 
begin 
    RedesignWizard; 
end; 

procedure CurPageChanged(CurPageID: Integer); 
begin 
    if (CurPageID = Page.ID) then 
    begin 
    //perform your actions specific to the Custom page here. 
    end; 
end; 

这样的组件列表中SelctDirPage出庭时,我没有任何更多的问题与这些消息框。

+0

总之,不要那样做。有检查绑定到* Next *按钮点击,并且这些检查由您不能覆盖的页面ID常量驱动。想象一下,当你点击* Next *按钮的用户以及(在某些情况下)目录编辑框中的默认目录已经存在时,会发生什么情况。是的,*“文件夹:c:\东西已存在,您是否想要安装到该文件夹​​?”消息对话框从组件页面弹出,什么是废话。 – TLama

+0

我知道这一点,因此写了一些检查以在页面上使用TLabel显示消息,并在上面的解决方案中禁用“下一步”按钮。我真的需要交换这些页面,如果有更简单的解决方案,我想知道。我可以自己处理剩下的东西。 – user1662035

+0

如果我们误解了彼此......您提到的问题发生在使用上面显示的方法时。我禁用了所有的消息框,并尝试解决错误页面上的消息框的问题,但我遇到了越来越多的问题。这就是为什么我想使用另一种方法,因为我真的需要交换这些页面。是否可以创建自定义页面并将SelectComponentsPage的值分配给它?甚至还有其他一些方式?否则,我将不得不摆脱每个问题。 – user1662035

回答

5

绝对没有办法安全地交换任何内置页面的顺序。 (通常,人们要求的唯一时间是他们试图复制不同安装系统的流程时,放松并放手; Inno的工作方式不同,拥抱它而不是与之搏斗。)

话虽如此,可以通过将其中一个或另一个重新创建为自定义页面来给出页面交换的外观。然而,通过这样做,您将丧失与该页面相关的所有内置功能 - 例如。如果替换组件页面,则不能使用[组件]部分或参数,并且如果替换目录页面,则不能使用{app}(即使在隐式使用它的地方,如UninstallFilesDir也不能)。

如果您愿意投入大量时间和精力(特别是测试),则可以完成。但一切都因此而变得更糟 - 所以通常情况下你最好不要这样做。

+1

+1让*走吧* :-) – TLama

+0

此功能是否已添加到INNO的更新版本中? 我只想要显示选择位置页面,如果某些组件正在安装。否则,我不需要显示该页面。但是我不知道它是否需要显示,直到组件被选中。 – Toby

+1

@Toby Nope。我的答案仍然适用。 – Miral