ListBox
ComboBox构件
Label构件
按钮VCL
BitBtn构件
SpeedButton构件
单选钮与复选框
ScrollBar构件
File Open
File Save对话框
Color对话框
Find和Replace
ListBox和ComboBox构件的用途很广的构件。表示标准Windows列表框,用户可以从它的选项清单中选择选项。如果列表框中的项目太多,无法一次显示完,则会出现滚动条,以便访问列表框中的其它项目。新术语 有些列表框是所有者绘制的列表框。在所有者绘制的列表框中,编程人员要负责绘制列表框中的项目。如果需要,可以生成所有者绘制的列表框。所有者绘制的列表框很常见,只是你不一定认识到了而已。介绍定制C++ Builder工具条,其中介绍了C++ Builder工具条编辑器对话框,其中包含两个列表框,左边的列表框是普通列表框,列出可以选择的按钮组,而右边的列表框则是个所有者绘制的列表框,显示工具条上会显示的实际按钮和按钮功能的文字说明。组合框是个专门列表框。实际上,组合框是列表框与编辑控件的组合。用户可以在列表框中选择,也可以在编辑部分输入数值。用户在列表框中选择时,该项目即放在编辑控件中。组合框有三种,具体类型取决于Style属性。表8.5列出了组合框类型及其说明。合框类型项目说明Simple只是在列表框上面放一个编辑控件。用户可以在列表框中选择,也可以在编辑部分输入数值Drop-down类似于简单样式,只是列表框部分最初不显示,而是提供一个下拉按钮,让用户浏览清单和选择选项。用户也可以在编辑部分输入数值Drop-down list这种组合框限制更多。和下拉样式一样,列表框部分最初不显示。用户可以单击下拉按钮浏览清单和选择选项,但不能在编辑部分输入文本。用这个样式时只能在预定选项中选择图8.4显示了ComboBox测试程序运行的情况,从中可以体会每种组合框的特点。
ColumnsListBox包含列表框中的列数,让这个属性大于1可以生成多列。缺省为0ExtendedSelectionListBox确定是否允许扩展选择。扩展选择使用户能用Shift+单击和Ctrl+单击选择项目。MultiSelect设置为false时无效。缺省为true
IntegralHeightListBox设置为true时,调整列表框高度以确保显示部分行。设置为false时列表框可以显示部分行。缺省为falseItemHeight两者设置控件中项目的高度。用户所有者绘制的列表框和组合框。缺省为13Items两者包含列表框中的项目表,是个TStrings实例(具体属性和方法见本章前面介绍TStrings的部分)MaxLengthComboBox用户可以在组合框编辑部分输入的最大字符数。同于编辑控件的MaxLength。缺省为0(无限)MultiSelectListBox设置为true时,列表框中可以选择多个项目。缺省为falseSorted两者设置为true时,列表框项目按升序排列,设置为false时不排序缺省为false
StyleComboBox提供组合框的样式选项:
csSimple,
csDropDown
csDropDownList,
lbOwnderDrawFixed,
csOwnerDrawVariable,缺省为csDropDownListBox提供列表框的样式选项:lbStandard,lbOwnderDrawFixed,和csOwnerDrawVariable,缺省为lbStandardTabWidthListBox设置列表框中标签的宽度(像素),缺省为0TextComboBox包含组合框编辑部分的文本。运行属性ItemIndexListBox包含当前所选项目的索引,0和第一个项目,1表示不选项目。写入时,选择指定的索引SelCountListBox包含多项选择列表框中选择的项目个数SelectedListBox选择指定项目时返回true,否则返回falseSelLengthComboBox包含组合框编辑部分当前所选文本的长度SelStartComboBox包含组合框编辑部分当前所选文本的起点,编辑控件中第一个字符为0SelTextComboBox包含编辑控件中当前所选文本TopIndexListBox返回列表框顶部的项目,可以将顶部项目设置为某个列表框项目和前面介绍的编辑构件一样,列表框与组合框的方法不多。Clear()方法清
除控件的所有数据,ItemAtPos()方法返回指定x、y坐标处的列表框项目,SelectAll()方法选择组合框编辑部分的文本。列表框与组合框中最常用的事件是OnClick事件,可以确定列表框中何时进行了选择。说明 单击组合框编辑部分或下拉按钮不会触发OnClick事件,只有单击组合框的列表部分时才会触发OnClick事件。OnChange事件可以和编辑控件中一样触发组合框编辑部分的变化。OnDropDown事件检测是否单击了组合框下拉按钮。OnMeasureItem和OnDrawItem事件用于所有者绘制的列表框和所有者绘制的组合框。
按钮VCL包含几个可以在应用程序中运用的按钮,尽管它们不全是基于标准Windows按钮控件,但都放在这里介绍。介绍具体按钮构件之前,先要介绍一些基本知识。说明 设置按钮的Caption属性时,象设置菜单项目的Caption属性一样使用和号(&),和号后面的字符会加上下划线,可以作为按钮的加速键。
况下,ModalResult属性设置为mrNone(即0)。这个值用于窗体上的普通按钮,不关闭窗体。如果ModalResult属性使用非0值,则按下按钮时窗体关闭,并返回ModalResult属性值。例如,如果将按钮放在窗体上并将ModalResult属性设置为mrOK,则按下按钮时窗体关闭,并返回ModalResult属性值mrOK(1)。这样就可以编制下列代码:
int result = MyFormShowModal();
if (result == mrOK) DoSomething();
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)if (result == mrCancel) return;
mrNone0mrOk1
mrCance2
mrAbort3mrRetry4
mrIgnore5
mrYes6
mrNo7
mrAll8
mrNoToAll9
mrYesToAll10说明 按钮不一定要使用预定义ModalResult属性常量,也可以用其它数值。例如,假设有个自定义对话框可以用各种按钮关闭,则可以对每个按钮赋予不同的ModalResult值(例如100、150、200),然后就知道是哪个按钮关闭了对话框。任何非0的值都有效,只要不超过int的取值范围。DefaultDefault属性是按钮的另一重要属性。Windows具有处理对话框的标准机制,其中一个特点如下:如果焦点在按钮以外的控件上而用户按键盘上的Enter键,则对话框的表现和用户单击缺省按钮时一样,缺省按钮就是设置了BS_DEFPUSHBUTTON样式的按钮(通常是OK按钮)。这个特性是编程人员的克星,数据输入人员抱怨已久。Default属性可以将窗体上的一个按钮设置为缺省按钮。这个属性的缺省值为false。为了将窗体上的一个按钮设置为缺省按钮,将其Default属性设置为true。如果不将任何按钮的Default属性设置为true,则用户按Enter键时窗体不关闭。说明 用户按Enter键关闭窗体时,先调用缺省按钮(如有)的OnClick处理器再关闭窗体。
Cancel属性与Esc键配合,就象Default属性与Enter键配合。用户按Esc键关闭窗体时,ShowModal()返回值为Cancel属性设置为true的按钮的ModaResult值。如果没有按钮的Cancel属性设置为true,则用户按Esc关闭窗体时返回mrCancel。说明 单击系统关闭框或按Alt+F4关闭窗体时ShowModal()也会返回mrCancel。但按Esc键时ShowModal()返回值为Cancel属性设置为true的按钮的ModaResult值,先调用Cancel按钮的OnClick处理器再关闭窗体。如果用户单击系统关闭框或按Alt+F4关闭窗体,则不调用OnClick处理器。必须考虑用户使用窗体的不同方法。说明 多个按钮的Default属性可以设置为true,同样,多个按钮的Cancel属性也可以设置为true。但是,用户按键盘上的Enter键时,调用Default属性设置为true的按钮中跳表顺序为最先的按钮,同样,用户按键盘上的Esc键时,ShowModal()返回Cancel属性设置为true的按钮中跳表顺序为最先的按钮的ModalResult值。Enabled前面介绍一般构件时曾介绍过Enabled属性。这个属性用于根据程序当前状态或特定窗体当前状态打开或关掉按钮。按钮关掉时,Enabled属性设置为false,按钮不起作用,上面的文字变灰,对于带位图的按钮,位图也自动变灰。Button构件只有一个有趣的方法:Click()方法,模拟鼠标单击调用按钮的Click()方法时,就象单击按钮时一样,执行按钮的OnClick事件。和事件一样,通常只用OnClick事件。下面要介绍C++ Builder提供的各种按钮构件。Button构件8.6.4Button构件标准Button构件并不漂亮,但做了大量工作。标准Button构件自身已很完备,缺省Height属性值为25像素,缺省Width属性值为75像素。通常只要将按钮放在窗体上并响应其OnClick事件即可。
BitBtn构件BitBtn构件是扩展构件以增加功能的范例。这里扩展标准Button构件以便在按钮表面上显示位图。BitBtn构件比Button构件多几个属性,这些属性共同管理按钮上的位图和位图与按钮文本之间的布置,将在下面几节介绍。GlyphGlyph属性表示按钮上的位图,其数值是一个图形。新术语 Glyph图形通常是Windows位图文件(.BMP)。Glyph本身由一个或几个位图构成,表示按钮的四种状态:起、落、关掉和按住。如果生成自己的按钮,可能只要提供一个Glyph,然后由BitBtn构件修改成表示另外三种状态。单击按钮时,位图向右下方移动;关掉按钮时,位图变灰。按下状态的位图与平常一样,只是按钮表面变成按下状态。如果提供多个位图,则每个位图的高度和宽度应相同,并包含在位图带中。C++ Builder所带的位图提供了两个Glyph。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)SpeedButton构件SpeedButton构件和Panel构件一起用于建立工具条,它与Button和BitBtn构件不同,不是窗口化构件,即不能跳表也不能接受输入焦点。另一方面,SpeedButton构件又与BitBtn构件有一些共同之处,例如Glyph属性的处理方式在SpeedButton构件中和BitBtn构件中完全一样,这里不再一一重述。但这里要介绍它们间的两个主要差别。缺省情况下,快速按钮是方形的,是25×25像素。快速按钮可以取任何尺寸,也可以包含文本,但通常不包含文本。快速按钮有一些特定的属性,将在下面几节一一介绍。说明 C++ Builder 1.0中生成工具条的方法用Panel构件并在上面放各种构件(主要是SpeedButton构件)。C++ Builder 3.0提供了Toolbar构件,能更好地生成工具条。Toolbar构件有一些优点,但用起来更复杂。GroupIndex快速按钮可以组合成象单选钮一样(单选钮框中介绍)。按下组中一个按钮时,它保持按下状态,原先按下的按钮弹起来。为了组合快速按钮,只要对组中所有按钮赋予相同GroupIndex属性值(缺省值为0,表示不在组中)。试举例如下:1. 生成空白窗体并在窗体上放五个快速按钮(我不想在这个简单例子中放上按钮位图,但读者也可以这么干)。2. .选择所有按钮并将GroupIndex属性值变为1,这样所有按钮的GroupIndex属性都变成1。3. 可选:将一个按钮的Down属性变为true。4. 单击Run按钮编译和运行程序。程序运行时,单击几个按钮。注意一次只有一个按钮显示按下状态。GroupIndex属性赋予非0值时,可以看出快速按钮的表现有所改变。GroupIndex属性值为0的按钮单击时会弹回,而快速按钮组中的快速按钮单击时保持按下状态。AllowAllUp缺省情况下,组中随时要有一个按钮处于按下状态,但也可以将AllowAllUp属性设置为true以改变这点,将一个按钮的AllowAllUp属性设置为true时,组中所有按钮的AllowAllUp属性设置为true。这样就可以选择组中一个按钮或一个都不选。
GroupIndex属性一定要用窗体上其它构件不用的值。用户单击按钮时,它保持按下状态,再次单击时,它弹起来。Down读取Down属性时,如果按钮保持按下状态则返回true,否则返回false。写入Down属性时,可以在按钮按与不按之间拔动。如果快速按钮不是组中成员,则写入Down属性无效果。
单选钮与复选框尽管单选钮与复选框是专门的按钮,但最终还是按钮。这里不想花大量时间介绍这些构件,因为它们很容易实现。RadioButton和CheckBox构件都有个Checked属性,可以设置核选状态和读取当前核选状态。单选钮通常用在按钮组中,通常表示选项组中一次只能选择一个选项(如前面介绍的快速按钮组)。尽管单选钮可以单独使用,但通常不提倡这么用,以免让用户费解。想把单选钮单独使用时,应当改用复选框。窗体上的任何按钮均被自动当作同一组中的一部分。如果有多组单选钮,每组需要独立操作,则应当使用RadioGroup构件。这个按钮可以在一组单选钮周围加上三维帧和标题,建立单选钮组。试举例说明如下:1. 生成空白窗体或用上一练习中生成的窗体,放上一个RadioGroup构件。2. 找到Items属性并双击Value列。3.出现字串清单编辑器,在字串清单编辑器中输入下列语句:Redtailed Hawk Peregrine FalconGyrfalconNorthern Goshawk4.单击OK关闭字串清单编辑器。组框中产生包含所输入文本的单选钮。5.将单选钮组的Caption属性变为Apprentice Falconers Can Legally Posses:6.单击Run编译和运行程序。单击一个单选钮时,前面选择的按钮如期弹出。利用RadioGroup构件可以在一个窗体上放多组单选钮。和前面介绍的列表框与组合框一样,RadioGroup构件也有ItemIndex属性,可以在运行时用于确定组中选择了哪个项目。说明 也可以用GroupBox构件放单选钮,GroupBox构件不如RadioGroup构件方便,但更加灵活。组框中可以放任何类型的控件。放在组框中的控件和组框本身可以在设计时作为一个单元移动。CheckBox构件可以打开和关掉选项或向用户表示项目当前打开或关掉。复选框最多有三种状态:打开、关掉和变灰。如果复选框的AllowGrayed属性设置为false,则只能复选或不选,而AllowGrayed属性设置为true时则可以取三种状态中任何一种。变灰状态是由程序处理的。换句话说,你可以确定应用程序中变灰的含义。如果AllowGrayed属性为false(缺省),则可以用Cheched属性确定复选框是否核选。AllowGrayed属性为true,则要用State属性确定或设置复选框状态。这个属性的取值为cbChecked、cbUnckecked和cbGrayed。提示 有时要用复选框表示某个特性的开关状态而又不能让用户单击复选框改变其开关状态,这时复选框要关掉而又正常显示。为了让复选框不变灰而又只能读取,要放上一个面板,并将面板的Enabled属性变为false