Delphi中DBGridEh的用法.docx
- 文档编号:12853911
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:20
- 大小:27.89KB
Delphi中DBGridEh的用法.docx
《Delphi中DBGridEh的用法.docx》由会员分享,可在线阅读,更多相关《Delphi中DBGridEh的用法.docx(20页珍藏版)》请在冰点文库上搜索。
Delphi中DBGridEh的用法
先介绍表格EXDBGird,因为继承DBGridEh,原本就是继承DBGrid的,但DBGridEh
功能更强,就沾沾光吧,这部分就不说了,下面介绍的功能或未实现,但先写出来。
DBGridEh是要交费的,请自觉交费。
ShowID------显示记录号,options-dgIndicator同时为true
IDAlignment------显示记录号对齐方式
IDFont------显示记录号字体
目前为止未见到完美显示记录号的数据表格,这是本人制作此控件的目标,
新版的记录号是自行计算和维护的。
ShowRecID------未实现,取代与记录号有关的功能
------Alignment对齐方式
------Font字体
------Visible是否显示
ShowRecCount------在左下角现实总行数,FootrRowCount必须大于等于1
------Color背景色
------Font字体
------Visible是否显示
------(Alignment)与记录号共用
LeftRightRoll------按左右键移动光标会滚到上或者下一行
CHNCurrencyStyle-----中国式财务金额栏,新版重新设计与网内流行的设计有区别
------Color背景色
------Currency字体
------CurrencySymbol货币符号
------CurrencySymbolAligned货币符号对齐方式,设为true时总在最左列
------CurrencyTitle标题
------CurrencyTitleFont标题字体
------DecimalNumber小数位数
------DecimalSeparatorColor小数分隔线的颜色
------GridLineColor间隔线颜色
------GridLineWidth间隔线宽度
------kilobitSeparatorColor千位线颜色
------Margin数字与相邻间隔线的距离,可以设为负数,让间隔线更密
------NegativeColor负数的颜色
------NegativeFont负数的字体
------ShowCurrencyTitle是否显示标题,可能要设置表格的TitleHeight
------ShowNegativeColor是否使用负数颜色
------ShowNegativeFont是否使用负数字体
------ShowNegativeSign负数是否显示负号
------TextLayout数字对齐方式
------ZeroEmpty数据为0时是否显示
要显示中国式财务金额栏,还需要在表格的Columns属性选择一个字段,
将DisplayCHNCurrency设为真,把MaxWidth也设置一下,以限制宽度。
DrawFocusRect------激活时是否显示虚线框,版没特别做出来的
功能,一个表格设置禁止之后,窗口里面其它表格都会禁止显示。
其它一些属性
AutoFitColWidths------自动调整列宽
EvenRowColor,OddRowColor------显示单双行颜色,经过改进,在插入数据
的状态下,仍能正常显示单双行颜色,因为是从自己计算的记录号推算的。
OptionEh------DBGridEh的一些设置
------dghFixed3D控制标题的3D效果
------dghFitRowHeightToText让行高紧密些
------dghEnterAsTab回车键具备Tab键下一格功能,经过改进,Enter键
移到下一格会避开禁止修改的列,例如显示计算字段的列,在表格的右下
角时,按Enter键会新增空行。
与Shift同时按下,移到上一格。
dghRowHighlight------当前行显示高亮度
其它功能
TAB键------一般Tab键可以在窗口各控件间穿梭,进入表格之后被俘获,只能
在表格的格子间移动,经过改进,Tab键可以再次跳出表格的格子,重新
回到窗口的其它控件。
在表格内会避开禁止修改的列。
Enter键------见上。
方向键------避开禁止修改的列,在表格的右下角时,按右方向键会新增空行。
翻页键------在表格底部,按下翻页键时会新增空行。
没有数据------本表格没有数据时,自动出现空行。
Insert------插入数据,插入的数据自动移到表格底部,这是数据集决定的
Delete------出现删除数据对话框,用鼠标在Indicator上按鼠标左键可选择多
行,按下Delete键即可删除多行数据,并显示删除进度,允许中止删除。
嵌入控件说明,本表格可以真正嵌入专用的控件,编程时要将这种控件直接放
在表格里面,不要放在外边,想在那些列显示控件,可设置控件的GridFields
属性,为相应的字段,表格会自动识别处理。
DBGridEh的用法
DBGRIDEH是Enlib组件包中的组件之一。
Enlib组件包是一位俄国人为增强Borland系列开发工具功能而开发的第三方组件,它具有界面友好、功能强大、开发效率高、、快速制作预览/打印简单中国式报表等特点。
因此,一推出即受到广大Borland程序员的青睐。
目前这个版本支持BorlandDelphiversions4,5,6&7和BorlandC++Builderversions4&5,可极大地提高数据库应用系统客户端的性能。
许多商品软件如《速达2000》等都使用了该组件。
下面本人将使用该组件在实际系统开发过程中的经验总结如下。
组件包中最重要而且功能最强大的莫过于dbgrideh组件,本文介绍的所有实例均在Delphi7开发环境下调试通过。
一、DBGridEh(增强型表格组件)功能详解
DBGridEh组件无论在外观上还是功能上都非常类似Borland开发工具中现有的dbgrid组件,它除了提供dbgrid组件的全部功能外,还增加了下列新功能:
●任意选择多行、列或矩形区域的数据.
●为多列标题设定共同的父标题行.
●表格底部(Footer)区显示求和、计数和其它统计信息.
●自动调整组件宽度与客户区域等宽.
●设置标题行、数据行的高度.
●超长的标题行、数据行文本自动折行处理.
●标题行可作为按钮使用,并可选择是否显示排序标志符(▽降序△升序).
●点击列标题可对当前列自动排序而无需编写代码.
●能够自动设置删除超长文本显示不下的多余部分,并以省略号(…)代替.
●自动搜索字段(Lookup)数据单元格以单、多列字段下拉列表形式显示.
●自动搜索字段(Lookup)数据单元格可进行增量搜索.
●可锁定任意列数在屏幕水平方向不滚动.
●日期时间控件DateTimepicker可支持TDateFieldandTDateTimeField两种日期格式.
●根据字段不同值显示关联的ImageList对象图片组中的图片.
●隐藏任意列.
●显示3D风格的数据区、表尾区和锁定滚动列,制作3D外观表格.
●显示Memo类型字段值.
●除BOOLEAN型数据外,其它数据类型也可以检查框(checkbox)形式显示数据.
●使用专门的函数和过程来存取以reg或ini文件格式保存的表格布局(包含各数据列表、数据列访问顺序、列宽、索引标识、行高等信息)文件。
●通过设置数据单元格的hint和ToolTips属性,当移动鼠标到该单元格时,可以显示单元格容纳不下的文本内容.
●将组件中数据导入/导出到Text,Csv,HTML,RTF,XLS和内部数据等多种格式的文件中.
DBGridEh组件主要属性见下表(其它属性参见dbgrid):
DBGridEh组件事件基本与DBGrid相同,在此不再赘述。
二、应用实例
组件包安装成功后,在系统的组件面板中会显示“enlib”组件包标签(如图1),添加DBGridEh到窗体的方法与其它组件一样。
在窗体中添加该组件后,请跟我一起来实现图2的一些特殊效果,具体属性设置请参考属性表的说明。
A、定制标题行
1、制作复杂标题行
标题行可设为2行以上高度,并可以为多列创建一个共同的父标题行。
为实现这个效果,需在各个列标题属性中以“|”分隔父标题和子标题,如办公用品包括代码和名称两部分,具体属性设置如下:
usemultititile=true;
titlelines=2
[0].:
='办公用品
代码';
[1].:
='办公用品
名称';
2、标题行显示图片
实现图2中的购买人标题行显示效果。
首先添加一个imagelist组件img1并在其中添加一组bmp,ico格式的图片。
然后将DBGridEh的TitleImages设置为img1.最后在需要显示图片的列标题的imageindex中设置需要显示的img1中图片的序号。
按F9执行一下程序,是不是很酷!
3、自动显示标题行的升降排序标志符(▽降序△升序)并做相应排序
DBGridEh组件可以在标题行单元格中显示小三角形升、降排序标志符图片,在运行时可点击标题行,图片自动切换并做相应排序。
具体属性设置如下:
OptionsEh=dghAutoSortMarking
SortMarkedColumns为当前排序列可在运行时使用.
然后在该列的ontitleclick事件中添加代码:
procedure(Sender:
TObject;ACol:
Integer;Column:
TColumnEh);
var
sortstring:
string;6、锁定多列不滚动
当表格水平方向信息在一屏幕显示不下时,此项功能非常有用。
例如,工资表格中包含姓名、基本工资、绩效工资等信息一屏幕显示不下,需要通过移动水平滚动条显示下一屏信息。
如果不锁定关键字段列如姓名,则移动到下一屏时就不知道此条记录对应的姓名。
因此,在实际应用中经常需锁定多列不滚动。
例:
姓名字段为表格第二列,则设置FrozenCols=2.这样当一屏幕显示不下,通过移动水平滚动条显示下一屏信息时,表格前两列不滚动,作为参照列。
D、导入/导出数据
导入/导出数据在实际处理过程中是比较烦琐的。
但是提供了一系列函数让你轻松实现此功能,而且支持的文件格式很多:
Text,Csv,HTML,RTF,XLS和内部数据格式。
除此之外,还可对任意选择的数据区域进行操作。
函数如下:
Pascal:
SaveDBGridEhToExportFile(TDBGridEhExportAsText,DBGridEh1,'c:
\temp\',False);
C++:
SaveDBGridEhToExportFile(__classid(TDBGridEhExportAsText),DBGridEh1,"c:
\\temp\\",false);
说明:
其中false参数表示导出的是选中的局部数据区域数据,true则为整个表格数据。
例:
将当前表格中数据导出为EXCEL等格式文件。
在窗体中添加一个SaveDialog组件和“导出”按钮B_exp,在“导出”按钮的click事件中添加如下代码:
procedure(Sender:
TObject);
var
ExpClass:
TDBGridEhExportClass;
Ext:
String;
begin
:
='file1';
if(ActiveControlisTDBGridEh)then
ifthen
begin
caseof
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,Length-2,3))<>UpperCase(Ext)then
:
=+'.'+Ext;
SaveDBGridEhToExportFile(ExpClass,DBGridEh1,,False);
通过笔者上述介绍,想必你已经对Enlib组件包产生好感而且越越欲试了,那就赶快下载使用吧。
但是,使用一段时间并且喜欢上它后,你又有新的问题产生了,那就是为了保持界面风格一致,能否将已经开发完成的应用程序中的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、重新编译应用程序。
以上只是本人在实际程序开发过程中使用dbgrideh组件的一些体会,当然其功能还远不止这些。
欢迎朋友与我做进一步交流。
【原作者联系方式】
Ehlib的颜色控制及打印
很多说根据条件在数据网格中显示不同颜色的说法都是在DrawColumnCell事件里,这样显示没有问题,但在ehlib中如果想打印出来可就不行了。
ehlib提供了GetCellParams事件,可以显示和打印
//只能显示,不能打印
procedure(Sender:
TObject;
constRect:
TRect;DataCol:
Integer;Column:
TColumnEh;
State:
TGridDrawState);
var
OldColor,OldColumnColor:
TColor;
v:
TColCellParamsEh;
begin
{ OldColor:
=;
if='填制调单时间')then
if'填制调单时间').AsDateTime>'应发货时间').AsDateTime)then
begin
illColCellParams()
if='移交时间')then
if'移交时间').AsDateTime>'应移交时间').AsDateTime)then
:
=clRed;
if='填制运输单时间')then
if'填制运输单时间').AsDateTime>'填制调单时间').AsDateTime)then
:
=clRed;
(Rect,DataCol,Column,State);
}
end;
//可以显示,可以打印
procedure(Sender:
TObject;
Column:
TColumnEh;AFont:
TFont;varBackground:
TColor;
State:
TGridDrawState);
var
OldColor,OldColumnColor:
TColor;
v:
TColCellParamsEh;
begin
sDateTime>'应发货时间').AsDateTime)then
:
=clRed;
if='移交时间')then
if'移交时间').AsDateTime>'应移交时间').AsDateTime)then
:
=clRed;
if='填制运输单时间')then
if'填制运输单时间').AsDateTime>'填制调单时间').AsDateTime)then
:
=clRed;
if='实际到货时间')then
if'实际到货时间').AsDateTime>'要求到货时间').AsDateTime)then
:
=clRed;
AllbelowtextinequaldegreespertainsastoTDBGridEhcomponentastoTDBGridcomponent.
ATDBGridEhcontrolletsyouviewandeditrecordsinadatasetinatabulargridformat.
TDBGridEhdoesnotstorydataininitself,itonlyshowdatafromdatasetviaTDataLinkobject.EverydatabasecontrolhaveinternalTDataLinkobjecttointeractionwithdataset.YoucanconnectTDBGridEhtodatasetusingDataSourceproperty.IfyoualreadyuseTStringGridcomponentyoucanseethatdatashowsinTStringGridandinTDBGridEhverysimilarly,butmechanismthatusetoshowdatainTStringGridandinTDBGridEhverydifferent.InTStringGridcountofrowsisequalofrowsinarrayofstringswhileinTDBGridEh(andTDBGrid)countofrowsalwaysnotmorethencountofvisiblerowsandalthoughverticalscrollbarcandisplaythumbpositionregardingthecountofrecordindatasetittakeinfonotfromgridbutdirectlyfromdataset.TDataSetdon'tallowsustoworkwithdataaswitharrayofdata.wecannotquicklygetvalueofthefieldfromcertainrecord,sometypesofdatasethavenotevensuchnotionasrecordnumber(insuchdatasetswecanonlyknowthatweinhereinthebeginofdatasetorintheendofitsorsomewherebetween,inthatcaseDBGridshowsverticalverticalscrollbaronlyinthreepositions).ButtohavepossibilitytodrawseveralrecordsimultaneouslyTDataLinkobjectallowstohavebufferofrecords(recordbufferwindow)withquickreadonlyaccess.DBGridusethispossibilityofdatalinkandsetsizeofrecordbufferwindowequalofcountofvisiblerowsingrid.Wecannotcontrolwhatrecordmustbefirstinthisbuffer,DataLinkitselfscrollrecordbufferwindowthenwenavigatethroughthedatasetanditcontrolthescrollingofrecordbufferwindowasthattheactiverecordasalwaysinrecordbufferwindow.Itisareasonwhytheactiverecordchangepositionwhenuserschangethumbpositionofverticalscrollbarusingmouse.
TDBGridEh和纵向滚动条
IfyouworkswithdifferenttypeofdatasetyoucannoticethatforsometypeofdatasetDBGridshowverticalscrollbarvalidlybutforoververticalscrollbarhaveonlythreepositionindependentlyofrecordcountindataset.TosetverticalscrollbaraccomodationDBGriduseRecordCountandRecNopropertyofDataSetcomponent.Butsomedatasetandevensamedatasetundersomeconditionholds-1inRecordCountandRecNo.DataSetfunctionIsSequencedindicateswhethertheunderlyingdatabasetableusesrecordnumberstoindicatetheorderofrecords.WhenIsSequencedreturnsTrue,applicationscansafelyusetheRecNopropertytonavigatetorecordsinthedatasetandDBGriduseRecNopropertytoshowthumbpositioninverticalscrollbar.Butwhen
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Delphi DBGridEh 用法