C++ Builder 初学问与答(三)

原创 2003年07月04日 09:25:00

3. 按钮类组件

 

21)问:在进行Windows程序界面设计中,经常会用到按钮,在C++Builder中,按钮一定是通过按钮组件来实现的吗?

答:是的,并且C++Builder的按钮类组件十分丰富。BCB提供了两类按钮类组件:一类是执行类按钮,另一类是信息类按钮。所谓执行类按钮是指它们通常用来启动程序运行的,比如按钮、位图按钮、加速按钮。而信息类按钮一般用来获取信息,包括单选按钮和复选框。灵活地使用各种按钮,不仅可以使程序更加丰富多彩,而且可以提高程序的性能。

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

22)问:那么按钮组件有哪些常用的属性和方法呢?

答:对于按钮组件,Caption属性用来描述按钮的标题,也就是按钮上显示的文本,它与标签组件很相识,我们同样可以在这个属性中为按钮指定快捷键。

Cancel属性值为True时,用户无论何时按下Esc键,都会产生OnClick事件,当窗体上有多个按钮时,Esc键触发TabOrder值最小的那个按钮的OnClick事件。它的缺省值为False

Default属性值为true时,用户无论何时按下Enter键时,都会产生OnClick事件,与Cancel属性不同的是,如果输入焦点正好在一个按钮上,那么会产生这个按钮的OnClick事件。否则,产生TabOrder的值最小的那个按钮的OnClick事件。它的缺省值为True

Hint属性保存着按钮的提示内容,当用户把鼠标光标停留在按钮上时,就会显示提示信息。

ShowHint属性用来确定是否显示提示文本,缺省值为False

按钮常用的事件就是OnClick事件,OnClick事件在鼠标单击按钮时产生,另外,通过快捷键、enter键和Esc键也可以产生OnClick事件,一般情况下,按钮都需要增加OnClick事件处理程序。

 

23)问:那么位图按钮又有什么特点呢?

答:位图按钮BitBtn除了可以像普通按钮那样显示文本外,还可以显示图形,除了具有一般按钮所具有的全部属性外,位图按钮还有一个特有的Kind属性。这个属性用来设定按钮为几种预定义图形按钮风格中的哪一种。这是几种预定义按钮风格。这些做好的按钮如下表:

 

Kind属性值

按钮外观

等价属性设置

bkCustom

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2003-7-21938370.png

缺省值

用来给用户制定

bkOK

CSDN_Dev_Image_2003-7-21938372.png

Caption=”OK”

ModalResult=mrOK

Default=true

bkCancel

CSDN_Dev_Image_2003-7-21938374.png

Caption=”Cancel”

ModalResult=mrCancel

Cancel=true

bkYes

CSDN_Dev_Image_2003-7-21938376.png

Caption=”&Yes”

ModalResult=mrYes

Default=true

bkNo

CSDN_Dev_Image_2003-7-21938378.png

Caption=”&No”

ModalResult=mrNo

Cancel=true

bkHelp

CSDN_Dev_Image_2003-7-219383710.png

Caption=”&Help”

bkClose

CSDN_Dev_Image_2003-7-219383712.png

Caption=”&Close”

bkAbort

CSDN_Dev_Image_2003-7-219383714.png

Caption=”Abort”

ModalResult=mrAbort

bkRetry

CSDN_Dev_Image_2003-7-219383716.png

Caption=”&Retry”

ModalResult=mrRetry

bkIgnore

CSDN_Dev_Image_2003-7-219383718.png

Caption=”&Ignore”

ModalResult=mrIgnore

bkAll

CSDN_Dev_Image_2003-7-219383720.png

Caption=”&All”

ModalResult=mrAll

 

当把Kind的属性值设置为bkCustom时,还可以给位图按钮指定其他的图形,具体的方法是,在对象编辑器中选择Glyph属性,然后单击Value列中的省略号按钮,这时会出现一个图形编辑对话框,要求指定位图的位置。

单击Load按钮,在文件打开对话框中选择一个位图文件就可以了。要注意的是,如果选择的位图太大,位图按钮不会自动调整其尺寸,这时你只能看到一部分的图形。

 

24)问:位图按钮组件的NumGlyph属性有什么作用?

答:属性NumGlyph指出位图按钮使用的位图的数目,当你需要位图按钮使用多个位图分别表示按下,弹起等不同状态时,必须保证这些位图具有相同的尺寸,并且一个接着一个地水平排列着。

C++Builder中,一个位图按钮最多可有四个位图,因此,NumGraph地取值范围只能是14C++Builder将根据位图按钮地状态确定显示哪个位图。

一般来说,当按钮未选中时显示第一个位图。

当按钮不能选择时,显示第二个位图,

当按钮被单击时显示第三个位图,

当用户释放鼠标键时,又会重新显示第一个位图,

当没有希望的位图时,那么所有地状态都使用第一个位图。

 

25)问:快捷按钮有哪几个重要属性?

答:快捷按钮与位图按钮很相似,也可以显示图像,但也有一些不同之处:快捷按钮一般都比较小,缺省大小25*25,基本上都是只显示图像而不显示文字,最大差别是,快捷可以保持在按下的状态,而其它两类按钮不能。快捷按钮一般都是用来制作工具栏按钮,这时要和Panel配合使用。下面来看一下它的重要属性:

AllowAllUp:设置一个组的快捷按钮是否可以全部处于弹起的状态。缺省为false,这时可以用来模拟单选按钮,让同一个组的总有一个按钮处在按下状态。如果一个组中只有一个快捷按钮,把这个属性改为true,这时这个按钮就可以在按下和弹起两个状态之间切换,可以用来模拟一个复选按钮。

Down:表示按钮是否按下,若设为true,则处于按下的状态。

GroupIndex:用来把几个这个属性相同的快捷按钮编为一组,即相同取值的按钮为一组。缺省为0,表示这个按钮不编成组。

26)问:那么单选按钮又有什么特点呢?

答:单选按钮RadioButton是相互排斥的一种选择组件,在一组单选按钮中用户一次只能选取一个单选按钮。

虽然你可以只使用一个单选按钮,但是那样单选按钮也就失去了意义。单选按钮一般都是成组出现的。

单选按钮只有一个比较特殊的属性Checked,它表示按钮是否被选中。缺省情况下,Checked的属性是False,表示按钮未选中。

另外单选按钮也具备Caption属性,这就意味着它也可以通过快捷键来选中。

单选按钮在成组使用时有一些特点需要掌握。当你在同一容器(如:FormPanelGroupBox等)上直接放置单选按钮时,这些单选按钮自成一组,也就是说,无论在容器上放置2个或者几十个单选按钮,它们都是一组的,每次只能选中它们中的某一个。

27)问:如果我想在窗体上放置不止一组按钮,应该怎么办?

答:可以用两种方法。一种是使用组合框(GroupBox),另一种是使用单选按钮分组框(RadioGroup)。

组合框顾名思义就是用来把许多组件组合起来,使窗口变得整齐而有条理,每一组不同的按钮使用一个组合框。在设计时,首先把组合框放在窗体上,然后再把单选按钮放在分组框上。要记住的是,放置次序不能颠倒。一旦把单选按钮放在分组框中,那么这个单选按钮就属于这个组合框了,你无法把它从组合框中移走,如果删除组合框的话,分组框中所有的单选按钮也会被同时删除。

在实际应用中,我们经常使用单选按钮分组框而不是单选按钮。因为单选按钮分组框可以包含多个单选按钮,而它实际上只是一个组件。这比使用分组框和多个单选按钮更直观和简单。

28)问:单选按钮分组框又有哪些特殊的属性呢?

答: 单选按钮分组框有三个属性是比较特殊的:

属性Items是类TStrings的一个对象,这一点与Memo组件中的Lines属性很相似,但是它们的含义不同,Lines属性包含Memo组件中显示的每一行字符串,而Items属性虽然也包含许多字符串,但是每一个字符串代表单选按钮组中的一个单选按钮。

单击Items属性Value列中的省略号按钮,可以打开一个字符串编辑器,然后在这个编辑器中可以输入单选按钮的标题。每个单选按钮占用一行。

Columns属性决定着单选按钮分组框内分栏的数目,默认是1,最多可以有16栏,即16列。

ItemIndex属性为单选分组框中被选中项的序号。-1表示不指向任何一个项。

29)问:复选按钮(CheckBox)有什么作用?

答:复选按钮与单选按钮不同,你可以一次选择多个复选按钮。复选按钮有几个比较重要的属性。

Alignment属性控制复选框标题的位置。

taRightJustify

标题出现在复选框的右边

taLeftJustify

标题出现在复选框的左边

缺省值为taRightJustify

AllowGrayed属性决定复选框是否可以处于灰色的状态,当属性值为True时,复选框有三种状态,选中、未选中、和灰色;当属性值为False时,复选框只有两种状态。缺省值为false

Checked属性确定复选框是否被选中。缺省值为false

要知道复选框是选中状态、未选中状态还是灰色状态。,可以在运行的时候,用程序读取运行时态变量State的值,缺省值为cbUnChecked

虽然复选框之间并不互相排斥,也就是说,直接放置在窗体上的每一个复选按钮相互之间都不干扰,但是最好还是把复选框分组使用。这样做的好处是便于用户理解。

30)问: CheckBox、RadioButton如何完成动态改变其按钮的标题? RadioGroup能动态添加吧?读取上面三个组件标题又如何做呢?

答:CheckBox、RadioButton的属性里有一个Caption,它的属性值就是按钮的标题,所以应该说对这两个组件来说很容易做到的:

CheckBox1->Caption=”信息”;

Label1->Caption= CheckBox1->Caption;

RadioButton与CheckBox一样,这里就不多说了。

RadioGroup里面有一个Items属性,这在《闲谈BCB》中说过这个问题,所以你要添加按钮,可以用下面的方法:

RadioGroup1->Items->Add(“我是新来的”)

读取可以利用ItemsIndex来完成:

Label1->Caption=RadioGroup1->Items->Strings[RadioGroup1->ItemIndex];

String是把选中的序号转换成你需要的文本,因为ItemsTstring对象,这类情况在你以后的学习中会经常看到的。

要注意在RadioGroup中也有一个Caption,这是用来给单选分组框设置标题的,这个标题与单选的文字无关。

(待续)

C++ Builder初学问与答

一直以来都想写一点为BCB初学者快速入门的东西,前不久写了几篇《闲谈BCB》想把自己学习BCB中如何来解决难点的方法说给大家,没想到被骂得不成样子。本想不写了,但觉得这些东西留下来能做什么呢?还是用另...
  • wozengcong
  • wozengcong
  • 2014年01月04日 16:44
  • 1492

NOIP2016提高组初赛答案&总结

一、单项选择题 1.这题不是zz都能选对。 2.不难看出按键的顺序是五个一循环,于是可以求出共有多少个循环,进而求出按了多少次CapsLock,最后就可以得出答案。 3.异或就是按位运算,相同取...
  • qq_31640513
  • qq_31640513
  • 2016年10月23日 09:06
  • 18148

C# winform 初学者各种问题集合(已经本人验证能有效解决问题)

1、 C#中如何让radiobutton初始处于没有选中的状态 https://zhidao.baidu.com/question/2053724282173062907.html 2、C#中的f...
  • HDOJ_lin
  • HDOJ_lin
  • 2017年05月28日 11:16
  • 1454

C++Builder初学问与答

  • 2010年10月19日 23:20
  • 849KB
  • 下载

BCB初学问与答适合初学者

  • 2011年06月28日 07:47
  • 797KB
  • 下载

C++ const 的学问

1. const的最初动机是取代预处理器#define来进行值替代 #define只做些文本替代,它既没有类型检查概念,也没有类型检查功能,所以预处理器的值替代会产生一些问题。 这些问...
  • liujie619406439
  • liujie619406439
  • 2013年04月14日 21:25
  • 646

常见设计模式的解析和实现(C++)之三-Builder模式

作用: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 UML结构图: 适用于以下情况: 1)当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装...
  • muweiyou
  • muweiyou
  • 2012年05月19日 10:23
  • 510

设计模式的解析和实现(C++)之三-Builder模式

作用:     将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。     UML结构图:     适用于以下情况:     1)当创建复杂对象的算法应该独立于该对...
  • AngryXXQ
  • AngryXXQ
  • 2012年11月12日 12:49
  • 258

三范式的依赖,小小的知识,大大的学问

三范式使得数据库的设计变得有据可依,数据库的冗余大大减少。然而,三范式的定义,却不那么让人省心,一堆文字外加数学知识,让人着实有点小蒙。 虽然说完全按照三范式设计数据库并不可取,但是要想设计一个好的...
  • jianxin1009
  • jianxin1009
  • 2013年07月26日 20:35
  • 3383

C++ Builder XE8 安卓开发之使用TIdThreadComponent控件接收客户端的数据

C++ Builder中自带了indy10控件,由于indy10的TCPClient接收方式是阻塞式的,所以需要一个线程来接收数据。...
  • u012163234
  • u012163234
  • 2015年08月10日 10:39
  • 1708
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ Builder 初学问与答(三)
举报原因:
原因补充:

(最多只允许输入30个字)