Ehlib使用大全
一、DBGridEh
1.主要功能
DBGridEh组件无论在外观上还是功能上都非常类似Borland开发工具中现有的dbgrid组件,它除了提供dbgrid组件的全部功能外,还增加了下列新功能:
任意选择多行、列或矩形区域的数据.
为多列标题设定共同的父标题行.
表格底部(Footer 显示求和、计数和其它统计信息.
自动调整组件宽度与客户区域等宽.
设置标题行、数据行的高度.
超长的标题行、数据行文本自动折行处理.
标题行可作为按钮使用,并可选择是否显示排序标志符(降序升序).
点击列标题可对当前列自动排序而无需编写代码.
能够自动设置删除超长文本显示不下的多余部分,并以省略号()代替.
自动搜索字段(Lookup)数据单元格以单、多列字段下拉列表形式显示.
自动搜索字段(Lookup)数据单元格可进行增量搜索.
可锁定任意列数在屏幕水平方向不滚动.
日期时间控件DateTime picker 可支持TDateField and TDateTimeField两种日期格式.
根据字段不同值显示关联的ImageList 对象图片组中的图片.
隐藏任意列.
显示3D风格的数据区、表尾区和锁定滚动列,制作3D外观表格.
显示Memo类型字段值.
BOOLEAN型数据外,其它数据类型也可以检查框( checkbox )形式显示数据.
使用专门的函数和过程来存取以regini文件格式保存的表格布局(包含各数据列表、数据列访问顺序、列宽、索引标识、行高等信息)文件。
通过设置数据单元格的hintToolTips属性,当移动鼠标到该单元格时,可以显示单元格容纳不下的文本内容.
将组件中数据导入/导出到Text, Csv, HTML, RTF, XLS 和内部数据等多种格式的文件中.
2.主要属性
DBGridEh组件主要属性见下表(其它属性参见dbgrid):
DBGridEh组件事件基本与DBGrid相同,在此不再赘述。
3.应用实例
3.1定制标题行
3.1.1制作复杂标题行
标题行可设为2行以上高度,并可以为多列创建一个共同的父标题行。为实现这个效果,需在各个列标题属性中以分隔父标题和子标题,如办公用品包括代码和名称两部分,具体属性设置如下:
Ehlib属性usemultititile=true;
Ehlib属性titlelines=2
EhlibColumn属性赋值
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格式的图片。
然后将DBGridEhTitleImages设置为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].TitleButtontrue
切记lookup型字段不可做上述设置,否则系统会提示错误。
TitleBtnClick事件中增加以下代码
procedure TfrmScoreInput.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;
  case Column.Title.SortMarker of
        smNoneEh:
          begin
            Column.Title.SortMarker := smUpEh;
            TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort :=
              FieldName;
          end;
        smUpEh:
          begin
            Column.Title.SortMarker := smDownEh;
            TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort :=
              FieldName + ' DESC';
          end;
        smDownEh:
          begin
            Column.Title.SortMarker := smNoneEh;
            TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort :=
            FieldName ;
          end;
      end;
end;
3.2定制表格底部(footer)区域的汇总统计行
DBGridEh 组件可以在表格底部显示汇总行,如记录数合计、列字段累加和等信息,具体属性设置如下:
DBGridEh的属性FooterRowCount中设置底部显示的行数;FooterColorFooterFont中设置显示的颜和字体
然后在DBGridEhColumns中某一列的属性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中添加提示信息,也要求是一行为一个值,并设tooltiptrue
那么,运行时当鼠标移动到该数据单元格时在显示图片的同时还显示提示信息,怎么样,功能够强大吧!可使用空格键或鼠标切换下一张图片,图片切换的同时也改变了实际存储数据值。也可通过shift+空格或鼠标切换为上一张图片。这样就实现了上下两个方向图片切换。
3.3.2显示检查框(checkbox)外观
对于Boolean型字段值在dbgrideh组件中自动显示为检查框。通常情况下我们需将非Boolean型字段值也此外观显示,如性别字段为字符型,字段值为男性时为选中,标志图片大全女性时为未选中。需要在keylist编辑器中设置实际存储数据值,第一行为选中时的值“1”,第二行为未选中的值“0”,第三行为其它值“2”,支持三态显示。
3.3.3显示单、多列下拉列表
根据单元格字段值显示与其相关的其它表字段内容,如部门代码字段显示为部门名称。首先需在当前表中新建立一个lookup型字段,设置好关联表的字段和返回字段。多列下拉列表需在单列基础上做进一步设置,在LookupDisplayFields中以号将关联表中多个字段分隔开,而且返回字段必须作为其中的第一项。具体设置如下:

dropdownshowtitlestrue
dropdownsizingtrue
dropdownwidth-1

例:当前表中只有部门代码无部门名称列,需与部门表建立关联,当点击单元格时以部门代码、部门名称两列下拉列表形式显示。