本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250955

nno setup脚本能够支持许多的类,这些类使得安装程序的功能得到很大的加强,通过对这些类的使用,将会创建出许多让人惊奇的安装程序,下面开始类的学习。

创建自定义向导页

自定义向导页需要在InitializeWizard事件函数中创建,通过使用CreateCustomPage函数创建一个空的页面,或者使用CreateInput...Page和CreateOutput...Page等函数创建预建的页面,例如CreateInputDirPage、CreateInputFilePage、CreateOutputProgressPage等函数。当创建好了页面之后,就可以在页面上添加控件了,可以手动创建控件,也可以使用预建页面的特殊函数。大部分的Create...Page函数的第一个参数通常都是Page ID,该参数指定了新创建的页面被放在哪个已存在的页面后面。有几种方法获取一个已经存在页面的Page ID,例如用户创建的页面有一个属性是ID,该属性为一个只读的整型,其值即为页面的ID,内建的向导页有预定的ID,可用的名称如下表:

wpWelcome

wpLicense

wpPassword

wpInfoBefore

wpUserInfo

wpSelectDir

wpSelectComponents

wpSelectProgramGroup

wpSelectTasks

wpReady

wpPreparing

wpInstalling

wpInfoAfter

wpFinished

   

当自定义页面创建完成后,安装程序将会显示,并会像对待预建页面一样处理他们,例如调用所有页面都关联的NextButtonClick和ShouldSkipPage事件函数。

CreateCustomPage函数原型如下:

function CreateCustomPage(const AfterID: Integer; const ACaption, ADescription: String): TwizardPage

第一个参数和前面的Page ID是一样的,可以使用上述表中任何一个作为参数,第二个参数Acaption指定页面的标题,该标题将会显示在页面上方,第三个参数则是对该页面的描述。函数的返回值是一个TwizardPage类,根据Inno Setup的帮助文档,该类的原型如下:

TWizardPage = class(TComponent)

property ID: Integer; read;

property Caption: String; read write;

property Description: String; read write;

property Surface: TNewNotebookPage; read write;

property SurfaceHeight: Integer; read write;

property SurfaceWidth: Integer; read write;

property OnActivate: TWizardPageNotifyEvent; read write;

property OnBackButtonClick: TWizardPageButtonEvent; read write;

property OnCancelButtonClick: TWizardPageCancelEvent; read write;

property OnNextButtonClick: TWizardPageButtonEvent; read write;

property OnShouldSkipPage: TWizardPageShouldSkipEvent; read write;

end;

TWizardPageNotifyEvent = procedure(Sender: TWizardPage);

TWizardPageButtonEvent = function(Sender: TWizardPage): Boolean;

TWizardPageCancelEvent = procedure(Sender: TWizardPage; var ACancel, AConfirm: Boolean);

TWizardPageShouldSkipEvent = function(Sender: TWizardPage): Boolean;

下面的程序将会创建一个最简单的自定义页面,并显示在欢迎页面后面:

[setup]

AppName=Test

AppVerName=TEST

DefaultDirName="E:\TEST"

AppVersion=1.0

[files]

Source: "F:\desktop\test\ipmsg.exe";Flags:dontcopy

[code]

procedure InitializeWizard();

begin

CreateCustomPage(wpWelcome, '标题:自定义页面', '描述:这是我的自定义页面');

end;

运行后,当从Welcome页面点击Next按钮后,将会出现下面的页面:

另外,我们也可是测试一下CreateCustomPage的返回值TwizardPage类的属性。例如下面这个例子将测试一下ID属性和NextButtonClick属性:

[code]

var

myPage:TwizardPage;

myPageID:Integer;

function NextButtonClick(CurPageID:Integer): Boolean;

begin

if CurPageID=myPageID then

begin

if MsgBox('确定要离开本页面吗?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then result:=true;

end

else

result:=true;

end;

procedure InitializeWizard();

begin

myPage:=CreateCustomPage(wpWelcome, '标题:自定义页面', '描述:这是我的自定义页面');

myPageID:=myPage.ID;

end;

运行该程序,当到达自定义页面并单击Next的后,将会出现如下的确认对话框:

选择“是”将到下一页,“否”将留在本页。

虽然上面的页面没有任何空间,但是,在成功创建好页面之后,往上面添加各种控件也不是将会变得简单,这就像是把地基打好了之后,盖房子就方便多了。

(转)Inno Setup入门(十五)——Inno Setup类参考(1)的更多相关文章

  1. m_Orchestrate learning system---二十五、复制类的时候最容易出现的错误是什么

    m_Orchestrate learning system---二十五.复制类的时候最容易出现的错误是什么 一.总结 一句话总结:命名空间错误导致Analyze类虽然继承了Base类,但是没有执行里面 ...

  2. java十五个常用类学习及方法举例

    <code class="language-java">import java.util.Scanner; import java.util.Properties; i ...

  3. Inno Setup入门(五)——添加readme文件

    这个实现起来很简单,就是在[files]段中的某个预先作为readme的文件后面添加标志位isreadme: [setup] ;全局设置,本段必须 AppName=Test AppVerName=TE ...

  4. Inno Setup入门(五)——添加readme文件

    这个实现起来很简单,就是在[files]段中的某个预先作为readme的文件后面添加标志位isreadme: [setup] ;全局设置,本段必须 AppName=Test AppVerName=TE ...

  5. (转)Inno Setup入门(五)——添加readme文件

    本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250771 这个实现起来很简单,就是在[files]段中的某个预先 ...

  6. Android入门(十五)通知

    原文链接:http://www.orlion.ga/663/ 1.通知的基本用法 创建通知的步骤,首先需要一个NotificationManager来对通知进行管理,可以调用Context的getSy ...

  7. [WebGL入门]十五,为多边形涂抹颜色(顶点颜色的指定)

    注:文章译自http://wgld.org/.原作者杉本雅広(doxas),文章中假设有我的额外说明,我会加上[lufy:].另外.鄙人webgl研究还不够深入.一些专业词语.假设翻译有误.欢迎大家指 ...

  8. Spring入门(十五):使用Spring JDBC操作数据库

    在本系列的之前博客中,我们从没有讲解过操作数据库的方法,但是在实际的工作中,几乎所有的系统都离不开数据的持久化,所以掌握操作数据库的使用方法就非常重要. 在Spring中,操作数据库有很多种方法,我们 ...

  9. Python学习笔记(十五):类基础

    以Mark Lutz著的<Python学习手册>为教程,每天花1个小时左右时间学习,争取两周完成. --- 写在前面的话 2013-7-24 23:59 学习笔记 1,Python中的大多 ...

  10. 第十五章-class类文件结构

    参考博文: (1)关于class的签名Signature (2)关于访问标识 (3)关于Class中的Signature属性 (4)附录1 常量池解析 (5)附录2 方法解析 (6)Class文件结构 ...

随机推荐

  1. Algorithm3: 获得一个int数中二进制位为1 的个数

    获得一个int数中二进制位为1 的个数   int NumberOfOne(int n){                  int count = 0;                  unsig ...

  2. Easy UI DataGrid 与 分页

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs& ...

  3. iOS笔记之常用工具

    CocoaPods: 类库管理工具,使用教程见http://www.devtang.com/blog/2014/05/25/use-cocoapod-to-manage-ios-lib-depende ...

  4. 移动设备web开发插件iScroll的使用详解

    地址:http://blog.nnnv.cn/index.php/archives/65

  5. jenkins执行xctool命令出现command not found问题解决方法

    1.控制台执行 echo $PATH 把输出的这句话复制 2.jenkins->系统管理->系统设置 勾选Environment variables,添加键值,键:PATH,值:刚才复制的 ...

  6. 哈工大LTP语言分析:分词、词性标注、句法分析等

    1. LTP介绍和安装 LTP语言云官网  在线演示 | 语言云(语言技术平台云 LTP-Cloud) 安装LTP的python接口包 $ sudo pip install pyltp 模型文件下载 ...

  7. pdf 数据流解析

     根据这个解释可以认为,/CCITTFaxDecode应该指单色图像(每个像素占8位?还是1位),FlateDecode 指文字或者矢量图片(png) 参考论文:http://www.doc88.co ...

  8. linux中的网络基础

    ifconfig -a 查看所有网口ifconfig eth 查看具体网口 ifup ethoifdown etho 网卡配置文件/etc/sysconfig/networkk-scripts/ifc ...

  9. apk系统签名命令

    java -jar signapk.jar platform.x509.pem platform.pk8 D:/ClockSetting.apk D:/ClockSettingSigned.apk 需 ...

  10. 细说C语言的优先级和结合性

    Table0. 为什么要掌握优先级1. 优先级1.1 优先级图表1.2 运算符实例1.3 优先级顺口溜2. 结合性3. 参考资料 写代码的时候,常会翻看的一个表就是“c语言运算符优先级表”.c的运算符 ...