4

セットアップでSelectDirページをComponentsページと交換したいと思います。

他のページのコンテンツが現在のページに割り当てられる解決策を見つけました。

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の前に表示され、これらのメッセージボックスに問題はありません。

4

2 に答える 2

7

組み込みページの順序を安全に入れ替える方法は絶対にありません。(そして通常、人々が尋ねるのは、別のインストールシステムのフローを複製しようとしているときだけです。リラックスして手放してください。Innoの動作は異なり、戦うのではなく受け入れるのです。)

そうは言っても、どちらか一方をカスタムページとして再作成することで、ページを入れ替えたように見せることができます。ただし、これを行うと、そのページに関連付けられているすべての組み込み機能が失われます。コンポーネントページを置き換えると、[Components]セクションまたはパラメータを使用できなくなり、ディレクトリページを置き換えると、{app}を使用できなくなります(UninstallFilesDirなど、暗黙的に使用する場所でも)。

多くの時間と労力(特にテスト)を費やすことをいとわないのであれば、それを行うことができます。しかし、結果としてすべてが悪化します。したがって、通常はそうしないほうがよいでしょう。

于 2012-11-14T20:13:37.277 に答える
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;
于 2021-07-21T22:10:51.670 に答える