




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
先介绍表格EXDBGird,因为继承DBGridEh,原本就是继承DBGrid 的,但DBGridEh功能更强,就沾沾光吧,这部分就不说了,下面介绍的功能或未实现,但先写出来。DBGridEh是 要交费的,请自觉交费。ShowID -显示记录号,options-dgIndicator同时为trueIDAlignment-显示记录号对齐方式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-激活时是否显示虚线框,DBGridEh3.6版没特别做出来的功能,一个表格设置禁止之后,窗口里面其它表格都会禁止显示。其它一些属性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 3.0组件包中的组件之一。Enlib 3.0组件包是一位俄国人为增强Borland系列开发工具功能而开发的第三方组件,它具有界面友好、功能强大、开发效率高、快速制作预览/打印简单中 国式报表等特点。因此,一推出即受到广大Borland程序员的青睐。目前这个版本支持Borland Delphi versions 4,5,67 和 Borland C+ Builder versions 4 & 5 ,可极大地提高数据库应用系统客户端的性能。许多商品软件如速达2000等都使用了该组件。下面本人将使用该组件在实际系统开发过程中的经验总结如 下。 Enlib3.0 组件包中最重要而且功能最强大的莫过于dbgrideh组件,本文介绍的所有实例均在Delphi 7开发环境下调试通过。一、DBGridEh(增强型 表格组件)功能详解DBGridEh组件无论在外观上还是功能上都非常类似Borland开发工具中现有的dbgrid组件,它除了提供 dbgrid组件的全部功能外,还增加了下列新功能: 任意选择多行、列或矩形区域的数据. 为多列标题设定共同的父标题行. 表格底部(Footer) 区显示求和、计数和其它统计信息. 自动调整组件宽度与客户区域等宽. 设置标题行、数据行的高度. 超长的标题行、数据行文本自动折行处理. 标题行可作为按钮使用,并可选择是否显示排序标志符(降序升序). 点击列标题可对当前列自动排序而无需编写代码. 能够自动设置删除超长文本显示不下的多余部分,并以省略号()代替. 自动搜索字段(Lookup)数据单元格以单、多列字段下拉列表形式显示. 自动搜索字段(Lookup)数据单元格可进行增量搜索. 可锁定任意列数在屏幕水平方向不滚动. 日期时间控件DateTime picker 可支持TDateField and TDateTimeField两种日期格式. 根据字段不同值显示关联的ImageList 对象图片组中的图片. 隐藏任意列. 显示3D风格的数据区、表尾区和锁定滚动列,制作3D外观表格. 显示Memo类型字段值. 除BOOLEAN型数据外,其它数据类型也可以检查框( checkbox )形式显示数据. 使用专门的函数和过程来存取以reg或ini文件格式保存的表格布局(包含各数据列表、数据列访问顺序、列宽、索引标识、行高等信息)文件。 通过设置数据单元格的hint和ToolTips属性,当移动鼠标到该单元格时,可以显示单元格容纳不下的文本内容. 将组件中数据导入/导出到Text, Csv, HTML, RTF, XLS 和内部数据等多种格式的文件中.DBGridEh组件主要属性 见下表(其它属性参见dbgrid):DBGridEh组件事件基本与DBGrid相同,在此不再赘述。二、应用实例Enlib3.0 组件包安装成功后,在系统的组件面板中会显示“enlib”组件包标签(如图1),添加DBGridEh到窗体的方法与其它组件一样。在窗体中添加该组件 后,请跟我一起来实现图2的一些特殊效果,具体属性设置请参考属性表的说明。A、定制标题行1、制作复杂标题行标题行可设为2行以上高 度,并可以为多列创建一个共同的父标题行。为实现这个效果,需在各个列标题属性中以“”分隔父标题和子标题,如办公用品包括代码和名称两部分,具体属性 设置如下:usemultititile=true;titlelines=2DBGridEh.Columns0.Title.Caption := 办公用品代码;DBGridEh.Columns1.Title.Caption := 办公用品名称;2、标题行显 示图片 实现图2中的购买人标题行显示效果。首先添加一个imagelist组件img1并在其中添加一组bmp,ico格式的图片。然后将 DBGridEh的TitleImages设置为img1.最后在需要显示图片的列标题的imageindex中设置需要显示的img1中图片的序号。按 F9执行一下程序,是不是很酷!3、自动显示标题行的升降排序标志符(降序升序)并做相应排序DBGridEh组件可以在标题行单元格中显示小三 角形升、降排序标志符图片,在运行时可点击标题行,图片自动切换并做相应排序。具体属性设置如下:OptionsEhdghAutoSortMarking Column.Title.TitleButtontrue SortMarkedColumns 为当前排序列可在运行时使用.然后在 该列的ontitleclick事件中添加代码:procedure TForm_Query.DBGridEh1TitleBtnClick(Sender: TObject; ACol: Integer; Column: TColumnEh);varsortstring:string; /排序列begin/进行排 序with Column dobeginif FieldName = thenExit;case Title.SortMarker ofsmNoneEh:beginTitle.SortMarker := smDownEh;sortstring := Column.FieldName + ASC;end;smDownEh: sortstring := Column.FieldName + ASC;smUpEh: sortstring := Column.FieldName + DESC;end;/进行排序trydataset.Sort := sortstring /dataset为实际数据集变量名exceptend;end;end;切记lookup型字段不可 做上述设置,否则系统会提示错误。另外,组件说明书中提到不需要编写代码即可自动排序,但是不编写代码自动排序方法我还没找到,有知道的朋友烦请告诉我一声 啊!让我也对程序代码进行“减肥”。 、定制表格底部(footer)区域的汇总统计行DBGridEh 组件可以在表格底部显示汇总行,如记录数合计、列字段累加和等信息。在FooterRowCount中设置底部显示的行数;然后在Footers 编辑器中添加一个或多个显示列,显示列可以是字段值累加和、记录数合计、字段值或静态文件等集合类型,可以在设计时在ValueType属性中设置,也可 在运行时通过设置Footers.ValueType指定其类型。其含义见下表:切记设置DBGridEh.SumList.Active 为 True,才会进行汇总统计运算。需注意的是,如显示类型为不是当前列的累加和,则需在fieldname属性中指定汇总列,其它类型则无此要求。 C、定制表格数据单元外观1、 根据不同字段值显示相应的小图片如根据库存材料的不同状态在数据单元格中显示相应图片,具体设置如下:添加一个imagelist组件 img1并在其中添加一组bmp,ico格式的图片。然后将需要显示图片的列的imagelist属性设置为img1;在keylist属性中添加实际数 据存储值,一行为一个值,切记一定要与imagelist中图片顺序一一对应,否则会张冠李戴,面目全非。还可在picklist中添加提示信息,也要求 是一行为一个值,并设tooltip为true,那么,运行时当鼠标移动到该数据单元格时在显示图片的同时还显示提示信息,怎么样,功能够强大吧!可使用 空格键或鼠标切换下一张图片,图片切换的同时也改变了实际存储数据值。也可通过shift+空格或鼠标切换为上一张图片。这样就实现了上下两个方向图片切 换。2、 显示检查框(checkbox)外观对于Boolean型字段值在dbgrideh组件中自动显示为检查框。通常情况下我们需将非Boolean 型字段值也此外观显示,如性别字段为字符型,字段值为“男性”时为选中,“女性”时为未选中。需要在keylist编辑器中设置实际存储数据值,第一行为 选中时的值“1”,第二行为未选中的值“0”,第三行为其它值“2”,支持三态显示。3、显示单、多列下拉列表根据单元格字段值显示与其相关的其它表 字段内容,如部门代码字段显示为部门名称。首先需在当前表中新建立一个lookup型字段,设置好关联表的字段和返回字段。多列下拉列表需在单列基础上做 进一步设置,在LookupDisplayFields中以“;”号将关联表中多个字段分隔开,而且返回字段必须作为其中的第一项。具体设置如下:dropdownshowtitlestrue dropdownsizingtruedropdownwidth-1 例:当前表中只有部门代码无部门名称列,需与部门表建立关联, 当点击单元格时以部门代码、部门名称两列下拉列表形式显示。4、显示日历下拉列表Date 和 DateTime类型字段值均可以此形式显示。外观与编辑框无异,当点击该单元格时,右侧会出现“”符号,点击之即可出现日历下拉列表。有时不希望出现 日历下拉列表,只需设置Column.ButtonStyle属性为 cbsNone即可,此方法同样适用于其它组件不以特殊外观显示的情况。5、3D或平面外观效果设 置OptionsEh属性 中fixed, frozen, footer 和 data rows等属性表格外观为3D效果,设置flat为true则为平面外观效果.6、锁定多列不滚动当表格水平方向信息在一屏幕显示不下时,此项功 能非常有用。例如,工资表格中包含姓名、基本工资、绩效工资等信息一屏幕显示不下,需要通过移动水平滚动条显示下一屏信息。如果不锁定关键字段列如姓名, 则移动到下一屏时就不知道此条记录对应的姓名。因此,在实际应用中经常需锁定多列不滚动。例:姓名字段为表格第二列,则设置FrozenCols=2. 这样当一屏幕显示不下,通过移动水平滚动条显示下一屏信息时,表格前两列不滚动,作为参照列。D、导入/导出数据导入/导出数据在实际处理过程中是 比较烦琐的。但是Enlib3.0提供了一系列函数让你轻松实现此功能,而且支持的文件格式很多:Text, Csv, HTML, RTF, XLS 和内部数据格式。除此之外,还可对任意选择的数据区域进行操作。函数如下:Pascal: SaveDBGridEhToExportFile(TDBGridEhExportAsText,DBGridEh1,c:tempfile1.txt,False);C+: SaveDBGridEhToExportFile(_classid(TDBGridEhExportAsText),DBGridEh1,c:tempfile1.txt,false);说明:其中 false参数表示导出的是选中的局部数据区域数据,true则为整个表格数据。例:将当前表格中数据导出为EXCEL等格式文件。在窗体中添加一 个SaveDialog组件和“导出”按钮B_exp,在“导出”按钮的click事件中添加如下代码:procedure TForm1.B_expClick(Sender: TObject);var ExpClass:TDBGridEhExportClass;Ext:String;beginSaveDialog1.FileName := file1;if (ActiveControl is TDBGridEh) thenif SaveDialog1.Execute thenbegincase SaveDialog1.FilterIndex of1: begin ExpClass := TDBGridEhExportAsText; Ext := txt; end;2: begin ExpClass := TDBGridEhExportAsCSV; Ext := csv; end;3: begin ExpClass := TDBGridEhExportAsHTML; Ext := htm; end;4: begin ExpClass := TDBGridEhExportAsRTF; Ext := rtf; end;5: begin ExpClass := TDBGridEhExportAsXLS; Ext := xls; end;elseExpClass := nil; Ext := ;end;if ExpClass nil thenbeginif UpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-2,3) UpperCase(Ext) thenSaveDialog1.FileName := SaveDialog1.FileName + . + Ext;SaveDBGridEhToExportFile(ExpClass,DBGridEh1,SaveDialog1.FileName,False);/ 其中false为局部数据end;end;end;E、将存在的DBGrid组件转换为DBGridEh组件. 通过 笔者上述介绍,想必你已经对Enlib组件包产生好感而且越越欲试了,那就赶快下载使用吧。但是,使用一段时间并且喜欢上它后,你又有新的问题产生了,那 就是为了保持界面风格一致,能否将已经开发完成的应用程序中的DBGrid组件能否转换为DBGridEh组件,进行一次彻底革命?答案是肯定的。尽管 DBGridEh并不是继承于CustomDBGrid组件, 但是DBGridEh和DBGrid它们之间有许多相同之处.因此可以相互转换。具体步骤如 下:1、在Delphi IDE下打开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组件的一些体会,当然其功能还远不止这些。欢迎朋友与我做进一步交流。【原作者联系方式】Email: Ehlib的 颜色控制及打印很多说根据条件在数据网格中显示不同颜色的说法都是在DrawColumnCell事件里,这样显示没有问题,但在 ehlib中如果想打印出来可就不行了。ehlib提供了GetCellParams事件,可以显示和打印只能显示,不能打印procedure TfrmQueryContractInfo.DBGrid1DrawColumnCell(Sender: TObject;const Rect: TRect; DataCol: Integer; Column: TColumnEh;State: TGridDrawState);varOldColor,OldColumnColor:TColor;v:TColCellParamsEh;begin OldColor:=DBGrid1.Canvas.Font.Color ;if (Column.Field.FieldName = 填制调单时间) thenif (DBGrid1.DataSource.DataSet.FieldByName(填制调单时间).AsDateTime DBGrid1.DataSource.DataSet.FieldByName(应发货时间).AsDateTime) thenbegin /v:=TColCellParamsEh.Create ; /Column.GetColCellParams(true,v); /v.Font.Color :=clRed; /Column.FillColCellParams(v); /v.Free; DBGrid1.Canvas.font.Color := clRed;end;/Column.GetColCellParams .FillColCellParams()if (Column.Field.FieldName = 移交时间) thenif (DBGrid1.DataSource.DataSet.FieldByName(移交时间).AsDateTime DBGrid1.DataSource.DataSet.FieldByName(应移交时间).AsDateTime) then DBGrid1.Canvas.Font.Color := clRed;if (Column.Field.FieldName = 填制运输单时间) thenif (DBGrid1.DataSource.DataSet.FieldByName(填制运输单时间).AsDateTime DBGrid1.DataSource.DataSet.FieldByName(填制调单时间).AsDateTime) then DBGrid1.Canvas.Font.Color := clRed;DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);DBGrid1.Canvas.Font.Color:=OldColor;end; 可以显示,可以打印procedure TfrmQueryContractInfo.DBGrid1GetCellParams(Sender: TObject;Column: TColumnEh; AFont: TFont; var Background: TColor;State: TGridDrawState);varOldColor,OldColumnColor:TColor;v:TColCellParamsEh;begin/OldColor:=DBGrid1.Canvas.Font.Color ;if (Column.Field.FieldName = 填制调单时间) thenif (DBGrid1.DataSource.DataSet.FieldByName(填制调单时间).AsDateTime DBGrid1.DataSource.DataSet.FieldByName(应发货时间).AsDateTime) then AFont.Color := clRed;if (Column.Field.FieldName = 移交时间) thenif (DBGrid1.DataSource.DataSet.FieldByName(移交时间).AsDateTime DBGrid1.DataSource.DataSet.FieldByName(应移交时间).AsDateTime) then AFont.Color := clRed;if (Column.Field.FieldName = 填制运输单时间) thenif (DBGrid1.DataSource.DataSet.FieldByName(填制运输单时间).AsDateTime DBGrid1.DataSource.DataSet.FieldByName(填制调单时间).AsDateTime) then AFont.Color := clRed;if (Column.Field.FieldName = 实际到货时间) thenif (DBGrid1.DataSource.DataSet.FieldByName(实际到货时间).AsDateTime DBGrid1.DataSource.DataSet.FieldByName(要求到货时间).AsDateTime) then AFont.Color := clRed;/DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);/DBGrid1.Canvas.Font.Color:=OldColor;end;TDBGridEh本 身就有的功能Demo中就有介绍以下是参考文档!3 使用 TDBGridEh 组件理解 TDBGridEh, TDataLink 以及 TDataSet. All below text in equal degrees pertains as to TDBGridEh component as to TDBGrid component.A TDBGridEh control lets you view and edit records in a dataset in a tabular grid format.TDBGridEh does not story data in in itself, it only show data from dataset via TDataLink object. Every database control have internal TDataLink object to interaction with dataset. You can connect TDBGridEh to dataset using DataSource property. If you already use TStringGrid component you can see that data shows in TStringGrid and in TDBGridEh very similarly, but mechanism that use to show data in TStringGrid and in TDBGridEh very different. In TStringGrid count of rows is equal of rows in array of strings while in TDBGridEh (and TDBGrid) count of rows always not more then count of visible rows and although vertical scrollbar can display thumb position regarding the count of record in dataset it take info not from grid but directly from dataset. TDataSet dont allows us to work with data as with array of data i.e. we can not quickly get value of the field from certain record, some types of dataset have not even such notion as record number (in such datasets we can only know that we inhere in the begin of dataset or in the end of its or somewhere between, in that case DBGrid shows vertical vertical scrollbar only in three positions). But to have possibility to draw several record simultaneously TDataLink object allows to have buffer of records (record buffer window) with quick readonly access. DBGrid use this possibility of datalink and set size of record buffer window equal of count of visible rows in grid. We can not control what record must be first in this buffer, DataLink itself scroll record buffer window then we navigate through the dataset and it control the scrolling of record buffer window as that the active record as always in record buffer window. It is a reason why the active record change position when users change thumb position of vertical scrollbar using mouse. TDBGridEh和纵向滚动 条 If you works with different type of dataset you can notice that for some type of dataset DBGrid show vertical scrollbar validly but for over vertical scrollbar have only three position independently of record count in dataset. To set vertical scrollbar accomodation DBGrid use RecordCount and RecNo property of DataSet component. But some dataset and even same dataset under some condition holds -1 in RecordCount and RecNo. DataSet function IsSequenced indicates whether the underlying database table uses record numbers to indicate the order of records. When IsSequenced returns True, applications can safely use the RecNo property to navigate to records in the dataset and DBGrid use RecNo property to show thumb position in vertical scrollbar. But when IsSequenced returns False DBGrid can not define current record position and show vertical scrollbar in three positions. DBGridEh component have possibility to show proportional scrollbar for no sequenced dataset. To do it need to activate SumList and create list of record bookmars. Set SumList.Active to True and SumList.VirtualRecords to Tru
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025安徽淮南联合大学招聘硕士研究生及以上人才14人模拟试卷及答案详解(典优)
- 2025河北邯郸冀南新区选聘农村党务(村务)工作者111人模拟试卷及答案详解(易错题)
- 2025江苏盐城市东台市教育局直属学校招聘教师、教练员58人考前自测高频考点模拟试题完整答案详解
- 2025年宿州学院高层次人才公开招聘39人考前自测高频考点模拟试题及答案详解(夺冠系列)
- 2025湖南邵阳市新宁县政协中心选调1人考前自测高频考点模拟试题及答案详解(夺冠系列)
- 2025广东揭阳市惠来县校园现场招聘教师70人考前自测高频考点模拟试题及答案详解(各地真题)
- 第1课 翰墨书香说课稿-2025-2026学年初中艺术·美术桂美版2024七年级上册-桂美版2024
- 河北省邯郸市八年级语文上册 第三单元 第9课 三峡说课稿 新人教版
- 1.1认识生物和生物学说课稿-2024-2025学年北师大版生物七年级上册
- 5.2 化学方程式2024-2025学年新教材九年级化学上册同步说课稿(人教版2024)河北专版
- 【MOOC】声乐作品赏析与演唱-扬州大学 中国大学慕课MOOC答案
- 锅炉节能器施工方案
- 2024版中国宪法课件
- 【MOOC】机械之美-神奇的矿冶机械(双语)-江西理工大学 中国大学慕课MOOC答案
- T-IAC CAMRA 47.3- 2022汽车覆盖件低碳维修技术规范 第3部分:车辆玻璃
- 《食品厂员工绩效方案》
- 工程人员驻场服务方案
- 信息技术居间协议书
- 2024年高考文综(政治)全国卷Ⅰ试卷及答案解析
- TSHZSAQS 00243-2024 新疆北疆免耕复播大豆高产栽培技术规程
- 山水情怀 课件-2024-2025学年高中美术人教版 (2019) 选择性必修2 中国书画
评论
0/150
提交评论