Inno Setup:Creating custom wizard page

本文介绍了如何在程序安装程序中创建自定义向导页面。通过Inno Setup,您可以在安装过程中显示自己的页面。示例代码展示了如何在InitializeWizard函数中创建自定义页面,包括定义变量、创建控件,以及处理Next按钮点击事件。此外,还提到了ISTool这样的自动化工具,可以帮助简化此类工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Today we will describe a process of creating custom wizard page in program installer. Though Inno Setup suggests pages which will cover your needs in most of the cases, sometimes you will need to create your own page during installation process.
Custom page can be created in [Code] section in InitializeWizard function:

[Code]
procedure InitializeWizard();
begin
  authentication_form_CreatePage(wpLicense);
end;

wpLicense argument means that our custom page will be displayed after standard license page during installation process. All standard wizard pages have their predefined IDs. For instance, welcome page have ID equal to wpWelcome.
Now let’s look at the code which is creating custom page. First we need to define some variables which will be used:

var
  Label1: TLabel;
  Label2: TLabel;
  Label3: TLabel;
  Label4: TLabel;
  ServerNameEdit: TEdit;
  WindowsRadioButton: TRadioButton;
  SqlRadioButton: TRadioButton;
  UserEdit: TEdit;
  PasswordEdit: TEdit;

And this is the function itself. In it you will need to create all the necessary controls like labels, buttons, etc.:

function authentication_form_CreatePage(PreviousPageId: Integer): Integer;
var
  Page: TWizardPage;
begin
  Page := CreateCustomPage(
    PreviousPageId,
    ExpandConstant('{cm:authentication_form_Caption}'),
    ExpandConstant('{cm:authentication_form_Description}')
  );

  Label1 := TLabel.Create(Page);
  with Label1 do
  begin
    Parent := Page.Surface;
    Caption := ExpandConstant('{cm:authentication_form_Label1_Caption0}');
    Left := ScaleX(16);
    Top := ScaleY(0);
    Width := ScaleX(84);
    Height := ScaleY(17);
  end;
 
  Label2 := TLabel.Create(Page);
  with Label2 do
  begin
    Parent := Page.Surface;
    Caption := ExpandConstant('{cm: authentication_form_Label2_Caption0}');
    Left := ScaleX(16);
    Top := ScaleY(56);
    Width := ScaleX(300);
    Height := ScaleY(17);
  end;
 
  Label3 := TLabel.Create(Page);
  with Label3 do
  begin
    Parent := Page.Surface;
    Caption := ExpandConstant('{cm: authentication_form_Label3_Caption0}');
    Left := ScaleX(56);
    Top := ScaleY(136);
    Width := ScaleX(70);
    Height := ScaleY(17);
  end;
 
  Label4 := TLabel.Create(Page);
  with Label4 do
  begin
    Parent := Page.Surface;
    Caption := ExpandConstant('{cm: authentication_form_Label4_Caption0}');
    Left := ScaleX(56);
    Top := ScaleY(168);
    Width := ScaleX(63);
    Height := ScaleY(17);
  end;
 
  ServerNameEdit := TEdit.Create(Page);
  with ServerNameEdit do
  begin
    Parent := Page.Surface;
    Left := ScaleX(16);
    Top := ScaleY(24);
    Width := ScaleX(257);
    Height := ScaleY(25);
    TabOrder := 0;
    Text := ExpandConstant('{cm: authentication_form_ServerNameEdit_Text0}');
  end;
 
  WindowsRadioButton := TRadioButton.Create(Page);
  with WindowsRadioButton do
  begin
    Parent := Page.Surface;
    Caption := ExpandConstant('{cm: authentication_form_WindowsRadioButton_Caption0}');
    Left := ScaleX(16);
    Top := ScaleY(88);
    Width := ScaleX(225);
    Height := ScaleY(17);
    Checked := True;
    TabOrder := 1;
    TabStop := True;
  end;
 
  SqlRadioButton := TRadioButton.Create(Page);
  with SqlRadioButton do
  begin
    Parent := Page.Surface;
    Caption := ExpandConstant('{cm: authentication_form_SqlRadioButton_Caption0}');
    Left := ScaleX(16);
    Top := ScaleY(112);
    Width := ScaleX(193);
    Height := ScaleY(17);
    TabOrder := 2;
  end;
 
  UserEdit := TEdit.Create(Page);
  with UserEdit do
  begin
    Parent := Page.Surface;
    Left := ScaleX(136);
    Top := ScaleY(136);
    Width := ScaleX(121);
    Height := ScaleY(25);
    TabOrder := 3;
    Text := ExpandConstant('{cm: authentication_form_UserEdit_Text0}');
  end;
 
  PasswordEdit := TEdit.Create(Page);
  with PasswordEdit do
  begin
    Parent := Page.Surface;
    Left := ScaleX(136);
    Top := ScaleY(168);
    Width := ScaleX(121);
    Height := ScaleY(25);
    TabOrder := 4;
    PasswordChar := '*';
    Text := ExpandConstant('{cm: authentication_form_PasswordEdit_Text0}');
  end;

  with Page do
  begin
    OnNextButtonClick := @authentication_form_NextButtonClick;
  end;

  Result := Page.ID;
end;

Finally we will need handler for Next button click:

function authentication_form_NextButtonClick(Page: TWizardPage): Boolean;
begin
  Result := True;
  if ServerNameEdit.Text <> ''   then
    begin
       if SqlRadioButton.Checked then
       begin
          if UserEdit.Text = ''  then
          begin
             MsgBox('You should enter user name', mbError, MB_OK);
             Result := False;
          end
          else
          begin
            if PasswordEdit.Text = '' then
            begin
               MsgBox('You should enter password', mbError, MB_OK);
               Result := False;
            end
          end
       end
    end
    else
    begin
    MsgBox('You should enter path to SQL Server Database', mbError, MB_OK);
    Result := False;
    end;
end;

The text labels and messages need to be defined in special section:

[CustomMessages]
authentication_form_Caption=SQL Server Database Setup
authentication_form_Description=Choose SQL Server database you will be using (ask your administrator about its parameters)
authentication_form_Label1_Caption0=Server Name:
authentication_form_Label2_Caption0=Enter Path to SQL Server (e.g. .\SQLEXPRESS; DEVSERVER)
authentication_form_Label3_Caption0=User name:
authentication_form_Label4_Caption0=Password:
authentication_form_ServerNameEdit_Text0=
authentication_form_WindowsRadioButton_Caption0=Use Windows Authentication
authentication_form_SqlRadioButton_Caption0=Use SQL Authentication
authentication_form_UserEdit_Text0=
authentication_form_PasswordEdit_Text0=

After such a long work you want to see probably what we will receive at the end? Such a window:
As you can see to receive this nice window you have to write a large amount of code and this is the case where some automated tool like ISTool can be helpful for you.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值