ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Delphi 12 Athens下EhLib VCL 10.2.42安装配置与实战指南

Delphi 12 Athens下EhLib VCL 10.2.42安装配置与实战指南 简介EhLib VCL 10.2.42 for Delphi 12 Athens 控件包是一套面向 Delphi 开发者的高级界面组件库覆盖数据网格、报表、图形、日期时间、对话框、树形视图等模块适用于企业管理、报表中心和可视化工具等场景。压缩包共包含 1490 个文件核心文件类型有 dfm 窗体布局、pas 源代码、dcu 编译单元、hpp 头文件另有 dpr/dproj 工程示例、res 资源以及 chm 帮助文档整体约 25.56MB可直接对照编译学习。其中 EhDBGrid 网格支持分组、排序、过滤等复杂数据展示EhReport 与 EhPrintPreview 可完成专业报表设计并保证打印预览一致EhGantt 和 EhDiagram 便于绘制甘特图、流程图和组织结构图EhShellBrowser、EhTreeView 等组件则适合搭建资源管理器风格界面。资源深度集成 Delphi 12 Athens同时兼容其他 Delphi 版本开放 API 便于二次定制。目前已有 346 人学习下载搭配完整源码、帮助手册和示例工程能帮助开发者快速在真实项目中集成数据库网格、报表与可视化控件有效降低开发门槛提升桌面应用交付效率。 从 2003 年第一次在 Delphi 5 里拖 TDBGridEh 算起我用了差不多二十年控件库EhLib 在项目里的地位从来没被替代过。Delphi 12 Athens 发布之后我最关心的不是 IDE 本身多了几个新特性而是手头这套老伙计能不能跟上新版本。看到 EhLib VCL 10.2.42 for Delphi 12 Athens 这个包的时候我第一时间就下了实测安装、编译、跑业务 Demo 都通了。这篇就把完整安装过程、使用配置和我在真实项目里踩过的坑整理出来给正在用或者准备迁移到 Delphi 12 的朋友做个参考。先说结论如果你是做传统 VCL 桌面应用、离不开数据感知控件、又不想把整套界面框架换成 DevExpress 那种重量级方案EhLib 在 Delphi 12 下依然是性价比很高的选择。它的 TDBGridEh 提供排序、过滤、搜索、统计栏、导出 Excel 等一堆开箱即用的功能省掉大量重复代码。而且 EhLib 一直是源码开放的出现问题可以直接跟库的源代码排查起来比黑盒控件舒服太多。1. 为什么 Delphi 12 项目里我依然首选 EhLib1.1 一套库解决数据展示的 80% 需求很多人一提到 Delphi 的控件第一反应是“拖个 DBGrid 就完事了”。但原生 TDBGrid 能做的东西实在太少排序要手动写 SQL过滤要自己拼条件列头想带个小箭头都得继承重绘。TDBGridEh 把这些全部做成了属性勾选一下就生效开发效率完全不在一个量级。我在项目里用得最核心的几个控件TDBGridEh增强型数据网格支持表头排序、自动过滤、汇总栏、树形展示、合并单元格、多选下拉过滤TDBLookupComboboxEh下拉框可以同时显示多个字段比如“编号 名称”一起展示日常开发非常顺手TDBDateTimeEditEh日期时间编辑配合格式掩码数据处理干净很多TDBComboBoxEh、TDBNumberEditEh、TDBCheckBoxEh一系列数据感知输入控件基本覆盖常见表单场景TMemTableEh内存数据表在临时数据集、报表数据集这类特殊场景下很好用。1.2 10.2.42 for Athens 这个版本解决的核心问题版本号里带 Athens说明它专门针对 Delphi 12 Athens 做过适配。新版本 Delphi 的编译器版本、RTL 接口、IDE 包加载机制都有调整控件库如果不跟着更新最常见的症状是安装时提示包不兼容、编译时报找不到某个 RTL 符号、运行时控件注册不了。10.2.42 这个版本解决了我在 Delphi 12 下遇到的几个实际问题全面适配 Unicode 和长字符串中文数据不会出现截断或乱码兼容高 DPI 显示场景网格文字、图标在 4K 屏上不再发虚更新了包的项目版本号IDE 可以正确识别和加载修正了部分导出、打印相关的边界问题。提示如果是从旧版本比如 10.2.20 以前的版本直接升 Delphi 12建议先把 EhLib 升到这个版本再做项目迁移否则很容易在编译阶段耗费大量排查时间。2. 压缩包解压到 IDE 出现控件安装过程全记录2.1 解压后先看目录结构拿到EhLib VCL 10.2.42 for Delphi 12 Athens.7z之后先别急着双击安装把文件解压出来看一眼目录。这个版本的压缩包内通常包含SetupEh.exe图形化安装程序Source/Common目录全部源代码Docs目录帮助文档和版本说明对应各版本 Delphi 的运行时包和设计时包源文件。我习惯先把压缩包解压到一个干净目录比如D:\Components\EhLib。这样做的好处有两个一是安装程序能找到明确的路径二是后面手动配置 Library Path 时不容易把路径搞乱。2.2 用 SetupEh 完成编译注册运行SetupEh.exe后界面中间会列出当前机器上安装的 Delphi 版本。勾选 Delphi 12 Athens选择好安装路径然后点击编译。这步会做两件重要的事编译生成运行时包运行时 BPL编译生成设计时包设计时 BPL设计时包会被 IDE 加载并注册到组件面板。编译过程出现几个提示窗口时注意看描述内容。如果是“Package DclEhLibXX.bpl will be installed into IDE”这类提示直接同意。如果弹出找不到某个源文件的错误优先检查是不是路径里有中文或空格EhLib 在带空格的长路径下偶尔会有脚本解析问题。2.3 IDE 里找不到控件时的替代注册方式如果图形安装程序在某些精简版 Delphi 环境跑不起来或者装完之后工具面板里没有出现 EhLib 标签页可以手工注册。步骤是打开 Delphi 12选择Component Install Packages点击Add找到编译输出目录下的DclEhLib开头、后缀为.bpl的文件选中并确认加载重启 IDE。设计时包的作用是把组件注册到 IDE 的工具面板。如果只装运行时包程序能编译但组件面板里不会显示控件这个区别要记清楚。2.4 库路径检查清单编译安装完成后还有一步很容易被忽略Library Path。如果不加新建项目引用 EhLib 单元时Delphi 会提示找不到EhLibXX.dcu。打开Tools Options Environment Options Delphi Options Library在 Library Path 中加入D:\Components\EhLib\Build\Lib\$(Platform)\$(Config)具体路径以你编译输出目录为准。安装程序在部分环境下会自动配置但如果发现不生效手工补就行了。2.5 验证是否注册成功正确的验证姿势是新建一个 VCL Forms Application在组件面板上找是否有“EhLib”分类然后拖一个TDBGridEh到窗体。能拖出来、能在对象监视器里看到它的属性、编译能通过才算真正装好。别只看到.bpl加载成功就认为完事了。3. 跑通第一个智能数据网格从数据绑定到排序过滤3.1 最小 Demo 搭建我先用一个 TFDConnection TFDQuery TDataSource 的组合演示。如果你习惯用 ADO步骤完全一样只是连接组件的名字不同。操作顺序放一个TFDConnection设置好数据库连接串放一个TFDQuery写一条SELECT * FROM 订单表放一个TDataSource把DataSet指向FDQuery1放一个TDBGridEh把DataSource指向DataSource1激活FDQuery1。到这个步骤网格里已经能看到数据。但这时候它跟原生 DBGrid 的区别还不大接下来才是 TDBGridEh 显本事的地方。3.2 让网格具备排序和过滤能力开启排序只需要一行属性设置DBGridEh1.SortLocal : True;开启后用户点击列标题就能本地排序。注意SortLocal是内存排序适合数据量不大的场景。如果是几十万行的数据建议还是走数据库排序用SortMarkedColumns事件拼 SQL。过滤功能在 TDBGridEh 里叫 STFilter启用方式也是属性级别的DBGridEh1.STFilter.Visible : True;设置完后每个列的标题下方会多出一个过滤小行用户输入关键字就能过滤当前列。它是按控件维护的过滤条件执行的不会直接改 SQL所以数据量太大的时候性能会下降这点要有心理准备。3.3 开启搜索面板和统计栏搜索面板是这个控件库另外一个我离不开的功能。它默认自带一个类似 Excel 的搜索框禁用代码就一句话DBGridEh1.SearchPanel.Enabled : True;统计栏底部汇总也很好用把FooterRowCount设为 1然后指定列的Footer.Value类型DBGridEh1.Columns[3].Footer.ValueType : fvtSum; DBGridEh1.Columns[3].Footer.Alignment : taCenter;这样最后一列就会自动显示合计值不用写任何循环代码。我一直觉得如果只是做内部管理系统的数据展示上面这几个功能加起来已经完全够业务部门用了。4. 项目中真正提效的几个高级用法4.1 下拉多列选择和自动补全用TDBLookupComboboxEh的时候有个属性很关键DropDownBox.ListSource对应的查询可以返回多个字段但值和显示字段单独设置。比如人员选择下拉框我想把“工号”“姓名”“部门”同时显示出来设置DropDownBox.ListField为“工号;姓名;部门”然后KeyField为“工号”就行。补全功能在 TDBGridEh 的列里也有入口。选中列的DropDownBox配置一个数据集之后编辑单元格时就能弹出下拉列表既能减少输入错误体验也好很多。4.2 导出 Excel两条路线我都走过TDBGridEh 提供了原生导出功能。代码示例DBGridEh1.SaveToExcel(导出结果.xls);这是最简单的方式适合中小数据量。它会调用内置的导出模块保留列标题、列宽、合计栏一般客户要看的数据表格都能胜任。如果遇到更复杂的导出要求比如要多格式导出、要求操作某个单元格的样式我的做法是干脆循环数据集直接调用 Excel 组件或者输出 CSV。别在这里硬撑用网格自带的导出边界情况多调试起来很耗时间。4.3 打印和预览要注意的事项打印功能用PrintDBGridEh组件选中网格、设置标题调用预览即可。但有个细节非常容易踩坑打印列宽和屏幕列宽不一致。建议在打印之前单独维护一套打印列宽配置或者设置PrintDBGridEh1.DBGridEh : DBGridEh1之后在OnGetPrintCellHeight等事件里动态调整。这事说起来简单真遇到客户要求“打印出来后表格别挤成一团”的时候才知道它的分量。5. 安装和使用中的坑我提前帮你踩平5.1 编译报“找不到 dcu”的排查链路装好了控件新建项目时如果出现File not found: EhLibXX.dcu这种错误不要慌按下面的链路排查确认 EhLib 的编译输出目录里真的生成了.dcu文件打开 IDE 的 Library Path看有没有包含这个输出目录确认$(Platform)和当前项目平台一致Win32 / Win64 会输出到不同目录确认当前项目还在使用 Debug 配置时Library Path 中是否把对应的 Debug 输出目录也加进去了。大多数情况下都是第 3 步的问题。EhLib 在安装时会在路径里写$(Platform)\$(Config)变量如果你用的是自定义的编译输出目录就要手动对齐。5.2 “无效的授权说明”弹窗的处理思路这个提示我在迁移到 Delphi 12 的头一个礼拜就遇到好几次。既有我自己的机器也有同事新装的开发机。通常情况下这个弹窗代表 EhLib 的授权注册信息没有被正确识别。几种常见原因试用版本地标记过期注册密钥对应的版本和当前 EhLib 版本不匹配旧版本的注册信息残留在注册表里和新版本检查逻辑冲突同时安装了多个版本的 Delphi注册信息被写到了别的版本目录下。处理思路是先卸载干净旧版 EhLib清理源码目录、BPL 目录和注册表中的 EhLib 相关项再重新安装当前版本。需要特别提醒一句EhLib 是商业控件正式商用请务必购买授权。网上流传的所谓“注册机”和“破解版”且不说法律风险和对自己的职业声誉影响控件更新一次就可能失效项目交付高压期出这类幺蛾子代价远大于省下的那点授权费。5.3 运行时找不到包的经典原因运行编译好的程序突然弹“无法加载包 xxx.bpl系统找不到指定的模块”优先怀疑两点目标程序是 64 位但 BPL 编译的是 32 位版本。Delphi IDE 本身是 32 位IDE 能加载不代表 64 位程序能加载动态加载包的路径不对。正式发布时把 EhLib 相关的 BPL/DLL 放到和主程序同一目录或者手动指定环境变量路径。这个坑在 Debug 环境不容易暴露因为 IDE 会自动把 BPL 目录加到 PATH 里。部署到别的机器上就露馅了。5.4 高 DPI 和界面字体错乱Delphi 12 对高 DPI 的支持已经比以前好很多但控件库不配合还是会出问题。EhLib 10.2.42 在 4K 屏上的表现已经比较稳如果你的界面还是出现文字模糊、行高不对建议检查窗体是否开启PerMonitorV2支持开发机系统字体缩放比例是否在运行前调用了TDBGridEh的ApplyFontSettings方法。另外网格行高的问题很多时候跟在表单设计阶段和运行时 DPI 不一致有关。最简单可靠的方案是统一用相对 DPI 的单位来设置别写死 Pixel。5.5 关于旧项目升级迁移多出的一个动作升级到 Delphi 12 时因为 VCL 内部接口有变化旧项目中如果直接引用 EhLib 的第三方扩展模块比如自定义列类或自定义编辑器编译可能会挂。我的建议是先屏蔽第三方扩展、只用标准 EhLib 组件编译通过再逐个打开扩展模块排查。再补一个经验升级之前一定跑一遍全代码搜索看有没有直接调用 EhLib 内部实现细节的代码比如GetCellParams内部方法。控件源码更新之后这类方法名和签名经常调整属于最容易在升级中炸掉的部分。6. 写在最后的个人经验每次 Delphi 大版本升级控件兼容性都是绕不开的一道坎。EhLib 这波跟 Delphi 12 Athens 的适配做得算是跟得比较快的装完后我直接投入了一个订单管理项目的改造网格排序、筛选、导出这套流程在真实业务数据下运行了两周没有发现明显异常。我的体会是越是有历史包袱的项目越要在控件选型上谨慎。EhLib 的优势不在于某个单一功能多惊艳而在于它在 VCL 数据感知这条老路上积累得很深细节比原生组件丰富文档和社区案例也足够多。很多看似要写一整天代码的表格功能配置几个属性就能跑起来这种效率提升对于交付驱动的开发团队来说是很实际的。如果你也准备在 Delphi 12 Athens 下继续用 EhLib照着上面的流程走一遍应该能少走不少弯路。最后再分享一个小技巧团队多人开发时把 EhLib 的源码目录放进公共代码库统一管理配合 Delphi 的 Library 共享设置新同事拉下代码后只需要编译一次就能跟上节奏比各人自己装一份要省心得多。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进