Search code examples
inno-setuppascalscript

Inno Setup remove/hide/disable the NextButton on a custom wizard page


I would like to disable the "Next" button from my custom wizard page. The fact is that I've no issue to change the caption of it for example, but if I set the NextButton.Enabled to False, Inno Setup show me the Welcome page instead of my Custom Page. Any Idea?

procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.NextButton.Caption := 'test'; { Works }
  WizardForm.NextButton.Enabled := false ; { delete my custom page }
  WizardForm.CancelButton.Caption := 'Finish';  
end;

procedure CreateTheWizardPages;
var
  Page: TWizardPage;
  TestConnectivityButton: TButton;
begin
  Page := CreateCustomPage(wpWelcome, 'Connectivity Test', '');
  CurPageChanged(Page.ID);
  TestConnectivityButton := TButton.Create(Page);
  TestConnectivityButton.Width := ScaleX(100);
  TestConnectivityButton.Height := ScaleY(30);
  TestConnectivityButton.Caption := CustomMessage('TestConnectivityAccessButtonLabel');
  TestConnectivityButton.OnClick := @TestConnectivityWindow;
  TestConnectivityButton.Parent := Page.Surface; 
 end;

procedure InitializeWizard;
begin
  CreateTheWizardPages;
end;

Solution

  • You have to make the changes, when you enter your custom page only – When CurPageChanged event function is called with CurPageID equal to Page.ID.

    And you cannot call CurPageChanged yourself!

    var
      Page: TWizardPage;
    
    procedure CurPageChanged(CurPageID: Integer);
    begin
      if CurPageID = Page.ID then
      begin
        WizardForm.NextButton.Caption := 'Test';
        WizardForm.NextButton.Enabled := False ;
        WizardForm.CancelButton.Caption := 'Finish';  
      end;
    end;
    
    procedure CreateTheWizardPages;
    var
      TestConnectivityButton: TButton;
    begin
      Page := CreateCustomPage(wpWelcome, 'Connectivity Test', '');
      TestConnectivityButton := TButton.Create(Page);
      TestConnectivityButton.Width := ScaleX(100);
      TestConnectivityButton.Height := ScaleY(30);
      TestConnectivityButton.Caption :=
        CustomMessage('TestConnectivityAccessButtonLabel');
      TestConnectivityButton.OnClick := @TestConnectivityWindow;
      TestConnectivityButton.Parent := Page.Surface; 
    end;
    

    enter image description here


    Another option is using Page.OnActivate event instead of CurPageChanged event function.