EhLib 10.2.42 for Delphi 12 Athens 安装配置与报表导出实战
发布时间:2026/10/29 1:07:47 锦皓数字建站

简介这份资源是面向Delphi 12 Athens开发者的EhLib VCL 10.2.42控件库安装包适合需要构建数据库应用、报表系统与图形化界面的中高级开发者使用。EhLib VCL提供EhDBGrid、EhDBNavigator等数据库组件EhReport、EhPrintPreview等报表组件以及EhGantt、EhDiagram等图形组件并涵盖日期时间处理、文件与颜色对话框、树形视图等实用控件可显著提升界面定制能力与运行性能。压缩包共1490个文件约25.56MB以dfm窗体、pas源码、dcu编译单元、hpp头文件、res资源、dpr与dproj工程文件为主另含doc、docx、chm、hlp等文档及示例数据库文件便于直接编译与查阅。目前已有348人学习下载。通过该组件库读者可获得完整的源码、示例工程与帮助文档快速掌握各控件的集成方式并借助开放API进行深度定制满足企业级项目的开发需求。1. EhLib 10.2.42 在 Delphi 12 Athens 里到底能省多少事上周帮朋友改一个老 ERP 的报表模块Grid 里要显示分组小计、冻结列、导出 Excel还要支持多行表头。他原来用 Delphi 自带 TDBGrid 硬扛代码写了八百多行滚动时还闪屏。我让他换成 EhLib 10.2.42同样的需求配置加少量事件代码半天收工。这就是 EhLib 这类 VCL 控件包存在的意义——它不改变你的数据访问层只是在 TStringGrid/TDBGrid 之上补了一层“企业级表格”的能力。EhLib 是 Delphi 生态里做数据网格和报表输出的老牌控件库VCL 版本主要包含 TDBGridEh、TDBSumList、TPrintDBGridEh、TDBGridEhImport、TDBGridEhExport 等组件。10.2.42 这个版本对应 Delphi 12 Athens 的编译环境安装后你会得到源码、设计期包和运行时包。它解决的核心问题很具体原生 Grid 做不了的分组统计、多级表头、列冻结、条件着色、打印预览、Excel/HTML/PDF 导出它都有现成实现。适合谁正在维护 Delphi 12 项目、需要快速交付报表和台账界面的开发者尤其是从 Delphi 7 升上来、不想重写 UI 层的那批人。2. 安装与包结构从 7z 解压到 IDE 里出现 TDBGridEh2.1 先看清压缩包里有什么拿到EhLib VCL 10.2.42 for Delphi 12 Athens.7z之后别急着双击安装。先解压到一个路径不含中文和空格的目录比如D:\Components\EhLib10。路径带空格是后面编译期报“找不到文件”的头号原因血泪经验。解压后典型结构如下不同打包方式可能略有差异以实际为准目录/文件作用Source控件全部源码含.pas和.dfmPackages设计期与运行时包工程按 Delphi 版本分目录Demos示例工程验证安装是否成功Help帮助文档Readme版本说明与安装顺序关键点EhLib 是源码交付意味着你可以直接改它的绘制逻辑也可以只编译需要的包。这和只给.bpl的控件包完全不同调试时能单步进源码排查显示异常方便很多。2.2 安装顺序不能乱Delphi 12 的包管理对依赖顺序敏感。正确顺序是先编译运行时包再编译设计期包最后安装设计期包。# 以命令行编译为例实际多数人在 IDE 里操作 # 1. 打开运行时包工程路径按实际解压位置调整 D:\Components\EhLib10\Packages\Delphi12\EhLibRun.dproj # 2. Build不是 Compile确保生成 bpl # 3. 再打开设计期包 D:\Components\EhLib10\Packages\Delphi12\EhLibDesign.dproj # 4. Build 后右键 Install逻辑说明运行时包Run提供控件本体设计期包Design依赖运行时包负责把控件注册到工具面板。如果先装设计期包IDE 会提示找不到EhLibRun.bpl。参数上Delphi 12 默认输出路径是C:\Users\Public\Documents\Embarcadero\Studio\23.0\Bpl确认这个目录在系统 PATH 里否则设计期加载会失败。2.3 验证安装是否真的成功装完别只看工具面板有没有图标。新建一个 VCL Application放一个TDBGridEh连上任意TDataSource编译运行。如果能在设计期看到列编辑器、能设置FooterRowCount说明注册正常。再打开Demos里任意一个工程编译能跑起来才算完整。我一般还会检查Tools Options Delphi Options Library里的搜索路径有没有自动加上Source目录没有就手动加否则新建工程引用时会报找不到单元。3. TDBGridEh 核心配置分组、冻结列与多级表头怎么落地3.1 分组小计不用写循环靠 Footer 和 SumList原生 TDBGrid 做分组小计你得在OnCalcFields里自己累加。EhLib 的思路是把统计交给TDBSumList和 Grid 的 Footer 机制。// 假设 DBGridEh1 已连接 DataSource1 procedure TForm1.FormCreate(Sender: TObject); begin // 开启脚部行用于显示合计 DBGridEh1.FooterRowCount : 1; // 指定哪一列参与求和 DBGridEh1.Columns[2].Footer.ValueType : fvtSum; DBGridEh1.Columns[2].Footer.DisplayFormat : #,##0.00; // 按“部门”列分组分组头显示在数据行上方 DBGridEh1.SortLocal : True; DBGridEh1.Columns[0].Title.Caption : 部门; end;逻辑说明FooterRowCount决定脚部占几行fvtSum是内置统计类型还支持fvtCount、fvtAvg。SortLocal : True让 Grid 在本地排序配合STFilter可以做即时筛选。参数上DisplayFormat用标准 Format 字符串别写错成#,##0.00;带分号结尾会显示异常。分组本身需要数据按分组列排序否则小计会串行——这是最常见的翻车点。3.2 冻结列与多级表头冻结列在 EhLib 里叫FrozenCols多级表头靠Title的层级和Columns的嵌套。// 冻结前两列 DBGridEh1.FrozenCols : 2; // 多级表头先建一个父标题再挂子列 with DBGridEh1.Columns.Add do begin Title.Caption : 销售信息; Title.Font.Style : [fsBold]; // 子列通过 Columns 属性继续添加 end;逻辑说明FrozenCols是整数表示左侧冻结几列滚动时这几列不动。多级表头在 Delphi 12 里通过TDBGridEh的列嵌套实现父列不绑定字段只做视觉分组。注意冻结列和分组同时用时分组头不会冻结这是控件本身的边界别指望它像 Excel 那样全冻结。3.3 条件着色与行高台账界面经常要“库存低于阈值标红”。EhLib 提供OnGetCellParams事件比原生OnDrawColumnCell更直接。procedure TForm1.DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh; AFont: TFont; var Background: TColor); begin if (Column.FieldName Stock) and (Column.Field.AsInteger 10) then begin AFont.Color : clRed; Background : clYellow; end; end;逻辑说明OnGetCellParams在每格绘制前触发直接改AFont和Background即可。参数上Column.FieldName判断字段Field.AsInteger取值。性能提示这个事件触发频繁别在里面做数据库查询否则滚动会卡成幻灯片。4. 导出与打印Excel、HTML、PDF 的实操路径4.1 导出 Excel 的两种方式EhLib 自带TDBGridEhExport系列但导出 Excel 有两条路一是用内置的SaveToXLS二是走 OLE 调 Excel。内置方式不依赖 Office推荐。uses EhLibXls; procedure TForm1.ExportToExcel; var Xls: TDBGridEhExportToXLS; begin Xls : TDBGridEhExportToXLS.Create(nil); try Xls.FileName : D:\Report\sales.xls; Xls.Grid : DBGridEh1; Xls.Execute; finally Xls.Free; end; end;逻辑说明TDBGridEhExportToXLS直接读 Grid 的显示内容包括表头、脚部合计。参数上FileName扩展名用.xls它生成的是 BIFF 格式Excel 能开但新版会提示格式不符点“是”即可。如果要.xlsx常见做法是导出后用第三方库转换或者直接用 OLE 方式但 OLE 要求机器装了 Excel部署时容易翻车。4.2 打印预览TPrintDBGridEh打印是 EhLib 的强项TPrintDBGridEh支持预览、缩放、页眉页脚。procedure TForm1.PrintGrid; begin PrintDBGridEh1.DBGridEh : DBGridEh1; PrintDBGridEh1.PageHeader : 销售台账; PrintDBGridEh1.PageFooter : 第 [Page] 页 / 共 [Pages] 页; PrintDBGridEh1.Preview; end;逻辑说明PageHeader和PageFooter支持占位符[Page]是当前页[Pages]是总页数。Preview弹预览窗口Print直接打印。参数上如果列太多超出纸张设置PrintDBGridEh1.Options : [pghFitGridToPageWidth]自动缩放到页宽。注意这个选项会牺牲字号列特别多时字会小到看不清得权衡。4.3 导出 HTML 与 PDF 的边界EhLib 能导出 HTML但 PDF 不是它的原生能力。热词里有人搜“delphi rbuilder 导出成 pdf”那是另一条路线。EhLib 的定位是 Grid 导出PDF 一般靠TPrintDBGridEh打印到 PDF 虚拟打印机或者用TDBGridEhExportToHTML出 HTML 再转。别指望 EhLib 直接给你一个SaveToPDF方法它没有。这是选型时必须清楚的边界。5. 避坑与排查安装、编译、运行时的五条血泪记录5.1 现象编译报“Unit EhLib was compiled with a different version”原因机器上装了多个 Delphi 版本或者之前装过旧版 EhLib搜索路径里残留了旧单元。解决在Tools Options Library里删掉所有指向旧 EhLib 的路径只保留当前 10.2.42 的Source目录然后 Rebuild 整个工程别只 Compile。5.2 现象设计期能看到控件运行时报“Class TDBGridEh not found”原因运行时包没部署到可执行文件能找到的位置或者工程没勾选“Link with runtime packages”。解决要么在工程选项里把 EhLib 的运行时包加进Runtime Packages列表要么改成静态链接不勾 runtime packages让编译器把源码编进 exe。部署到客户机时前者要带 bpl后者不用按交付方式选。5.3 现象分组小计数字对不上合计比实际多原因TDBSumList或 Footer 统计的是当前数据集全部记录而你的 Grid 做了本地筛选显示的和统计的不是同一批。解决筛选后调用DBGridEh1.SumList.RecalcAll或者改用OnCalcFields手动按可见行累加。这个坑在带筛选的台账里几乎必踩。5.4 现象导出 Excel 后中文乱码原因TDBGridEhExportToXLS默认字符集和系统区域设置不匹配或者 Grid 列用了非 Unicode 字体。解决确认 Delphi 12 工程默认 Unicode导出前把Xls.Options里的字符集相关项设为csUTF8若版本支持或者改用 HTML 导出再让 Excel 打开HTML 的编码声明更可控。5.5 现象滚动时闪屏严重原因OnGetCellParams里做了耗时操作或者 Grid 的DoubleBuffered没开。解决把DBGridEh1.DoubleBuffered : True事件里只做内存判断别查库。如果还闪检查父容器的DoubleBuffered是否被设成 FalseVCL 的双缓冲是逐层生效的。6. 进阶技巧用 EhLib 做台账界面的三个提速习惯第一个习惯是先配 Footer 再绑数据。很多人先连 DataSource 再调 Footer结果列索引变了Columns[2]指向的字段已经不是想统计的那个。我一般先把列建好、Footer 配好最后才设DataSource这样列顺序稳定统计不会错位。第二个习惯是导出前先克隆一个 Grid。直接导出当前 Grid 会把用户的列宽、排序、筛选状态一起带出去有时候不是想要的结果。常见做法是动态创建一个TDBGridEh复制必要列设好固定列宽再导出保证每次导出的格式一致。// 导出专用 Grid 的简化思路 var ExportGrid: TDBGridEh; begin ExportGrid : TDBGridEh.Create(nil); try ExportGrid.DataSource : DBGridEh1.DataSource; // 只复制需要的列固定宽度 ExportGrid.Columns.Clear; // ... 逐列添加 Xls.Grid : ExportGrid; Xls.Execute; finally ExportGrid.Free; end; end;逻辑说明克隆 Grid 隔离了用户界面状态和导出状态参数上只复制字段绑定和标题不复制宽度和排序。代价是多一点内存但导出结果可预期。第三个习惯是打印前强制走一遍预览。TPrintDBGridEh直接Print有时会因为默认打印机驱动差异导致分页错乱先Preview看一眼分页确认没问题再打。从那以后我每次交付打印功能都强制自己先预览再连打印机省得客户现场尴尬。EhLib 10.2.42 在 Delphi 12 上算是一个稳的选择源码在手遇到显示问题能自己改。安装时注意路径和包顺序用的时候分清哪些是它擅长的Grid、打印、导出 Excel/HTML哪些不是PDF 原生导出。把这几步走通报表模块的交付速度能提一大截。希望帮到你。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。