C++ Builder 初学问与答 (十一)

11.工具条组件
  87)问:工具条是Windows编程经常要用的, C++Builder能不能实现这个功能呢?

 答:当然可以,工具条是由许多具有图形的按钮组成的,这些按钮被分隔符分隔成许多组,每个组都能够完成特定的工作。工具条上的按钮具有与位图按钮相似的特性——可以拥有多个位图,当按钮处于不同状态时,例如按下、失效等,将显示不同的位图。以前C++Builder制作工具条的方法是通过把加速按钮放在面板组件Panel上实现的。现在,我们不必使用这两种组件的组合,只要使用ToolBar就可以创建工具条了。工具条是比较难掌握的,它之所以不容易掌握是因为它包含的TToolButton组件有三个属性:Grouped,AllowAllUp和Down,它们的组合可以产生各种不同效果的按钮组。这三个属性我们一定要好好理解。

  88)问:那请给我介绍一下Toolbar这个组件的使用方法好吗?

  答:好的,我们先从ToolBar的属性入手,通过对一些重要属性的分析来了解它。ToolBar包含一些前面没有见过的属性:

  ButtonHeight属性指出了工具条中按钮的高度。

  ButtonWidth属性用来设定工具条中按钮的宽度。

  Flat属性为true时,使工具条透明,同时使工具条上按钮之间的边界消失。俗称平面工具条,它的缺省值为False。

  Indent用来在工具条的左边创建一个边沿区。

  ShowCaptins确定是否允许在工具条的按钮上显示标题。缺省值为False。

  Wrapable设定是否允许工具条上的按钮换行。缺省值为True。

  List属性,当这个属性为True时,工具条上按钮的图标在左,标题在右。为False时,按钮的图标在上,标题在下。缺省值为False。

  Images用来设定正常情况下,按钮上显示的图标列表。

  HotImages用来设定当鼠标移动到按钮上显示的图标列表。

  DisabledImages用来设定按钮失效时显示的图标列表。

  工具条上所有按钮显示的图标就包含在这三个图标列表中。

  在前面介绍的ListView组件中,属性LargeImages和SmallImages分别表示在两种不同的状态下显示的图标列表。ToolBar的这三种属性也有类似的特点,它们分别表示在正常状态、鼠标指向工具条以及按钮失效时显示的图标列表。

  此外,还有几个运行时态属性:

  ButtonCount属性,指出了工具条中按钮的个数。

  Buttons存放着工具条中按钮的列表。

 RowCount指示着工具条的行数。

  89)问:C++Builder为什么要采用图标列表的方式来管理工具条上的图标呢?

  答:因为这样可以集中统一地管理大量的图标,从而大大地减轻了程序员的负担。

  答:要为应用程序建立工具条,可以按照下面的步骤:

  (1)从选项卡Win32中选择工具条组件,放置在窗体上。

  注意,刚放置在窗体上的工具条组件一定是在窗体的顶部,因为这时工具条的Align属性被设置为alTop。

  (2)在窗体上增加两个ImageList组件,并为这些组件引入图标。

  (3)将一个ImageList组件赋予工具条的属性Images,另一个赋予工具条的属性DisabledImages。

  (4)用鼠标右键单击工具条,在弹出菜单中选择New Button。

  这时将在工具条上出现一个按钮,这个按钮无标题。这是因为工具条的ShowCaption属性被设置成了False。实际上这个按钮有一个缺省的标题ToolButton1。

  这个新创建的按钮与我们前面介绍的按钮都不一样,它是一个TTtoolButton组件。

  (5)选中工具条上的按钮,把按钮的ImageIndex属性改为所需要图标的索引号。这个图标实际上是存放在ImageList组件中的。

  (6)重复第四步和第五步,在工具条上创建更多的按钮。这样一个工具条就建立了。

  90)问:工具条上的按钮好像与普通按钮不一样,请问它有些什么特点呢?

  答:工具条上的按钮是一个TToolButton组件。它包括一些与工具条有关的特性,可以简化工具条上按钮的配置,并增加一些显示特性。TToolButton有这样一些重要属性。

  AllowAllUp属性允许一个组中的按钮同时全部处于未选中状态。缺省值是False。

  Down属性指定按钮是否被选中。在设计期间把该属性设置为True,可以使按钮初始化为选中状态,缺省值为False。

  DropDownMenu属性把一个弹出菜单与按钮相连。

  ImageIndex属性指定出现在按钮上的图标的索引号。

  Indeterminate属性确定按钮是否处于一种既不是选中也不是未选中的中间状态。缺省值为False。

  Wrap属性强迫这个按钮是这一行的最后一个按钮,下一个按钮从下一行开始。缺省值为False。

  Style属性用来确定按钮的样式,它可以有五种不同的取值,这五种取值分别表示五种不同样式的按钮。

  tbsButton表示按钮正常显示与一般的加速按钮一样。

  tbsCheck表示单击这种类型的按钮时可以切换Down属性。一旦你选中了该按钮,那么按钮将保持选中状态直到再次单击。

  tbsDropDown表示按钮显示成一个向下的箭头。

  tbsSeparator表示按钮显示成工具条上的一个空格。

  tbsDivider表示按钮显示成工具条上的一个垂直线段。

  Grouped属性确定是否允许连续的多个tbsCheck类型的按钮组成一组。缺省值是False。如果连续的多个按钮,每个按钮的Grouped属性都设置为True,同时Style属性都设置为tbsCheck,那么这些组件一次只能选取一个。选中其中一个按钮将使其他按钮变成未选中状态。

  91)问:如何用加速按钮创建工具条?

  答:工具条的另一种创建方法是使用面板组件+加速按钮SpeedButton的方法。加速按钮在前面曾经提到过,它与位图按钮很相似,也使用属性Caption和Glyph放置文本和图标,不过加速按钮还有一些属性是比较特殊的。

  下面我们先介绍加速按钮的属性:

  GroupIndex:通过GroupIndex属性可以使加速按钮像单选按钮那样使用。也就是说,把多个单选按钮的GroupIndex属性赋予相同的值以便组成一组,这样这个组中的按钮一次只能有一个按钮可以被按下,当你按下一个按钮时,其他按钮就会弹起。需要注意的是GroupIndex必须大于0。如果GroupIndex属性等于0,那么表示该按钮是一个普通的加速按钮。

  Down:属性值可以控制按钮是否处于按下状态,当该属性值为True时,按钮处于按下状态。你可以在设计时把属性Down设置为True,这样当程序运行时,按钮一开始就处于按下状态。

  AllowAllUp:这个属性用来指定一个组中的所有加速按钮是否可以同时处于未被按下的状态。当该属性为True时,单击该组中被按下的按钮,这个按钮会弹起。当该属性为False时,单击该组中被按下的按钮,这个按钮不会弹起。

  如果你比较一下加速按钮和TToolButton组件就会发现,它们都有上面介绍的这三种属性,只不过TToolButton组件中使用属性Grouped来完成类似于GroupIndex的功能。

  92)问:用加速按钮设计工具条与用Toolbar组件相比有什么不同?

  答:用加速按钮设计工具条时必须首先在窗体上放置面板组件,而且应该把它的Align属性设置为alTop(因为工具条一般都放在窗口的顶部)。然后在面板组件上放置加速按钮。

  一般要利用按钮的Caption和Glyph属性为加速按钮设置文本和图标。如果这些按钮只是像普通按钮那样操作的话,那么这样设置就可以了。但是如果这些按钮要像单选按钮那样使用,那么还必须对GroupIndex属性进行设置。

 93)问:那如何用加速按钮来设计工具条呢?

  答:我们要用到Additional页的可控组件ControlBar、Speedbutton与Win32页面中的ToolBar。下面来看一下他的实现:

  ①双击ControlBar,把她放到窗体中;

  ②双击ToolBar,并将其放到ControlBar上;

  ③在ToolBar上添加SpeedButton;

  ④选中一个SpeedButton,在Object Inspector中找到Glyph属性,来选择图片。

  *SpeedButton的Flat属性改为true,则按钮为透明的

  *AutoSize改为true,则容器大小随容件变化

  12.状态条组件
  94)问:在Windows编程中,状态条可以显示程序当前的一些状态信息,是一个很有用的部件,它也被广泛应用在许多程序中,请问,C++Builder是怎样编写状态条的?

  答:状态条StatusBar实际上是由一组状态面板组成的,通常显示在应用程序窗口的底部,它的功能主要是显示一些提示信息和状态信息。例如,C++Builder的代码编辑器底部就显示了一个状态条,而且显示了多个状态面板。

  状态条可以只显示一个状态面板,也可以显示多个状态面板。当显示多个状态面板时,状态条被分割为几个部分,每个部分都有自己的Text属性,通过这个属性就可以在状态条显示信息了。

  如果要在状态条上显示多个状态面板,就需要把状态条的SimplePanel属性设置为False,否则只能显示一个状态面板。

  如果状态条只需要显示一个状态面板,那么只要简单地在窗体上放置状态条就可以了。这时窗体上的文本保存在属性SimpleText中。如果要显示多个状态面板,那么就需要使用面板编辑器创建多个状态面板。单击属性Panels的Value列中的省略号按钮(或者双击菜单条),就可以打开状态面板编辑器。

  单击编辑器上的按钮Add可以增加状态条上的状态面板。单击面板编辑器中新创建的状态面板,在对象编辑器中就会列出该状态面板的属性。

  95)问:可以看出状态条上的状态面板有五个属性,他们分别有什么作用呢?

  答:Alignment属性用来确定面板中所显示文本的对齐方式。它的可能值为:taLeftJustify表示左对齐、taRightJustify表示右对齐和taCenter表示居中对齐。缺省值为taLeftJustify。

  Bevel用来确定面板的样式。共有三种方式,None表示面板处于平整的状态;Lowered表示面板下沉;Raised表示突起。

  Style属性用来确定在面板中显示的内容是Text文本还是OwnerDraw自绘制图形方式。如果要在面板中作图,那么就需要编写OnDrawPanel事件处理过程。

  Text属性用来保存面板中显示的字符串。

  Width用来设定面板的长宽。

 

你可能感兴趣的:(C++,builder,问答)