简介:EhLib 10.0.031 是面向 Delphi 11 开发者的第三方组件库安装包,主打图形处理、数据库访问、报表设计与数据可视化等能力,适合需要快速搭建桌面业务系统或为现有项目补充表格、图表控件的中高级 Delphi 程序员。压缩包共 890 个文件,约 24.63MB,以 302 个 dfm 窗体、299 个 pas 源码、70 个 res 资源、55 个 dpr 工程及 30 个 dcu 编译单元为主体,另含 dpk 安装包、doc/docx 手册、chm 帮助文档与示例数据库,源码完整可读可改。资源已在 Delphi 11.1.5 环境验证可正常安装,install 目录提供安装程序,便于无缝集成。已有 886 人学习下载,读者可据此理解组件实现原理、按项目需要裁剪扩展,并借助附带手册与示例快速上手图形、数据库、报表与图表等模块。
1. 装 EhLib 10.0.031 前,先把 Delphi 11 的包路径理清
Delphi 11 装第三方控件库,翻车点往往不在控件本身,而在包路径和编译顺序。EhLib 10.0.031 这套源码包,很多人拿到手第一反应是双击.dpk一路 Next,结果 IDE 里控件面板出来了,一编译项目就报找不到EhLibVCL单元,或者运行时弹Class not registered。这活儿在 Delphi 圈子里太常见了,几乎每个换大版本的团队都要重走一遍。这篇记录按我实际装机的顺序写:先确认 Delphi 11 的编译环境,再拆包、编运行时包、装设计期包,最后落到「怎么验证真跑通」。适合刚把项目迁到 Delphi 11、需要重新挂 EhLib 的开发者,也适合想搞清楚包依赖关系的老手。
2. 环境准备:Delphi 11 的编译链和 EhLib 源码目录怎么摆
2.1 确认 Delphi 11 的版本号和目标平台
EhLib 10.0.031 对 Delphi 11 的支持是分平台的,VCL 和 FMX 两套源码在同一个包里,但编译出来的包名不一样。装之前先在 IDE 里点Help → About确认版本号是 11.0 还是 11.3,补丁级别会影响Win32和Win64的 DCU 输出目录。我一般会先建一个干净的目录,比如D:\Components\EhLib_10.0.031,把源码包解压进去,不要放在中文路径或带空格的路径下,Delphi 的Library Path对空格的处理在 11 上偶尔会抽风。
目录结构大致是这样,解压后先别急着动:
EhLib_10.0.031/ ├── Source/ # 运行时源码,.pas 文件都在这里 ├── Packages/ # 设计期和运行期的 .dpk 工程 │ ├── Delphi11/ │ └── ... ├── Demos/ # 示例工程,验证时用得上 └── Help/ # 帮助文档Packages\Delphi11下面通常有EhLibVCL.dpk(运行期)和EhLibVCLD.dpk(设计期),FMX 对应的是EhLibFMX系列。先看清楚哪个是 Runtime、哪个是 Design,装反了就是控件面板能拖但编译报错。
2.2 设置 Library Path 和 Browsing Path
这一步是后面所有编译的基础。打开Tools → Options → Language → Delphi → Library,在Library Path里加上源码目录和 DCU 输出目录。我一般会单独建一个D:\Components\EhLib_10.0.031\Lib\Delphi11\Win32\Release作为输出,避免和 IDE 自带的 DCU 混在一起。
# Library Path 追加(Win32 Release 为例) D:\Components\EhLib_10.0.031\Source D:\Components\EhLib_10.0.031\Lib\Delphi11\Win32\ReleaseBrowsing Path也加上Source目录,这样 Ctrl+点击 能跳到源码。注意Library Path的顺序有讲究,EhLib 的路径要放在系统路径之前,否则可能命中旧版本残留的EhLibVCL.dcu。装过旧版 EhLib 的机器,先去C:\Users\Public\Documents\Embarcadero\Studio\22.0\Dcp和Bpl目录下把旧的EhLib*.bpl、EhLib*.dcp清掉,这是血泪经验,不清的话新包编译时链接到旧 DCP,运行时行为对不上。
2.3 检查目标平台和编译配置
Delphi 11 默认工程可能同时有 Win32 和 Win64 两个平台。EhLib 10.0.031 的源码对两个平台都支持,但设计期包只需要装 Win32 一份就够(IDE 是 32 位的)。编译前在Project → Options → Delphi Compiler里确认Target选的是Win32,Release配置下Optimization打开、Debug information关掉,这样编出来的 BPL 体积小、加载快。
提示:如果团队里有人还在用 Delphi 10.4 或 12,别共用同一个 EhLib 输出目录,DCU 格式不兼容,混用会报
Unit version mismatch。
3. 编译与安装:从运行时包到设计期控件的完整顺序
3.1 先编运行时包 EhLibVCL.dpk
打开Packages\Delphi11\EhLibVCL.dpk,在 IDE 里直接Build。这一步只编运行期单元,不注册控件。编译前确认Project → Options → Description里的LIB suffix是空的或者和你的命名规范一致,我一般留空,避免 BPL 名字带后缀导致设计期包找不到。
// EhLibVCL.dpk 里 requires 子句大致是这样,确认 rtl、vcl 都在 requires rtl, vcl, vclx;requires里列的是它依赖的 IDE 自带包,Delphi 11 上vclx有时需要手动确认存在,缺了会在链接阶段报Required package 'vclx' not found。编译成功后,输出目录里会出现EhLibVCL.bpl和对应的.dcp。把这两个文件的路径记下来,下一步设计期包要靠它。
3.2 再编设计期包 EhLibVCLD.dpk
设计期包依赖刚才编出来的运行期包。打开EhLibVCLD.dpk,它的requires里应该有EhLibVCL,如果没有就手动加上,路径指向刚才的输出目录。
requires rtl, vcl, vclx, EhLibVCL; // 指向运行期包,路径由 Library Path 决定Build通过后,右键工程选Install,IDE 会把设计期包注册进控件面板。装完在 Tool Palette 里应该能看到EhLib分类,下面有TDBGridEh、TDBEditEh这些。如果Install报Cannot load package,八成是运行期包的 BPL 没在系统PATH里,或者位数不对(32 位 IDE 加载了 64 位 BPL)。
3.3 注册控件和检查设计期依赖
Install成功后,IDE 会弹一个对话框列出注册的组件类。这时候别急着关,去Component → Install Packages里确认EhLib 10.0.031 Design Package处于勾选状态,Description里能看到版本号。有些机器上装完控件面板不刷新,重启 IDE 就好,这是 IDE 的缓存问题,不是装失败。
设计期包还依赖designide,Delphi 11 的designide.dcp在C:\Program Files (x86)\Embarcadero\Studio\22.0\lib\win32\release下,如果编译报找不到DesignIntf,检查这个路径有没有在Library Path里。我一般会把$(BDSLIB)\$(Platform)\release这种宏路径保留,别手动写死绝对路径,换机器就废。
3.4 把 BPL 路径加进系统环境变量
这一步决定运行时能不能找到包。把运行期 BPL 的输出目录加到系统PATH,或者更稳妥的做法是在项目里用LoadPackage动态加载。我一般选前者,因为团队里多个项目共用一套控件,统一放PATH省事。
# Windows 下临时验证用,正式部署写进系统环境变量 set PATH=D:\Components\EhLib_10.0.031\Lib\Delphi11\Win32\Release;%PATH%加完PATH后新开一个命令行窗口验证where EhLibVCL.bpl能定位到,再启动 IDE 或编译后的 exe。注意PATH里不要同时存在多个版本的 EhLib BPL,Windows 加载 DLL/BPL 是按PATH顺序找第一个,旧版本在前就会加载错。
4. 避坑与排查:EhLib 装完最常见的五类翻车
4.1 控件面板有但编译报找不到单元
现象:Tool Palette 里能看到TDBGridEh,拖到窗体上设计期正常,一编译就报F1026 File not found: 'EhLibVCL.pas'或E2003 Undeclared identifier: 'TDBGridEh'。
原因:Library Path只加了设计期包的路径,没加Source源码目录,或者加的顺序在系统路径之后被旧 DCU 覆盖。
解决:回到Tools → Options → Library Path,把Source目录提到最前面,然后Project → Build All强制重编。还不行就删掉项目目录下的__history和Win32\Debug输出,Delphi 的增量编译有时会缓存错误的单元引用。
4.2 Install 时报 Cannot load package
现象:设计期包Install时弹Cannot load package 'EhLibVCLD'. It contains unit 'EhLibVCL', which is also contained in package 'EhLibVCL'。
原因:运行期包被重复加载,或者 BPL 的LIB suffix和设计期包requires里写的不一致。
解决:去Component → Install Packages里先把所有 EhLib 相关的包取消勾选,关 IDE,清掉Dcp和Bpl目录下的旧文件,重新按「先运行期、后设计期」的顺序编一遍。LIB suffix统一留空。
4.3 运行时弹 Class not registered
现象:编译通过的 exe 在别的机器上跑,一打开带TDBGridEh的窗体就报Class not registered。
原因:目标机器没装 EhLib 的 BPL,或者 BPL 位数和 exe 不匹配(32 位 exe 配了 64 位 BPL)。
解决:部署时把EhLibVCL.bpl一起拷过去,放 exe 同目录或系统PATH。更干净的做法是改用静态链接,在项目里把 EhLib 源码单元直接编进 exe,不依赖 BPL,代价是 exe 体积大一点,但部署省心。
4.4 设计期控件属性面板空白
现象:拖上TDBGridEh后,Object Inspector 里属性列表是空的,或者只有少数几个。
原因:设计期包注册了组件但没注册属性编辑器,通常是EhLibVCLD.dpk编译时漏了DesignEditors相关的单元。
解决:确认EhLibVCLD.dpk的contains里有EhLibReg.pas这类注册单元,重新Build后Install。还不行就检查designide的路径,属性编辑器依赖它。
4.5 升级后旧项目报 Unit version mismatch
现象:从旧版 EhLib 升到 10.0.031,旧项目一编译就报Unit 'EhLibVCL' was compiled with a different version of 'System.Classes'。
原因:项目目录里残留了旧版编译出的.dcu,或者Library Path里旧版路径还在。
解决:全盘搜EhLibVCL.dcu,把非当前版本的删掉;Library Path里只保留 10.0.031 的路径;项目Build All一次。我一般会在升级前把整个Lib输出目录清空重编,省得逐个排查。
5. 装完怎么验证:用 Demo 工程跑一遍才算数
装完控件面板出来不算完,得用一个真实工程验证编译期和运行期都通。EhLib 包里自带Demos目录,挑一个 VCL 的DBGridEh示例最直接。打开Demos\VCL\Grids\...下的工程,先Build All,再Run,看三件事:窗体上的TDBGridEh能不能正常渲染、列头排序和过滤能不能点、关闭时有没有包卸载报错。
// 验证运行时包是否真加载,可以在窗体 OnCreate 里临时加一句 procedure TForm1.FormCreate(Sender: TObject); begin // 输出当前加载的 EhLib 版本,确认不是旧版残留 OutputDebugString(PChar('EhLib version: ' + EhLibVersion)); end;EhLibVersion是源码里定义的常量,编译期就能确认版本号对不对。运行后在DebugView里看到10.0.031才算真装对了。如果输出的是旧版本号,说明PATH或Library Path里还有旧包,回去清。
再补一个部署验证:把编译好的 exe 拷到一台没装 Delphi 的干净机器上,只带EhLibVCL.bpl和必要的运行时库,双击跑一遍。这一步能暴露PATH依赖和位数问题,比在开发机上反复编译有用得多。我一般会做一个deploy_check.bat,把 BPL 拷贝、PATH设置、启动 exe 串起来,每次发版前跑一遍。
| 验证项 | 方法 | 通过标准 |
|---|---|---|
| 编译期单元解析 | Build All Demo 工程 | 无 F1026/E2003 |
| 设计期注册 | Tool Palette 拖控件 | 属性面板完整 |
| 运行期包加载 | DebugView 看版本输出 | 显示 10.0.031 |
| 干净机部署 | 拷贝 exe + BPL 到无 IDE 机器 | 窗体正常、无 Class not registered |
从那以后我每次装第三方控件库,都强制走一遍「干净机部署验证」,开发机上编过不算数,换台机器跑起来才算落地。这套 EhLib 10.0.031 的装法在 Delphi 11 上验证过 Win32 和 Win64 两个目标,按上面的顺序走基本不会卡在包依赖上。希望帮到你。
本文还有配套的精品资源,点击获取