我想将SelectDir页面与我的设置中的“组件”页面交换。
我找到了一个解决方案,其他页面的内容被分配到当前页面。
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 :(得分:5)
绝对没有办法安全地交换任何内置页面的顺序。 (通常,人们问的唯一一次是他们试图复制不同安装系统的流程。放松并放手; Inno的工作方式不同,接受它而不是与之作斗争。)
话虽如此,通过将页面中的一个或另一个重新创建为自定义页面,可以给出交换页面的外观。但是,通过执行此操作,您将丧失与该页面关联的所有内置功能 - 例如。如果你替换组件页面然后你不能使用[组件]部分或参数,如果你替换目录页面,那么你不能使用{app}(甚至在那些隐式使用它的地方,例如UninstallFilesDir)。 / p>
如果你愿意花费大量的时间和精力(尤其是测试),那么就可以做到。但结果一切都变得更糟 - 所以通常你最好不要这样做。
答案 1 :(得分:0)
补充米拉尔所说的:
[Setup]
DisableDirPage=yes // disable the built-in page
[Code]
var
ApacheDirPage: TInputDirWizardPage;
ApacheDir: AnsiString;
procedure InitializeWizard;
begin
{ Create the custom wizard pages }
ApacheDirPage :=
CreateInputDirPage( wpSelectComponents, // display AFTER select Type/Components page
'Select Apache Directory',
'Select the Apache x.x Directory' + #13#10 + '(the one that contains the BIN folder)',
'Select the Apache directory, then click Next.',
False, '' );
ApacheDirPage.Add( '');
ApacheDirPage.Values[0] := csApacheLocation;
end;