尧图精选

Delphi 12 Athens中安装EhLib VCL 10.2.42:DBGrid增强与避坑指南

🕒 发布时间:2026/9/26 21:28:23 📁 来源:尧图网络
简介EhLib VCL 10.2.42 for Delphi 12 Athens 是一套面向 Delphi 开发者的商业级 VCL 控件库适用于需要快速构建数据库管理、报表打印、图形化展示等场景的中高级桌面应用开发者。该版本与 Delphi 12 深度集成覆盖 EhDBGrid、EhReport、EhDiagram、EhDateTimePicker 等核心组件并优化了内存占用与执行效率。压缩包共收录 1490 个文件其中 pas 源文件 319 个、dcu 编译单元 298 个、dfm 窗体文件 387 个另有 hpp、dpk、dpr 等工程与头文件文件类型齐全便于直接安装或二次编译整体体积 25.56MB轻量易部署。目前已有 346 人学习下载。内含 EhLibHelp.chm 帮助文档、示例工程及多格式资源如 bmp、ico、png可帮助开发者快速检索组件用法、查看演示代码并复用相关界面资源大幅缩短项目开发周期。1. Delphi 12 控件之 EhLib VCL 10.2.42这个压缩包到底解决什么问题升级到 Delphi 12 Athens 之后最难受的不是新 IDE 的界面变化而是老项目里那堆 DBGrid 突然变得不够用列头排序要自己写筛选弹窗要自己拼 SQL合计行更是想都别想。EhLib VCL 10.2.42 就是给 Delphi 12 的 VCL 程序准备的数据库网格增强控件库一个 .7z 压缩包解压、编译、安装就能让网格拥有筛选、排序、分组、合计这些企业级表格该有的能力。这篇文章写给两类人一类是刚把项目从老 Delphi 迁到 Athens、正在为控件兼容性头疼的维护者另一类是打算在 Delphi 12 上从零做一个带数据库表格功能的新项目、想少走弯路的人。我会从解压开始一直讲到踩坑排查全程给出 Delphi 12 能直接照做的步骤。2. 先把 10.2.42 讲清楚EhLib 在 Delphi 12 里扮演什么角色2.1 为什么 Delphi 12 项目还要装第三方 VCL 控件很多从 Delphi 7、Delphi 2010 时代一路用过来的老团队对原生 TDBGrid 又爱又恨。爱的是它简单拖上去绑个 DataSource 就能显示数据恨的是它十几年如一日不升级企业应用里高频出现的“点列头排序、按条件筛选、底部显示合计、冻结前几列”这些需求原生网格一概不提供。Delphi 12 Athens 自带的 DBGrid 相比老版本并没有质的飞跃所以第三方 VCL 控件仍然是桌面项目里的刚需。EhLib 在 VCL 生态里的定位非常明确它不是报表控件不是界面皮肤库就是专门把数据网格做深做透的一套控件集。和 FastReport VCL 配合使用时EhLib 负责屏幕上的数据录入与浏览FastReport 负责打印和导出两者各管一摊互不冲突。这也是为什么很多 Delphi 数据库项目里EhLib 几乎是和 FastReport VCL 一起出现的标配组合。这个压缩包的名字里写得很清楚EhLib VCL 10.2.42 for Delphi 12 Athens。VCL 意味着这套控件只能用于 Delphi 的 VCL 框架不能用于 FMXAthens 是 Delphi 12RAD Studio 12的代号10.2.42 是 EhLib 针对 Athens 做的适配版本号。下载的时候一定要看清楚这个对应关系装了给 Delphi 11 或者 10.4 的包在 Delphi 12 里大概率直接编译失败。2.2 拿到 .7z 先别急着双击解压、目录结构与文件清单.7z 是 7-Zip 的压缩格式Windows 自带的资源管理器不支持直接解压需要先装一个 7-Zip。命令行解压的方式非常稳定我一般会把压缩包放在一个干净的英文路径下然后执行7z x EhLib_VCL_10.2.42_for_Delphi_12_Athens.7z -oD:\Components\EhLib这条命令里x表示解压并保留目录结构-o后面跟的是目标目录。注意-o和路径之间不能有空格否则 7-Zip 会把路径解析错。解压完成后建议打开目录看一眼结构常见做法是压缩包内部会按用途分子目录整理成类似下面的组织形式目录/文件典型用途Source控件源码主要是.pas单元文件编译时 IDE 需要从这里找单元Packages或Lib各 Delphi 版本对应的包工程文件.dpk一般会按版本号分子目录Demos或Examples官方示例工程安装出问题之前先打开示例确认环境Help或Docs文档与更新说明Bin或Output编译产物目录新解压出来时通常是空的需要自己编译生成拿到压缩包之后不要直接全盘复制到 Delphi 的安装目录里那样会把 IDE 的默认搜索路径搞乱。正确的姿势是单独放到一个自己管理的第三方组件目录比如D:\Components\EhLib后面的 Library Path 配置和包编译都指向这个独立目录。这样将来升级控件或者卸载时只需要删掉整个目录不会污染 Delphi 12 自身的安装文件。2.3 先分清运行期包和设计期包安装顺序的底层逻辑EhLib 的包文件.dpk通常分成两类运行期包Runtime Package和设计期包Design-time Package。运行期包编译后生成.dcu和.bpl你的工程在编译和运行时需要它设计期包则是一个 IDE 插件负责把控件注册到组件面板上让你能拖拽使用。设计期包在工程里通常会Requires运行期包所以安装顺序必须是先编译运行期包再安装设计期包。这个顺序一旦颠倒很容易出现“包编译成功但安装失败”或者“安装时报缺少依赖”的怪问题。判断一个.dpk是运行期还是设计期最直接的办法是看文件名一般带Design字样的就是设计期包带Run字样的就是运行期包如果文件名看不出就打开.dpk文件看Requires子句Requires 里引用其他 EhLib 包的一般是设计期包。还有一个常见的误解以为把运行期包也 Install 到 IDE 里能让组件面板出现更多控件。实际上 Install 动作只对设计期包有意义运行期包只需要 Compile 或者 Build 一次生成.dcu和.bpl供后续工程引用就够了。把运行期包也执行 InstallIDE 多半会提示“Cannot load package”或者直接拒绝。3. 在 Delphi 12 Athens 里把 EhLib 装上三步走到组件面板3.1 找到对应 Athens 的包文件并编译两个右键动作解压目录里如果按 Delphi 版本分了多个子目录一定要找到对应 Delphi 12 的那一套。压缩包名里既然写了for Delphi 12 Athens一般会有一个明确的 Delphi 12 目录或者在包文件名的后缀里带版本标识。装错版本是新手最容易踩的坑后面我会专门讲它会报什么错。打开 Delphi 12 之后按以下步骤操作在 IDE 里执行File Open Project浏览到解压后的包目录先选中运行期包的.dpk文件打开。在 Project Manager 里右键这个包工程节点先选Build让 IDE 全量编译运行期包。编译通过后再打开设计期包的.dpk。右键设计期包工程节点先Build再点Install。这里要注意Compile和Build的区别Compile只编译有改动的文件Build强制全量重新编译。新拿到一个控件包我建议直接用Build避免旧的.dcu缓存文件影响判断。Install 成功后IDE 通常会在右下角状态栏或消息窗口提示类似“Package XXX installed”的信息。注意在第一次编译之前先把 Project Manager 里的 Target Platforms 切到 Win32。如果默认平台是 Win64某些老控件包会在编译时报错但这不是控件不能用只是平台没选对。3.2 配置 Library Path 与 BPL 输出路径装完别急着关 IDE包编译安装完成后还有一个关键步骤把 EhLib 的源码目录加进 Delphi 12 的 Library Path。否则你新建一个工程在界面上放一个 TDBGridEh编译时会直接报File not found: DBGridEh.dcu或者找不到.pas。配置路径的菜单在Tools Options Language Delphi Library右侧的Library Path里追加两段D:\Components\EhLib\Source D:\Components\EhLib\Packages\Delphi12第一段是控件源码目录IDE 编译你的工程时靠它找到 EhLib 的单元文件第二段是包工程目录如果你的工程使用运行时包Runtime PackagesIDE 需要在这里解析包依赖。分号分隔多个路径写完点 OK 保存。提示Library Path 在 Delphi 12 里区分平台。Win32 和 Win64 各有一套路径配置一定要把这两个平台的路径都加上否则你切到 64 位编译时又会报找不到单元。BPL 输出路径是另一个容易被忽略的地方。运行期包编译出的.bpl文件有默认输出目录一般位于C:\Users\Public\Documents\Embarcadero\Studio\23.0\BplDelphi 12 Athens 对应 Studio 23.0。如果 IDE 的包搜索路径里没有这个目录安装设计期包时会报“Cannot find package”或者直接不识别。检查方法是打开Tools Options Environment Delphi Options Library Package里的 BPL 搜索路径确认输出目录在列表内不在就手动加进去。3.3 组件面板验证EhLib 页签与关键控件清单安装成功的第一个信号是 Delphi 12 的组件面板上出现新的页签名字通常就叫EhLib。打开一个新窗体在组件面板里翻到这一页应该能看到一整套以TDB...Eh命名的控件。下面这几个是最常用的控件名类型主要用途TDBGridEh数据网格核心控件替代原生 DBGrid支持排序筛选合计TDBEditEh编辑框数据感知编辑框支持录入校验与掩码TDBComboBoxEh下拉框数据感知下拉选择支持自动补全TDBDateTimePickerEh日期选择数据感知日期时间选择器TDBSumList合计组件挂到数据集上做合计统计配合网格底部合计行TDBCheckBoxEh复选框布尔字段的友好显示与录入验证方法很简单在窗体上放一个TDBGridEh再放一个TDBNavigatorEh或者普通按钮双 击组件能正常打开属性编辑器、窗体能正常保存和编译就说明设计期注册成功。如果这一步能过去后面基本都是使用层面的问题了。4. 用 DBGridEh 在 Delphi 12 里跑通第一张表最小工程与关键参数4.1 最小连接链ADOConnection 到 DBGridEh 的四步Delphi 数据库开发最常见的套路是 ADO 连接虽然 FireDAC 这些年越来越普及但存量项目里 ADO 的占比依然很高。EhLib 对数据源没有任何特殊要求只要 DataSource 能正常提供数据它就能画网格。下面这段代码演示了在 FormCreate 里用代码创建整条连接链uses Data.DB, Data.Win.ADODB, DBGridEh; procedure TForm1.FormCreate(Sender: TObject); var Conn: TADOConnection; Qry: TADOQuery; DS: TDataSource; Grid: TDBGridEh; begin // 第 1 步ADO 连接 Conn : TADOConnection.Create(Self); Conn.ConnectionString : ProviderMicrosoft.ACE.OLEDB.12.0;Data SourceD:\Data\demo.accdb;; Conn.LoginPrompt : False; Conn.Open; // 第 2 步查询 Qry : TADOQuery.Create(Self); Qry.Connection : Conn; Qry.SQL.Text : SELECT * FROM Orders; Qry.Open; // 第 3 步数据源中转 DS : TDataSource.Create(Self); DS.DataSet : Qry; // 第 4 步DBGridEh 显示 Grid : TDBGridEh.Create(Self); Grid.Parent : Self; Grid.Align : alClient; Grid.DataSource : DS; Grid.AutoFilter : True; Grid.SortLocal : True; Grid.FooterRowCount : 1; Grid.SumList.Active : True; end;这段代码的逻辑顺序不能乱连接是查询的前提查询打开后才能赋给 DataSourceDataSource 再赋给网格。TADOConnection.Create(Self)里的 Self 是 Owner这样窗体销毁时能自动释放这些对象你不用手动 Free。ConnectionString里的 Provider 要根据实际数据库改Access 用 ACE 或 JetSQL Server 用SQLOLEDB或MSOLEDBSQL。LoginPrompt : False是为了避免运行时弹登录框如果你的数据库需要账号密码把用户名密码写进连接串。网格那边我开了四个属性AutoFilter让列头出现筛选下拉箭头SortLocal允许点击列头本地排序FooterRowCount : 1在网格底部预留一行合计栏SumList.Active : True让合计开始计算。这是 EhLib 相对原生 DBGrid 最直观的四个增强点跑通这一套后面就可以按需修改了。4.2 DBGridEh 必调参数筛选、排序、合计、列宽一张表讲完DBGridEh 的属性和原生 DBGrid 有很大一部分同名比如DataSource、Columns、ReadOnly所以老代码迁过来时基础用法几乎不用改。需要新认识的是一些带Eh尾巴的增强属性。我把最常用的一组整理成表格属性/对象常用取值作用AutoFilterTrue列头显示筛选下拉图标点击后按列过滤SortLocalTrue点击列头在本地排序默认升序再点降序FooterRowCount1或2底部合计行的行数SumList.ActiveTrue启动合计计算配合 Columns 的 Footer.Value 使用OptionsEh包含dghAutoFitColWidths列宽随网格宽度自动伸缩IndicatorOptions包含ioIndicatorRowResize行指示器区显示可拖拽行高ReadOnlyTrue/False整表只读用于查询展示场景TitleParams设置TitleParams.Font.Style表头字体加粗等视觉调整这里面最容易搞混的是AutoFilter和列的STFilter。AutoFilter : True是总开关但每一列具体用哪种筛选方式是在列对象的STFilter里配置的比如STFilter : Contains表示模糊包含筛选STFilter : 表示精确等于筛选。如果你只开了 AutoFilter 而没设任何列的 STFilter列头下拉出来的菜单是默认的文本筛选也能用但不太灵活。我一般会把日期列配成范围为筛选字符串列配成包含筛选数字列配成等于或介于。SumList是另一个容易忽略的点。开完SumList.Active之后还要在具体列的Footer里设置合计类型比如在某一列的Footer.Value里选Sum该列底部才会显示合计数字。只开 Active 不配列底部的合计行永远是空的。4.3 和 FastReport VCL、TreeView、Panel 圆角的边界EhLib 不管哪块把 EhLib 装好之后要特别注意它和周边控件的职责边界不然会花很多时间在错误的方向上。Delphi 数据库项目里常见的组合是EhLib 管屏幕上的数据网格编辑与展示FastReport VCL 管报表打印与导出两个控件各是各的数据源绑定方式不要试图让 DBGridEh 去生成报表文件也别让 FastReport 去实现网格的列头筛选。有些团队喜欢把 TreeView 的树形导航和网格放在一个窗体上左边树右边网格。DBGridEh 确实有树形网格模式可以用父子数据集在网格里展示层级数据但它是基于数据集的父子关系实现的不是 TTreeView 那种 Node 模型。如果业务里只是需要一棵菜单树老老实实用 TTreeView只有当你需要像 Excel 那样在网格里展开折叠明细行时才值得去研究 DBGridEh 的树形模式。还有一类请求经常出现想让 Panel 或网格实现圆角、阴影、渐变背景。这是 VCL 风格改造的范畴和 EhLib 无关。Delphi 12 的 VCL 支持 TStyleManager 换肤也可以用原生 Panel 自绘或者第三方皮肤控件来做但不要指望 EhLib 的属性面板里能调出一个圆角选项。把网格的数据能力和视觉风格分开处理思路会清晰很多。5. 安装 EhLib 10.2.42 的避坑记录五个高发问题5.1 组件面板里找不到 EhLib 页签现象按步骤打开.dpk编译了也点了 InstallIDE 没报错但新建窗体后组件面板里翻不到 EhLib 相关页签。原因大概率是装错了包。安装动作只对设计期包有效运行期包执行 Install 后不会注册任何组件到面板。另外有些版本的 EhLib 把设计期包和运行期包做在一个工程组里你打开的可能是运行期包那一半。解决回到解压目录确认你打开的.dpk文件名带Design关键字用File Open Project打开设计期包后右键选择Install而不是Compile。安装成功时 IDE 会弹提示组件面板也会立刻出现 EhLib 页签。如果还是找不到关掉 Delphi 12 重启一次某些设计期包注册需要 IDE 重启才刷新。5.2 编译提示找不到 DBGridEh.dcu 或 DBGridEh.pas现象窗体上已经放好了 TDBGridEh保存没问题一编译就报File not found: DBGridEh.dcu或者DBGridEh.pas not found。原因Library Path 里没有加 EhLib 的源码目录。IDE 编译你的工程时按 Library Path 的目录顺序搜索单元文件找不到就报这个错。这和包有没有安装成功是两回事包安装解决的是组件面板注册而单元搜索解决的是编译期依赖。解决打开Tools Options Language Delphi Library在 Library Path 里把 EhLib 的Source目录和包目录都加进去Win32 和 Win64 各加一次。加完之后重启 IDE 再编译。提示如果加了路径还是报错检查一下Source目录里是不是真的存在DBGridEh.pas。有些解压工具会漏解压文件重新用 7-Zip 完整解压一次即可。5.3 提示 Package was compiled with a different version of ...现象Install 设计期包时弹窗提示类似... was compiled with a different version of ...或者报包版本冲突安装被中断。原因你把给 Delphi 11 或 10.4 的包文件拖到 Delphi 12 里编译了。包名里的for Delphi 12 Athens才是匹配的版本其他版本的.dcu缓存和包描述文件和 Delphi 12 的 RTL 元数据不一致。解决回到解压目录找明确标了 Delphi 12 或 Athens 的子目录重新编译。如果之前已经乱七八糟装过一轮先把Source和Output目录里的.dcu、.bpl、.dproj缓存文件清掉再按正确顺序 Build 运行期包、Install 设计期包。5.4 Win64 平台一编译就翻车现象默认平台编译运行正常切换到 Win64 后工程报错错误信息指向某个 EhLib 包无法加载。原因EhLib 的包工程是按平台分开编译的你只 Build 了 Win32 的包Win64 平台下 IDE 找不到对应的.bpl或.dcu。解决在 Project Manager 里选中 EhLib 的包工程右键 Target Platforms添加或切换到 64 位 Windows然后对运行期包和设计期包都执行一次 Build。不要以为一个平台编译完就万事大吉Delphi 12 里每套平台都是独立产物。5.5 中文乱码与字符串类型不适配现象老项目从 Delphi 7 迁到 Delphi 12用上 EhLib 后网格里显示中文正常但代码里用 AnsiString 或者旧式 PChar 传参的地方编译报类型不匹配或者有些列内容显示成乱码。原因Delphi 12 默认字符串是 UnicodeStringEhLib 10.x 本身是 Unicode 兼容的问题通常出在你自己代码里的历史类型转换。老 Delphi 的 AnsiString 不能直接赋值给 UnicodeString 属性时编译器会有红波浪线。解决凡是要传给 TDBGridEh 属性或从列对象读回的字符串统一声明成string数据库字段如果是宽字符类型用WideString接收再赋值给网格。定位问题时对照 EhLib 自带的 Demos 工程看它怎么写比查文档更快。这个坑玄学的地方在于有时能编译但运行乱码多半是数据库连接的字符集设置问题检查 ADO 连接串里的Character Set和数据库字段类型即可。6. 装完了怎么验证动态创建自检法加三招提效技巧6.1 十分钟自检动态创建 TDBGridEh组件面板能用只是第一步运行期包是否真正就绪最稳的验证方式是写一个不依赖设计器的自检工程。新建一个空白 VCL 工程在 FormCreate 里动态创建 DBGridEh 并挂上一个内存数据集uses Data.DB, Datasnap.DBClient, DBGridEh; procedure TForm1.FormCreate(Sender: TObject); var CDS: TClientDataSet; DS: TDataSource; Grid: TDBGridEh; begin CDS : TClientDataSet.Create(Self); CDS.FieldDefs.Add(ID, ftInteger); CDS.FieldDefs.Add(Name, ftString, 50); CDS.CreateDataSet; CDS.AppendRecord([1, Delphi 12]); CDS.AppendRecord([2, EhLib 10.2.42]); CDS.AppendRecord([3, Athens]); DS : TDataSource.Create(Self); DS.DataSet : CDS; Grid : TDBGridEh.Create(Self); Grid.Parent : Self; Grid.Align : alClient; Grid.DataSource : DS; Grid.AutoFilter : True; Grid.SortLocal : True; end;这段代码绕开了 DFM 和设计期状态直接验证核心单元能否编译、运行。能跑出三行数据并且点列头能排序说明运行期包没问题后面再折腾设计期功能就放心了。6.2 三招提效多级排序、自动筛选、导出 Excel自检通过后我建议你先练熟三招日常项目里使用频率最高。第一招是多级排序。DBGridEh 支持按住 Shift 点击多个列头按点击顺序叠加排序条件。配合列对象的SortMarker属性可以自定义排序箭头样式比如smUpEh和smDownEh。如果数据量不大、网络带宽足够用SortLocal : True本地排序最省事如果数据量大要把排序交给后端把SortLocal设为 False监听列头点击事件后重发带 ORDER BY 的 SQL。第二招是自动筛选。所有列开启AutoFilter : True后列头会出现下拉按钮运行时用户可以直接在下拉框里输入条件过滤。想控制具体行为在列对象的STFilter里设置筛选类型。这条功能在给业务人员做数据浏览界面时特别受欢迎比你自己写一个筛选对话框省太多代码。第三招是导出 Excel。DBGridEh 自带导出能力不需要装 Office代码很直接uses DBGridEhImpExp; Grid.SaveToXLS(D:\Data\orders.xls);需要新版格式就用SaveToXLSX。导出之前确认列宽和合计行已经配好导出结果基本就是所见即所得。我一般会在网格上方放一个导出按钮业务人员几乎不用培训。每次升级 Delphi 12我的习惯是先把 EhLib 装好、再用同样的步骤装 FastReport VCL 和其他报表依赖。先跑通网格再碰报表因为大部分显示逻辑都要在网格里反复调报表只是最终输出。压缩包名里写的是 Delphi 12 Athens那就老老实实用对应目录里的包别贪图省事把别的版本拿过来硬试。希望帮到你。本文还有配套的精品资源点击获取
上一篇/下一篇内容由系统自动关联 返回资讯列表 →