单选按钮

单选按钮在安装中也很常见,例如同一个程序可以选择安装不同的性质的功能,例如选择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. Unity 游戏框架搭建 2019 (二十九) 方法所在类命名问题诞生的原因

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

  6. Android入门(十九)WebView

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

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

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

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

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

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

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

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

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

随机推荐

  1. golang锁记

    golang中有两个锁实现 atomic的CAS实现锁 首先是inter cpu,熟悉汇编的人都知道,inter指令集有个lock,如果某个指令集前面加个lock,那么在多核状态下,某个核执行到这个前 ...

  2. C++中多线程与Singleton的那些事儿

    前言 前段时间在网上看到了个的面试题,大概意思是如何在不使用锁和C++11的情况下,用C++实现线程安全的Singleton. 看到这个题目后,第一个想法就是用Scott Meyer在<Effe ...

  3. JAVA版数据库主键ID生成器

    import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public clas ...

  4. AC日记——[ZJOI2015]幻想乡战略游戏 洛谷 P3345

    [ZJOI2015]幻想乡战略游戏 思路: 树剖暴力转移: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1 ...

  5. websocket小荔枝

    关于websocket原理和好处请参考百度,这里只是代码. var ws = new WebSocket('ws://echo.websocket.org/'); ws.onopen = functi ...

  6. schtasks命令

    1.创建任务 在每天的22.44定时执行一次. schtasks /create /tn : 在特定时间运行一次. schtasks /create /tn : /sd // 2.运行一次任务 创建任 ...

  7. 在Pygtk和Glade使用Gtkbuilder

    最近开始学习python的GUI,选择了Pygtk,试着用Glade设计界面,项目文件采用Gtkbuilder格式,网上的教程大部分是使用Libglade,所以用xml方式读取.glade文件: wT ...

  8. [转载]开发 Spring 自定义视图和视图解析器

    原文出处 http://www.ibm.com/developerworks/cn/java/j-lo-springview/ 概述 Spring 3.0 默认包含了多种视图和视图解析器,比如 JSP ...

  9. 洛谷——P1292 倒酒

    P1292 倒酒 题目描述 Winy是一家酒吧的老板,他的酒吧提供两种体积的啤酒,a ml和b ml,分别使用容积为a ml和b ml的酒杯来装载. 酒吧的生意并不好.Winy发现酒鬼们都非常穷.有时 ...

  10. 2017 Hackatari Codeathon B. 2Trees(深搜)(想法)

    B. 2Trees time limit per test 0.75 seconds memory limit per test 256 megabytes input standard input ...