`

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

 
阅读更多

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

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

  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" />Office:office" />ASPectratio="t" v:ext="edit">
缺省值

用来给用户制定

bkOK

Caption=”OK”

ModalResult=mrOK

Default=true

bkCancel

Caption=”Cancel”

ModalResult=mrCancel

Cancel=true

bkYes

Caption=”&Yes”

ModalResult=mrYes

Default=true

bkNo

Caption=”&No”

ModalResult=mrNo

Cancel=true

bkHelp

Caption=”&Help”

bkClose

Caption=”&Close”

bkAbort

Caption=”Abort”

ModalResult=mrAbort

bkRetry

Caption=”&Retry”

ModalResult=mrRetry

bkIgnore

Caption=”&Ignore”

ModalResult=mrIgnore

bkAll

Caption=”&All”

ModalResult=mrAll


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  单选按钮在成组使用时有一些特点需要掌握。当你在同一容器(如:Form、Panel、GrouPBox等)上直接放置单选按钮时,这些单选按钮自成一组,也就是说,无论在容器上放置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是把选中的序号转换成你需要的文本,因为Items是Tstring对象,这类情况在你以后的学习中会经常看到的。

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics