Delphi开发宝典 下载本文

四、控件的使用

系统使用的控件除TLabel、TEdit、Tcheck、Tmemo等基本控件外,还有公司自行开发的控件。现介绍几个常用的控件(如: TButtonEdit,TdataStringGrid)的一些用法。 1、TbuttomEdit的用法

TbuttomEdit控件是在TEdit的基础上增加了一些功能而开发出来的编辑框控件,最大的优点是可以显示多种格式及数据形式。下面介绍它的一些重要的属性及相关方法。

a) AddOnId 和AddOnIdFieldName 属性

AddOnId这个属性是根据整个系统的特点而设计的一个非常有用的属性,由于 数据库的设计中很多数据表中用一个ID值来作为数据的唯一标识,所以很多字段有相应的Id,Code和Name。如商品则有ItemId,ItemCode,ItemName。那么在存放ItemCode字段这个的TbuttonEdit中就可以在AddOnId属性中存放ItemId字段了。

AddOnIdFieldName这个属性是存放Id的字段的名称的。如在存放ItemCode字段的TbuttonEdit的控件中赋给AddOnIdFieldName属性值为ItemId,这样TbuttonEdit就会在从对象中取数据时自动根据AddOnIdFieldName属性值来把ItemId的值保存到AddOnId属性中,也会在保存数据时根据AddOnIdFieldName属性值取的AddOnId属性中的ItemId的值来保存到对象中。

b) AutoClearAddon 属性

这个属性的作用是当TbuttonEdit的Text的值改变了的时候,控件会自动清空AddOn属性的值,即字段的Id值。当该属性为True时,给TbuttonEdit赋值时一定要将给AddOn赋值的语句写在给其Text赋值之后。下面的语句是错误的:

BedtItemCode.AddOn := ItemTmp.ItemId; BedtItemCode.Text := ItemTmp.ItemCode; 两句应该调换位置才是正确的。

c) ButtonStyle 属性

这个属性设置TbuttonEdit的显示形式的。它有四个值,分别是: lsDropdown,lsEllipsis,lsNormal,lsSelect。当是lsDropdown值时,TbuttonEdit是下拉框的形式,在属性Items中写入要显示的值;当是lsEllipsis值时,TbuttonEdit的编辑框右边有出现一个小按钮,可以在OnButtenClick事件中为小按钮写入事件;当是lsNormal值时,TbuttonEdit是一个普通的编辑框;当是lsSelect值时,TbuttonEdit也是下拉框的形式,但是和lsDropdown的区别是在属性Items中是要显示的值,在属性Values中是字段真正要传回后台的值。

d) DataFormat 属性

DataFormat 这个属性是设置TbuttonEdit的数据类型的。它有五个值,分别是:dfDate,dfDateTime,dfInteger,dfNumber,dfString。当是dfDate值时,TbuttonEdit 的数据类型是日期型;当是dfDateTime值时,TbuttonEdit的数据类型是日期时间 型;当是dfInteger值时,TbuttonEdit的数据类型是整数型;当是dfNumber值时,TbuttonEdit的数据类型是实数型;当是dfString值时,TbuttonEdit的数据类型是字符串型。

e) FocusControl 属性

FocusControl 这个属性的作用是在设置焦点控件关联,它能将与它关联的控件的值自动清空。如: BEdtItemCode的FocusControl属性关联的是EdtItemName,那么当

BEdtItemCode的值清空后,EdtItemName的值会自动清空。

f) ItemIndex 和Items 属性 ItemIndex 和Items属性是在ButtonStyle属性的值是lsDropdown,lsSelect的时候,其显示下拉框的值。

g) Tag 属性

Tag 属性本是一个很普通的,几乎每个控件都有属性,但是在该控件中的它有着特殊的用途,如:将TButtonEdit的Tag属性值置为1,那么在运行期窗体的基类会自动将TButtonEdit设置为只读,颜色变灰。这一点很重要,编码过程中会经常 用到。

h) Values 属性

Values 这个属性用在当ButtonStyle属性的值是lsSelect的时候,这时Items属性中存放的是TButtonEdit要显示到界面的值,而Values属性中存放的是与Items列表中相对应并且真正要存入数据库的值。

i) OnButtonClick 事件

OnButtonClick事件是经常要用到的一个方法,当ButtonStyle属性的值是Ellipsis的时候,编辑框的旁边会有一个小按钮,点击小按钮就会触发OnButtonClick事件,一般是为了弹出查询窗体用的。

j) OnChange 事件

OnChange 事件是当TButtonEdit的值有改变时触发的一个事件,但是在基类中定义了一个InfoChange方法,这个方法改变基类中保存按钮的状态,所以该事件关联InfoChange方法,当TButtonEdit的值有改变时就可以使基类中的保存按钮可用。在窗体界面的设置中一般都要将控件的OnChange事件中关联InfoChange方法。

2、 TDataStringGrid的用法

TDataStringGrid控件是在TStringGrid的基础上增加了一些数据控制功能而开发出来的网格显示控件。功能十分强大。下面介绍它的一些重要的属性及相关方法。

a) AutoSort属性

AutoSort 属性是设置网格中每列是否是可排序的,其值为True是指列是可排序的,其值为False是指列是不可排序的。

b) ColCount和RowCount 属性

ColCount和RowCount这两个属性比较简单,ColCount是设置网格中实际可用的列数,RowCount是设置网格的行数的。我们一般的显示规则是将这2个属性都设置为2。

c) Columns 属性

Columns属性是设置每一列的属性的。点击它会弹出Editing DataStringGrid.Columns窗口,在这里,可以设置每一列(即TColumn)的具体属性。Tcolumn的设定必须与实际可用列数(即ColCount)相对应的。下面就介绍Tcolumn的一些重要属性。

1) Asc 属性

Asc 属性是个Boolean值用来排序的属性,当它为True时该列的数据将按照升序

排序,为False时按照降序排序。

2) ButtonStyle 属性

ButtonStyle 属性是设置列的显示形式的,有四个值,它们分别是cbsAuto,

cbsCheckBox,cbsEllipsis和cbsNone。其值为cbsAuto时,则该列会根据Format属性即该列的数据类型来显示该列;其值为cbsCheckBox时,该列会以CheckBox的形式显示数据;其值为cbsEllipsis时,该列是个有小按钮点击选择的形式,在DataStringGrid的OnEditButtonClick事件就是点击小按钮触发的事件;其值为cbsNone时,该列则是普通的

编辑框形式。

3) DisPlayValues 属性

DisPlayValues 属性是设置其显示值的。通常我们用在ButtonStyle 属性为cbsCheckBox时设置DisPlayValues的值为2;1,意思是CheckBox选中时该列的值为2,没有选中时该列的值为1。

4) DisPlayMask 属性

DisPlayMask 属性是设置数据的显示格式的。如: ###,##0.##。 5) FieldName 属性

FieldName 属性是设置该列要显示的字段名。其值必须与相应的业务类中的属性值

(Property)中的名字一样。这个属性是与数据挂钩的。

6) Format 属性

Format 属性是设置该列的数据格式的,当然数据格式的改变也会改变该列相应的

显示形式。它有五个值分别:cfBoolean,cfDate,cfDatetime,cfInteger,cfNumber,cfString。它们代表的数据格式分别是:布尔类型、日期类型、日期时间类型、整数类型、实数类型、字符类型。

7) NeedCalc 和Formula 属性

NeedCalc和Formula属性是设置计算字段时用到。当设置NeedCals属性为True

时,则在Formula属性中设置计算公式。其公式是用其他字段的Tiltle属性中的Caption属性的值通过运算符组成的。如:退货金额(ReturnAmount)字段的值是由退货价(ReturnPrice)乘以退货数量(ReturnQty)得来的。那么可以先将退货金额(ReturnAmount) 字段的NeedCalc属性置为True,然后再将Formula属性设置为: 退货价*退货数量,而不是: ReturnPrice* ReturnQty。这一点要注意。

8) PickList 和RelationValues 属性

PickList属性的作用是在该列的格式是下拉框格式的时候设置该列要显示的文字

信息。RelationValues属性则是设置该列字段的实际内容的。Relation-Values属性中的内容必须要与PickList属性中的内容相对应,该值为真正的数据库值。

9) Title 属性

Title属性是设置该列标题的显示格式的。它展开后的Caption属性是设置该列的

标题名称的。Pcaption属性是设置合并字段标题名的。如果要多列合并在同一标题下,则设置相应几列的Pcaption属性为要合并的标题名,然后在DataStringGrid中设置UseMultiTitle属性为True即可。

d) DefaultColWidth 和DefaultRowHight 属性

DefaultColWidth属性是设置默认列的宽度的。DefaultRowHight属性是设置默认行的高度的。

e) FixedColor、FixedCols、FixedRows和FrozenCols属性 FixedColor属性是设置锁定列的颜色。FixedCols属性是设置锁定的列数的。FixedRows属性是设置锁定的行数。FrozenCols属性也是设置锁定的列数的,与FixedCols属性不同的是FixedCols属性锁定的列数包括固定行(即第1列),而FrozenCols属性锁定的列数则不包括固定列。

f) RequireIndex 属性

RequireIndex属性是设置是否需要在固定行(即第1列)显示序号。当其值为True时,在固定行上会显示该行的列数。

g) TitleHeigh 属性

TitleHeigh属性是设置标题(即第1行)的高度的。其默认值是0,这不是它的实际高度。

h) UseFieldNameCalc 属性

UseFieldNameCalc 属性是设置字段中的计算字段的。当其值为True时,在Columns 属性列中的计算字段的Formula属性中写入其计算公式,再将NeedCalc属性置为True。就能够实现该字段的自动计算功能。

i) UseMultiTitle 属性

UseMultiTitle属性是结合Columns 属性中的Title属性中的Pcaption属性的,当其值为True时表示可以合并相同标题。

j) CellByField2 [AFieldName:String,ARow:Integer]属性方法

该属性是取出TdataStringGrid中某一列某一行中的数据。AFieldName是指这一列的字段名,ARow是指这一行的的行数。

k) procedure ClearAllRowChangeFlg 方法

该方法是清除修改TdataStringGrid所留下的痕迹。在修改了TdataStringGrid后,TdataStringGrid的第一列会出现修改的痕迹(即*号)。这个方法就是消除*痕迹。

l) MergeSameColValue 方法 该方法有三个重载方法: (1)procedure MergeSameColValue(FldName: string;RelateFldName: string = ''); 该方法是用来合并同一列上相同值的单元格。有2个参数。

FldName: 是要合并单元格的列的字段名;RelateFldName:是要合并列的参考列。 如: 要合并ItemName列,那么就需要将ItemCode做为参考列来合并。 TdataStringGrid.MergeSameColValue(ItemName,ItemCode);

(2) procedure MergeSameColValue(FldNames: Array of String; RelateFldName: string;

bDispIntervalColor: Boolean = False;RowColor1: TColor = 0; RowColor2: TColor = 0);该方法是用来合并同一列上相同的值,不过可以同时合并多列。FldName在这里是一个字符串数组,是要合并的多列的字段名。

(3)procedure MergeSameColValue(FldNames: Array of string; relateFldNames: Array of string; bDispIntervalColor: Boolean; RowColor1: TColor ; RowColor2: TColor); overload; 该方法是用来根据不同列的值合并数据。在这里FldName和relateFldNames都是字符串数组。

m) procedure SetRowReadOnly (ARow: Integer; Value: Boolean) 方法

该方法是指定某行为只读。ARow为行号,Value为True则该行为只读,为False则该行不只读。

n) SelectRow(ARow: Integer) 、SelectCol(ACol: Integer) 和 SelectAllCell方法 SelectRow方法是选定指定的行,ARow为行号。SelectCol方法是选定指定的列,Acol为列数。SelectAllCell方法是选定所有单元格。

o) SetRowColor(intRow: integer; AColor: TColor;bKeepColumnColor: Boolean = False) 方法

SetRowColor方法是用来指定某一行的颜色,intRow为指定的行号。Bkeep-ColumnColor为是否保持已经有颜色的列的原有颜色不变,True为保持原有的列的颜色不变,False为统一改变该行颜色。

p) Function GetFieldIndex(AFieldName: string): integer 方法

该方法是用来通过字段名得到字段在Column列表中的序号。AFieldName为字段名。 q) function GetRecordCount: integer 方法

该方法是用来得到在TdataStringGrid中对象的记录数。即GetRecordCount =RowCount-1