Setup安装程序创建自定义页面
使用Inno Setup 编译器创建新页面
1、创建一个属于自己的页面
①、定义创建页面的函数
procedure CreateTheWizardPages;
var //定义不同控件的变量
RadioButton : TRadioButton;
Button, FormButton: TNewButton;
Panel: TPanel;
CheckBox: TNewCheckBox;
PasswordEdit: TPasswordEdit;
Memo: TNewMemo;
ComboBox: TNewComboBox;
ListBox: TNewListBox;
StaticText, ProgressBarLabel: TNewStaticText;
ProgressBar, ProgressBar2, ProgressBar3: TNewProgressBar;
CheckListBox, CheckListBox2: TNewCheckListBox;
FolderTreeView: TFolderTreeView;
BitmapImage, BitmapImage2, BitmapImage3: TBitmapImage;
BitmapFileName: String;
RichEditViewer: TRichEditViewer;
FileName: String;
begin
Page1 := CreateCustomPage(wpWelcome, 'Welcome to the Matbook Setup Wizard', 'Specity either host name/ipaddress of license server(s) or node-locked license file.'); //创建用户的页面
RadioButton11 :=TNewRadioButton.Create(Page1); //创建一个按钮,设置大小位置
RadioButton11.Width := Page1.SurfaceWidth;
RadioButton11.Height := ScaleY(30);
RadioButton11.Parent := Page1.Surface;
RadioButton11.Caption := 'Server License';
RadioButton11.OnClick :[email protected]; //调用按钮响应函数ClickRadio1
StaticText := TNewStaticText.Create(Page1); //创建一个静态文本框,设置大小
StaticText.Top := RadioButton11.Top + RadioButton11.Height + ScaleY(8);
StaticText.Left := RadioButton11.Left + ScaleY(20);
StaticText.Caption := 'License Path:';
StaticText.AutoSize := True;
StaticText.Parent := Page1.Surface;
Edit1 := TNewEdit.Create(Page1); //创建一个编辑框
Edit1.Top := StaticText.Top - ScaleY(2);
Edit1.Width := Page1.SurfaceWidth div 2 - ScaleX(8);
Edit1.Left := StaticText.Left + ScaleX(130);
Edit1.Text := '';
//Edit1.ReadOnly := True; //只可读
//Edit1.HideSelection :=False;
Edit1.Parent := Page1.Surface;
end;
procedure ClickRadio2(Sender: TObject); //函数要放在创建页面函数前面
begin
Edit1.Color := clSilver;
Edit1.ReadOnly :=True;
Edit.Color :=clWhite;
Edit.ReadOnly := False;
end;
②、在InitializeSetup()中调用你刚才创建的函数
这样在安装程序初始化时调用,打开后就是你自己定义的页面。
procedure InitializeWizard();
begin
CreateTheWizardPages;
end;
③、在安装完成后想要输出数据到文件中
在CurStepChanged(CurStep: TSetupStep);中输出数据到文件中。
该过程提供用户完成预安装和安装之后的任务,更多的是提供了安装过程中的状态。参数CurStep=ssInstall是在程序实际安装前(所有的路径等都配置好之后准备写入文件钱),CurStep=ssPostInstall是实际安装完成后,而CurStep=ssDone是在一次成功的安装完成后、安装程序终止前(即点击finish按钮后执行)。
记得将所要输出的编辑框等定义为全局变量。
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
begin
SetIniString('Center','CATIA',Edit2.text,ExpandConstant('{app}/test.ini'));
end;
end;
④、创建一个可以自己选择目录的页面
创建页面函数同①,只需将choose按钮的按钮响应函数更改。
procedure ButtonOnChoose(Sender: TObject);
var dir;
begin
dir :='C:\\Program Files (x86)'; //设置默认路径
BrowseForFolder('Browse Folder', dir, True); //浏览文件夹路径
Edit2.text := dir; //将Edit2的文本改为选择过后的路径
end;
2、Inno Setup支持以下函数和过程。
function InitializeSetup(): Boolean;
该函数在安装程序初始化时调用,返回False 将中断安装,True则继续安装,测试代码如下:
function InitializeSetup(): Boolean; begin Result := MsgBox('安装程序正在初始化,你确定要安装吗?', mbConfirmation, MB_YESNO) = idYes; if Result = False then MsgBox('你放弃了安装,程序直接退出', mbInformation, MB_OK); end; |
procedure InitializeWizard();
该过程在开始的时候改变向导或者向导页,不要指望使用InitializeSetup函数实现改变向导页的功能,因为InitializeSetup函数触发时向导窗口并不存在。
procedure DeinitializeSetup();
该过程在安装终止时被调用,注意及时在用户没有安装任何文件之前退出也会被调用。测试代码如下:
procedure DeinitializeSetup(); begin msgbox('DeinitializeSetup is called',mbInformation, MB_OK); end; |
procedure CurStepChanged(CurStep: TSetupStep);
该过程提供用户完成预安装和安装之后的任务,更多的是提供了安装过程中的状态。参数CurStep=ssInstall是在程序实际安装前(所有的路径等都配置好之后准备写入文件钱),CurStep=ssPostInstall是实际安装完成后,而CurStep=ssDone是在一次成功的安装完成后、安装程序终止前(即点击finish按钮后执行)。测试代码如下:
procedure CurStepChanged(CurStep: TSetupStep); begin if CurStep=ssinstall then MsgBox('准备写入文件了', mbInformation, MB_OK); if CurStep=ssPostinstall then MsgBox('文件复制完成', mbInformation, MB_OK); if CurStep=ssDone then MsgBox('软件成功安装', mbInformation, MB_OK); end; |
function NextButtonClick(CurPageID: Integer): Boolean;
当用户单击下一步按钮时调用。如果返回True,向导将移到下一页;如果返回False,它仍保留在当前页。测试代码如下:
function NextButtonClick(CurPageID: Integer): Boolean; begin Result := MsgBox('到下一页去吗?', mbConfirmation, MB_YESNO) = idYes; end; |
function BackButtonClick(CurPageID: Integer): Boolean;
和前面的NextButtonClick函数相反,当用户单击返回按钮时调用。如果返回True,向导将移到前;如果返回False,它仍保留在当前页,测试代码略。
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
当用户单击取消按钮或单击窗口中的关闭按钮时调用。Cancel参数指定取消进程是否该发生;默认为True。Confirm参数指定是否显示“退出安装程序吗?”的消息框;默认为True。如果Cancel设为False,那么Confirm的值将被忽略。测试代码如下:
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); begin cancel:=False; end; |
function ShouldSkipPage(PageID: Integer): Boolean;
向导调用这个事件函数确定是否在所有页或不在一个特殊页 (用PageID指定) 显示。如果返回True,将跳过该页;如果你返回False,该页被显示。注意:这个事件函数不被wpWelcome、wpPreparing和wpInstalling 页调用,还有安装程序已经确定要跳过的页也不会调用 (例如,没有包含组件安装程序的wpSelectComponents)。测试代码如下:
function ShouldSkipPage(PageID: Integer): Boolean; begin if PageID=wpSelectDir then Result:=True; end; |
本段代码将会使得安装程序跳过选择安装目录的页面
可用的PageID有: wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpInfoAfter, wpFinished
procedure CurPageChanged(CurPageID: Integer);
在新向导页 (由CurPageID 指定)显示后调用。测试代码如下:
procedure CurPageChanged(CurPageID: Integer); begin Msgbox('ha,new page!',mbInformation, MB_OK); end; |
该段代码将会导致每出现一个新的一面的时候就会弹出一个消息框。
代码下载:https://download.csdn.net/download/yuer_xiao/10608616