Ehlib使用大全解析.docx
《Ehlib使用大全解析.docx》由会员分享,可在线阅读,更多相关《Ehlib使用大全解析.docx(11页珍藏版)》请在冰豆网上搜索。
Ehlib使用大全解析
Ehlib使用大全
一、DBGridEh
1.主要功能
DBGridEh组件无论在外观上还是功能上都非常类似Borland开发工具中现有的dbgrid组件,它除了提供dbgrid组件的全部功能外,还增加了下列新功能:
●任意选择多行、列或矩形区域的数据.
●为多列标题设定共同的父标题行.
●表格底部(Footer)区显示求和、计数和其它统计信息.
●自动调整组件宽度与客户区域等宽.
●设置标题行、数据行的高度.
●超长的标题行、数据行文本自动折行处理.
●标题行可作为按钮使用,并可选择是否显示排序标志符(▽降序△升序).
●点击列标题可对当前列自动排序而无需编写代码.
●能够自动设置删除超长文本显示不下的多余部分,并以省略号(…)代替.
●自动搜索字段(Lookup)数据单元格以单、多列字段下拉列表形式显示.
●自动搜索字段(Lookup)数据单元格可进行增量搜索.
●可锁定任意列数在屏幕水平方向不滚动.
●日期时间控件DateTimepicker可支持TDateFieldandTDateTimeField两种日期格式.
●根据字段不同值显示关联的ImageList对象图片组中的图片.
●隐藏任意列.
●显示3D风格的数据区、表尾区和锁定滚动列,制作3D外观表格.
●显示Memo类型字段值.
●除BOOLEAN型数据外,其它数据类型也可以检查框(checkbox)形式显示数据.
●使用专门的函数和过程来存取以reg或ini文件格式保存的表格布局(包含各数据列表、数据列访问顺序、列宽、索引标识、行高等信息)文件。
●通过设置数据单元格的hint和ToolTips属性,当移动鼠标到该单元格时,可以显示单元格容纳不下的文本内容.
●将组件中数据导入/导出到Text,Csv,HTML,RTF,XLS和内部数据等多种格式的文件中.
2.主要属性
DBGridEh组件主要属性见下表(其它属性参见dbgrid):
DBGridEh组件事件基本与DBGrid相同,在此不再赘述。
3.应用实例
3.1定制标题行
3.1.1制作复杂标题行
标题行可设为2行以上高度,并可以为多列创建一个共同的父标题行。
为实现这个效果,需在各个列标题属性中以“|”分隔父标题和子标题,如办公用品包括代码和名称两部分,具体属性设置如下:
●Ehlib属性usemultititile=true;
●Ehlib属性titlelines=2
●Ehlib的Column属性赋值
DBGridEh.Columns[0].Title.Caption:
='办公用品|代码';
DBGridEh.Columns[1].Title.Caption:
='办公用品|名称';
或
Field1.DisplayLabel:
='Title1|SubTitle1';
Field2.DisplayLabel:
='Title1|SubTitle2';
3.1.2标题行显示图片
●首先添加一个imagelist组件img1并在其中添加一组bmp,ico格式的图片。
●然后将DBGridEh的TitleImages设置为img1.
●最后在需要显示图片的列标题的imageindex中设置需要显示的img1中图片的序号。
3.1.3自动排序并显示标记(▽降序△升序)
DBGridEh组件可以在标题行单元格中显示小三角形升、降排序标志符图片,在运行时可点击标题行,图片自动切换并做相应排序。
1)设置全部列为排序字段,具体属性设置如下:
●DBGridEh.ColumDefValues.Titles.TitleButton:
=True;
●DBGridEh.[OptionsEh].dghAutoSortMarking属性设为True
●DBGridEh.SortLocal:
=True;
2)设置部分列为排序字段,具体设置如下
●DBGridEh.[OptionsEh].dghAutoSortMarking属性设为True
●DBGridEh.[Columns].[Title].TitleButton=true
切记lookup型字段不可做上述设置,否则系统会提示错误。
●在TitleBtnClick事件中增加以下代码
procedureTfrmScoreInput.DBGridEh2TitleBtnClick(Sender:
TObject;
ACol:
Integer;Column:
TColumnEh);
var
FieldName:
String;
begin
{self.DBGridEh2.RestoreGridLayoutIni(FIniFileName,self.FSectionName,[grpColIndexEh,grpColWidthsEh,grpSortMarkerEh,
grpColVisibleEh,grpRowHeightEh,grpDropDownRowsEh,grpDropDownWidthEh]);}
fieldName:
=Column.FieldName;
caseColumn.Title.SortMarkerof
smNoneEh:
begin
Column.Title.SortMarker:
=smUpEh;
TCustomADODataSet((SenderasTDBGridEh).DataSource.DataSet).Sort:
=
FieldName;
end;
smUpEh:
begin
Column.Title.SortMarker:
=smDownEh;
TCustomADODataSet((SenderasTDBGridEh).DataSource.DataSet).Sort:
=
FieldName+'DESC';
end;
smDownEh:
begin
Column.Title.SortMarker:
=smNoneEh;
TCustomADODataSet((SenderasTDBGridEh).DataSource.DataSet).Sort:
=
FieldName;
end;
end;
end;
3.2定制表格底部(footer)区域的汇总统计行
DBGridEh组件可以在表格底部显示汇总行,如记录数合计、列字段累加和等信息,具体属性设置如下:
●在DBGridEh的属性FooterRowCount中设置底部显示的行数;FooterColor和FooterFont中设置显示的颜色和字体
●然后在DBGridEh的Columns中某一列的属性Footers的编辑器中添加一个或多个显示列
●设置此显示列的Value属性,它为此汇总区的Caption;
●设置此显示列的ValueType属性
显示列可以是字段值累加和、记录数合计、字段值或静态文件等集合类型,可以在设计时在中设置,也可在运行时通过设置Footers[i].ValueType指定其类型。
其含义见下表:
●设置DBGridEh.SumList.Active为True,才会进行汇总统计运算。
需注意的是,如显示类型为不是当前列的累加和,则需在fieldname属性中指定汇总列,其它类型则无此要求。
在FormCloseQuery事件中,一定要将SumList.Active:
=False,因为在数据集中的数据多了以后,FormClose会让DBGridEh释放所有EhLib资源,会使得退出很慢,所以将SumList.Active:
=False不会引起退出很慢
3.3定制表格数据单元外观
3.3.1根据不同字段值显示相应的小图片
●如根据库存材料的不同状态在数据单元格中显示相应图片,具体设置如下:
添加一个imagelist组件img1并在其中添加一组bmp,ico格式的图片。
●然后将需要显示图片的列的imagelist属性设置为img1;
●在keylist属性中添加实际数据存储值,一行为一个值,切记一定要与imagelist中图片顺序一一对应,否则会张冠李戴,面目全非。
●还可在picklist中添加提示信息,也要求是一行为一个值,并设tooltip为true,
那么,运行时当鼠标移动到该数据单元格时在显示图片的同时还显示提示信息,怎么样,功能够强大吧!
可使用空格键或鼠标切换下一张图片,图片切换的同时也改变了实际存储数据值。
也可通过shift+空格或鼠标切换为上一张图片。
这样就实现了上下两个方向图片切换。
3.3.2显示检查框(checkbox)外观
对于Boolean型字段值在dbgrideh组件中自动显示为检查框。
通常情况下我们需将非Boolean型字段值也此外观显示,如性别字段为字符型,字段值为“男性”时为选中,“女性”时为未选中。
需要在keylist编辑器中设置实际存储数据值,第一行为选中时的值“1”,第二行为未选中的值“0”,第三行为其它值“2”,支持三态显示。
3.3.3显示单、多列下拉列表
根据单元格字段值显示与其相关的其它表字段内容,如部门代码字段显示为部门名称。
首先需在当前表中新建立一个lookup型字段,设置好关联表的字段和返回字段。
多列下拉列表需在单列基础上做进一步设置,在LookupDisplayFields中以“;”号将关联表中多个字段分隔开,而且返回字段必须作为其中的第一项。
具体设置如下:
dropdownshowtitles=true
dropdownsizing=true
dropdownwidth=-1
例:
当前表中只有部门代码无部门名称列,需与部门表建立关联,当点击单元格时以部门代码、部门名称两列下拉列表形式显示。
3.3.4显示日历下拉列表
Date和DateTime类型字段值均可以此形式显示。
外观与编辑框无异,当点击该单元格时,右侧会出现“▽”符号,点击之即可出现日历下拉列表。
有时不希望出现日历下拉列表,只需设置Column.ButtonStyle属性为cbsNone即可,此方法同样适用于其它组件不以特殊外观显示的情况。
3.3.53D或平面外观效果
设置OptionsEh属性中fixed,frozen,footer和datarows等属性表格外观为3D效果,设置flat为true则为平面外观效果.
3.3.6锁定多列不滚动
当表格水平方向信息在一屏幕显示不下时,此项功能非常有用。
例如,工资表格中包含姓名、基本工资、绩效工资等信息一屏幕显示不下,需要通过移动水平滚动条显示下一屏信息。
如果不锁定关键字段列如姓名,则移动到下一屏时就不知道此条记录对应的姓名。
因此,在实际应用中经常需锁定多列不滚动。
例:
姓名字段为表格第二列,则设置FrozenCols=2.这样当一屏幕显示不下,通过移动水平滚动条显示下一屏信息时,表格前两列不滚动,作为参照列。
3.3.7设置数据行高度
使用RowHeight和RowLines属性来指定数据行高。
完整的数据行高=行线高度+行高。
设置RowSizingAllowed为True以允许可以在运行是使用鼠标来改变行高。
3.3.8显示备注字段
设置DrawMemoTexttoTrue来显示文本式的备注字段。
.
从注册表或ini文件中保存或恢复网格和列的层次。
3.3.9自动填充网格列宽到网格客户区
设置AutoFitColWidths为True以自动重置列宽来设置网格的宽度等于客户区宽度。
MinAutoFitWidth属性决定网格的最小宽度,列宽将会被重新计算。
3.3.10从注册表或ini文件中保存或恢复网格和列的层次。
●RestoreColumnsLayout-从注册表中恢复列的次序,宽度,排序标志。
●RestoreColumnsLayoutIni-从ini文件中恢复列的次序,宽度,排序标志。
●RestoreGridLayout-从注册表中恢复列的次序,宽度,可视,排序标志,排序索引或行高。
●RestoreGridLayoutIni-从ini文件中恢复列的次序,宽度,可视,排序标志,排序索引或行高。
●SaveColumnsLayout-保存列的次序,宽度,排序标志到注册表中。
●SaveColumnsLayoutIni-保存列的次序,宽度,排序标志到ini文件中。
●SaveGridLayout-保存列的次序,宽度,可视,排序标志,排序索引或行高到注册表中。
●SaveGridLayoutIni-保存列的次序,宽度,可视,排序标志,排序索引或行高到ini文件中。
3.3.11定制单元格字体及颜色
●TDBGridEh中的Font和Color属性描述了数据网格中绘制单元格的字体和颜色。
●TColumnEh中的Font和Color属性描述了指定列中绘制单元格的字体和颜色。
●事件定制单元格字体及颜色
你可以写TDBGridEh的OnDrawColumnCellEvent事件句柄来在控制在网格单元中绘制数据。
你可以使用Canvas属性的方法来绘制单元格。
但是如果你只想改变字体或颜色的属性,我建议你使用下面的事件。
你可以写TDBGridEh的OnGetCellParams事件来控制在绘制数据单元以前所指定的操作。
你可以改变绘制字体及背景色。
这个事件适合你在想改变整行的字体或颜色时使用。
如果你想改变指定列中单元格的属性,你可以使用TColumnEh.OnGetCellParams。
写这个事件用来控制在一列数据单元被重绘或编辑时的操作。
在一列数据单元被重绘以前,你可以改变绘制字体,背景色,对齐方式,图像索引,文本或检查框。
在编辑一列数据单元以前,你可以改变编辑字体,背景色,文本或只读状态。
3.3.12设置编辑器颜色和字体
Inplace编辑器可以设置数据单元的颜色和字体。
数据单元使用OnGetCellParams事件来控制列的颜色和字体。
Inplace编辑器在行高>一行的高度时自动设置为多行模式并且将列的属性WordWrap设置为True.
3.3.13合并重复单元格
设置某一列Column的HideDuplicates属性为True
3.4操作表格中的数据
3.4.1导入/导出数据
导入/导出数据在实际处理过程中是比较烦琐的。
但是Enlib3.0提供了一系列函数让你轻松实现此功能,而且支持的文件格式很多:
Text,Csv,HTML,RTF,XLS和内部数据格式。
除此之外,还可对任意选择的数据区域进行操作。
函数如下:
Pascal:
SaveDBGridEhToExportFile(TDBGridEhExportAsText,DBGridEh1,'c:
\temp\file1.txt',False);
C++:
SaveDBGridEhToExportFile(__classid(TDBGridEhExportAsText),DBGridEh1,"c:
\\temp\\file1.txt",false);
说明:
其中false参数表示导出的是选中的局部数据区域数据,true则为整个表格数据。
例:
将当前表格中数据导出为EXCEL等格式文件。
在窗体中添加一个SaveDialog组件和“导出”按钮B_exp,在“导出”按钮的click事件中添加如下代码:
procedureTForm1.B_expClick(Sender:
TObject);
var
ExpClass:
TDBGridEhExportClass;
Ext:
String;
begin
SaveDialog1.FileName:
='file1';
if(ActiveControlisTDBGridEh)then
ifSaveDialog1.Executethen
begin
caseSaveDialog1.FilterIndexof
1:
beginExpClass:
=TDBGridEhExportAsText;Ext:
='txt';end;
2:
beginExpClass:
=TDBGridEhExportAsCSV;Ext:
='csv';end;
3:
beginExpClass:
=TDBGridEhExportAsHTML;Ext:
='htm';end;
4:
beginExpClass:
=TDBGridEhExportAsRTF;Ext:
='rtf';end;
5:
beginExpClass:
=TDBGridEhExportAsXLS;Ext:
='xls';end;
else
ExpClass:
=nil;Ext:
='';
end;
ifExpClass<>nilthen
begin
ifUpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-2,3))<>UpperCase(Ext)then//判断扩展名是否一致
SaveDialog1.FileName:
=SaveDialog1.FileName+'.'+Ext;
SaveDBGridEhToExportFile(ExpClass,DBGridEh1,SaveDialog1.FileName,False);
//其中false为局部数据
end;
end;
end;
3.4.2选择数据
TDBGridEh允许在选定的区域上进行选择记录,列以及矩形区域等操作:
允许多选会影响下面这些属性:
Options选项中的dgMultiSelect属性-设置是否允许多选。
Options选项中的dghClearSelection属性-设置在用户移到下一个单元时是否清除已选记录。
Options选项中的EditActions属性-设置用户可以在已选记录上执行哪些操作(比如,拷贝,剪切,删除,粘贴,全选等)。
Options选项中的AllowedSelections属性-设置允许选定记录的类型(比如,行,列,矩形区域等)。
Options选项中的Selection属性-设置一个当前的多选状态,已选记录,列或矩形区域以及存取它们的属性和函数。
1.区域选择:
Options.dgMultiSelect=True
Options.dgRowSelect=False
AllowedSelections=(比如,行,列,矩形区域等)
3.4.3增量搜索
TDBGridEh允许用户在网格列中实现特定的“增量”搜索。
当用户进入增量搜索时他可以显示字符以及网格,并且在当前的列中查找文本。
使用dghIncSearch和dghPreferIncSearch的值(在OptionsEh选项中)在数据网格中操作增量搜索。
dghIncSearch值允许在数据网格中进行增量搜索。
运行时你能够使用下面的键进行增量搜索:
Ctrl+F-开始增量搜索。
Ctrl+Enter-查找下一个匹配记录。
Ctrl+Shift+Enter-查找前一个匹配记录。
如果OptionsEh选项中的dghIncSearch是只读的,那么网络将自动设置增量模式在第一次按键以及1.5秒后返回普通模式。
dghPreferIncSearch值决定网格设置自动增量搜索模式在第一次按键时替代单元编辑。
3.4.4查询过滤
1.按照每个字段查询
只需设计TDBGridEh的下列属性就行了
dbgrideh.STFilter.Local:
=true;
dbgrideh.STFilter.Visable:
=true;
2.以下拉列表框形式过滤
1)按照上面方式设置TDBGridEh的属性
2)设置某一列Column的STFilter属性
●DataField:
主数据源对应的字段
●KeyField:
ListSource二级数据源主键(关联到主数据源DataField的主键)
●ListField:
显示在下拉框的字段
●ListSource:
二级数据源
●Visible:
设为True
3)在单元文件加上以下代码
initialization
DBGridEhDefaultStyle.FilterEditCloseUpApplyFilter:
=True;
3.5将存在的DBGrid组件转换为DBGridEh组件.
能否将已经开发完成的应用程序中的DBGrid组件能否转换为DBGridEh组件,进行一次彻底革命?
答案是肯定的。
尽管DBGridEh并不是继承于CustomDBGrid组件,但是DBGridEh和DBGrid它们之间有许多相同之处.因此可以相互转换。
具体步骤如下:
1、在DelphiIDE下打开TDBGrid组件.
2、通过组合键Alt-F12将form以文本方式显示;
3、将所有TDBGrid对象名改变为TDBGridEh对象名,如:
DBGrid1:
TDBGrid改为DBGrid1:
TDBGridEh;
4、再次通过组合键Alt-F12将文本方式恢复为form显示;
5、将form各相关事件中定义的所有TDBGrid改为TDBGrideh,如DBGrid1:
TDBGrid改为DBGrid1:
TDBGridEh;
6、重新编译应用程序。