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

单选按钮

单选按钮在安装中也很常见,例如同一个程序可以选择安装不同的性质的功能,例如选择32位或者64位等,两者是排他性的,因此可以通过单选按钮(RadioButton)来实现,在同一个容器中放置的单选按钮是自动带有排他性的,Pascal脚本中单选按钮的定义如下:

TRadioButton = class(TButtonControl)

property Alignment: TAlignment; read write;

property Caption: String; read write;

property Checked: Boolean; read write;

property Color: TColor; read write;

property Font: TFont; read write;

property OnClick: TNotifyEvent; read write;

property OnDblClick: TNotifyEvent; read write;

end;

其继承关系如下图:

可见和按钮的层次模型是一样的,事实上,RadioButton和Button并没有太大的区别。唯一的区别是单选按钮的排他性。

下面的代码将在自定义向导页上添加一个文本框和两个单选按钮:

[setup]

AppName=Test

AppVerName=TEST

DefaultDirName="E:\TEST"

AppVersion=1.0

[files]

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

[code]

var

myPage:TwizardPage;

radio1,radio2:TRadioButton;

lbl:TLabel;

font:TFont;

{radio1的事件响应过程}

procedure ClickRadio1(Sender: TObject);

begin

lbl.Font.Color:=clRed;

end;

{radio2的事件响应过程}

procedure ClickRadio2(Sender: TObject);

begin

lbl.Font.Color:=clBlue;

end;

procedure InitializeWizard();

begin

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

lbl:=TLabel.Create(myPage);

lbl.Parent:=myPage.Surface;

lbl.Caption:='改变单选按钮的选项,我就会变色';

radio1:=TRadioButton.Create(myPage);

radio1.Parent:=myPage.Surface;

radio1.Caption:='红色';

radio1.Top:=lbl.Top+20;

font:=TFont.Create();

font.Color:=clRed;

radio1.Font:=font;

radio1.OnClick:=@ClickRadio1;

radio2:=TRadioButton.Create(myPage);

radio2.Parent:=myPage.Surface;

radio2.Caption:='蓝色';

radio2.Top:=radio1.Top+20;

font.Color:=clBlue;

radio2.Font:=font;

radio2.OnClick:=@ClickRadio2;

end;

该段代码中重点是单选按钮的OnClick事件,该属性所指向的过程决定了单选按钮被点击后的行为,安装文件运行到自定义页面后效果如下:

或许有人会问,如何在有多组不同的选项中做出选择呢?例如一边选择颜色,一边选择字体大小?对于这个问题,传统上Delphi是通过添加控件类TGroupBox来实现的,但是这个类在Pascal脚本是不支持的,所以Delphi中的方法行不通。虽然传统方法不行,并不代表Inno就无能为力了,最简单的方法就是创建两个页面,一个页面处理一种选项,另一个页面处理另一种选项(因此这里用前面的例子并不太好,主要是用来阐述单选按钮的使用),等用户都选完了之后,再统一执行。另外一种方法是使用其他控件,例如列表框(ListBox)。

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

  1. “全栈2019”Java第七十九章:类中可以嵌套接口吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. Inno Setup入门(九)——修改安装过程中的文字显示

    前面说到过可以使用不用的语言文件实现不同的显示方式,方便与国际接轨,事实上即使没有语言文件也可以实现修改.[Messages]段用于定义安装程序和卸载程序中显示的消息.一般不需要创建 [Message ...

  3. Inno Setup入门(九)——修改安装过程中的文字显示

    前面说到过可以使用不用的语言文件实现不同的显示方式,方便与国际接轨,事实上即使没有语言文件也可以实现修改.[Messages] 段用于定义安装程序和卸载程序中显示的消息.一般不需要创建 [Messag ...

  4. (转)Inno Setup入门(九)——修改安装过程中的文字显示

    本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250837 前面说到过可以使用不用的语言文件实现不同的显示方式,方 ...

  5. Kinect for Windows SDK开发入门(十九):Kinect Fusion

        Kinect for Windows SDK1.7中引入了Kinect Fusion功能.在1.8的SDK中对该功能进行了改进和强化,Kinect Fusion能够使得我们使用Kinect f ...

  6. Android入门(十九)WebView

    原文链接:http://www.orlion.ga/676/ WebView可以在自己的应用程序中嵌入一个浏览器来展示网页. 创建一个项目WebViewDemo,修改activity_main.xml ...

  7. [WebGL入门]十九,遮挡剔除和深度測试

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

  8. Unity 游戏框架搭建 2019 (二十九) 方法所在类命名问题诞生的原因

    我们在整理阶段解决了一些意外的问题.但是这些问题仅仅只是被解决而已,我们并没有去思考过这些问题是为什么产生的?以及在以后我们如何去避免这些问题的产生? 方法所在类的命名问题,最后我们通过方法分类解决了 ...

  9. day29 二十九、元类、单例

    一.eval.exec内置函数 1.eval函数 eval内置函数的使用场景: ①执行字符串会得到相应的执行结果 ②一般用于类型转换得到dict.list.tuple等 2.exec函数 exec应用 ...

  10. java 基本语法(十九)Optional类的使用

    java.util.Optional类1.理解:为了解决java中的空指针问题而生!Optional<T> 类(java.util.Optional) 是一个容器类,它可以保存类型T的值, ...

随机推荐

  1. 【51nod-1009】数字1的数量

    给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数.   例如:n = 12,包含了5个1.1,10,12共包含3个1,11包含2个1,总共5个1. Input 输入N( ...

  2. hdu 6038 Function

    Function Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total ...

  3. springcloud- FeginClient 调用统一拦截添加请求头 RequestInterceptor ,被调用服务获取请求头

    使用场景: 在springcloud中通过Fegin调用远端RestApi的时候,经常需要传递一些参数信息到被调用服务中去,比如从A服务调用B服务的时候, 需要将当前用户信息传递到B调用的服务中去,我 ...

  4. 学习笔记之AutoLayout

    Align:用来添加对齐约束. Pin:添加标准约束,比如相对于其他视图的大小和位置. Reslove Auto Layout Issues:可以让Xcode 自动生成约束,或者基于约束把子视图的边框 ...

  5. SQL语句中各个部分的执行顺序(转)

    原文链接:http://www.tuicool.com/articles/fERNv2 写在前面的话:有时不理解SQL语句各个部分执行顺序,导致理解上出现偏差,或者是书写SQL语句时随心所欲,所以有必 ...

  6. New Concept English there (1)Typing speed exercise

    Today,I start learn new concept english there,Mainly for listening practice and typing speed exercis ...

  7. .net 枚举(Enum)使用总结

    在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,性别只有男跟女等等.如果把这些量说明为整型.字符型或其它类型显然是不妥当的.为此,C#提供了一种称为“ ...

  8. about system (pause) in cpp

    Which is best way to pause the console in C++ programs? using cin.get() or using system("pause& ...

  9. iOS开发之如何应对苹果app的ipv6时代?

    WWDC2015苹果宣布在ios9支持纯IPv6的网络服务,并且要求2016年提交到app store的应用必须兼容纯IPv6的网络,要求适配的系统版本是ios9以上(包括ios9). 一 背景介绍 ...

  10. 从零开始编写深度学习库(五)PoolingLayer 网络层CPU编写

    记录:编写卷积层和池化层,比较需要注意的细节就是边界问题,还有另外一个就是重叠池化的情况,这两个小细节比较重要,边界问题pad在反向求导的时候,由于tensorflow是没有计算的,另外一个比较烦人的 ...