ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

RAD Studio 10.4下DevExpress VCL 20.2.4安装与配置实战

RAD Studio 10.4下DevExpress VCL 20.2.4安装与配置实战 简介DevExpress VCL 20.2.4 for RAD Studio 10.4 是面向 Delphi / CBuilder 开发者的 VCL 界面组件库安装资源适用于 RAD Studio 10.4 环境下的桌面应用界面快速开发。这个 2021 年发布的版本由官方编译、不包含源码解压后即可在 IDE 中安装组件适合希望跳过源码编译流程、直接进入业务开发的开发者。整个安装包约 362.21MB以 7z 压缩包形式发布对应 RAD Studio 10.4 的 RS27 运行库使用前需要按说明链接运行时 BPL 包否则生成的 exe 在目标机器上无法独立运行。已有 1957 人浏览/学习说明该资源对不少 RAD Studio 使用者有参考价值。资源内附有运行时包配置说明能帮用户快速解决安装后无法运行、链接包缺失等常见问题节省自行摸索的时间尤其适合刚接触 DevExpress VCL 或需要快速搭建开发环境的开发者。 最近帮一个老客户做 Delphi 项目升级机器上的 RAD Studio 从 10.3 直接换到 10.4 Sydney界面组件统一锁了 DevExpress VCL 20.2.4。整个过程最花时间的不是业务代码改造而是 IDE 里各种包资源版本打架、DCU 对不上、换一台机器编译皮肤全乱这类环境问题。整理完以后我决定把这一套完整流程写下来尤其是哪些版本组合可以用、哪些环节容易翻车。如果你也正在 10.4 上安排新的开发环境或者还在纠结用 DevExpress 哪个版本这篇文章应该能帮你省下不少时间。1. 版本线定位和兼容矩阵20.2.4 为什么被选中1.1 从版本编号看维护成熟度DevExpress VCL 的版本号可以按“年份-迭代-补丁”的方式来理解。20.2 代表 2020 年的第二个迭代版本后面的 .4 表示这是 20.2 分支上的第四个维护版本。这个版本大约在 2021 年初发布正好对应 RAD Studio 10.4 经过两次 Update 之后的时间窗口。对一个商业项目来说组件库在 IDE 新版本刚出来时直接跟进往往要承担未知风险而 20.2.4 处在 20.2 产品线的成熟后期又有足够的真实项目验证稳定性相对更有保障。你可能会问DevExpress 后来已经出了 21.2、22.1、23.1为什么还要守着 20.2.4主要原因是需求决定的。老项目维护场景里最怕的是组件库版本一升级界面样式、皮肤资源、工具栏布局随之变化导致原有功能回归。新版本固然带来新控件但那部分收益对目前的业务不直接。反过来继续用 20.2.4 与 RAD Studio 10.4 配合是已经验证过的稳定组合。对新开发的桌面应用如果对高 DPI、现代化外观有更高要求再考虑升级到更新的分支也不迟。1.2 RAD Studio 10.4 与 20.2 的官方适配RAD Studio 10.4 Sydney 在 Windows VCL 上的几个关键改进是高 DPI 支持进一步增强、编译器对 C17 有更好的支持、系统集成对话框也做了调整。DevExpress VCL 20.2 系列针对这些改进做了适配。20.2.4 的安装程序能自动识别 10.4选择正确的编译平台并安装匹配的设计时包和运行时包。这里要特别说清楚VCL 组件库不是“一次安装所有 IDE 通用”的设计时包和运行时包的包名往往带有 IDE 版本后缀。同一个组件库版本针对 Delphi 10.3 和 10.4 装出来的包文件并不是同一套东西。误装旧适配包最常见的现象是 RAD Studio 的组件面板里没有预期的新组件或者编译时报 DCP 或 DCU 类错误。所以拿到安装包以后先确认它是否在支持矩阵里覆盖 10.4而不是只看一眼“DevExpress VCL”这个总标题就觉得通吃。2. 安装时的环境清理和 IDE 配置细节2.1 残留旧包清理这是最容易被忽略但最影响结果的一步。开发机上如果曾经装过 DevExpress VCL 18.x、19.x 或更早的 20.1这些旧的设计时包会留在 RAD Studio 的包列表里位置通常在“组件”菜单的“Install Packages”对话框。安装新版本之前建议把旧包从 IDE 中先移除。只做这一步还不够还要把旧安装目录下的 .bpl、.dcp、.dcu 文件清掉然后清空编译缓存。因为 VCL 编译器在查找单元时会按 Library Path 里的目录顺序搜索如果旧版本的 dcu 还留在原目录且排在前面新项目编译时可能引用到旧文件继而出现无法定位或签名不匹配的错误。目录缓存这点其实很关键Windows 上 RAD Studio 的全局缓存路径一般在 AppData 下的 Embarcadero 目录里面对应每个编译器的缓存默认开启。新版本组件安装完成后必须把工程文件所在目录下的 DCU 缓存清理一次否则很容易自认为代码没问题却一直报某个单元找不到。这个动作做完以后IDE 里的“组件 安装包”列表应该只留下新装的对 10.4 的包再配合项目的干净 Build环境才算真正就位。2.2 组件范围的取舍安装程序会让你选择“整个产品套装”或“自定义”。我的实际使用经验是不要贪多全装选中项目用到的功能组件即可。一般办公软件最常用的组合是 cxGrid、dxRibbon、dxBarManager、cxScheduler、cxTreeList、dxSpreadSheet再加一个皮肤相关的基础库。全选后 IDE 启动会很慢设计时包的注册数量过大偶尔还会出现两个组件之间的名字冲突。装少一些启动快整体也更稳后面缺哪个套件再补装就行。另外安装时不要一路 Next 就完了。安装器会有一个 IDE 版本选择页务必勾选 RAD Studio 10.4。如果你机器上同时装了 10.3 和 10.4两个版本都勾上也不是不行但我建议开发环境尽量保持单一 IDE。多个 IDE 版本并存时组件安装程序很容易把包路径写混尤其是 Library 路径里的 dcu 搜索顺序最后会把你折腾到怀疑人生。2.3 安装路径和 IDE 库路径安装路径如果默认放 C:\Program Files\DevExpress VCL这个路径带空格平时用 IDE 没问题但写自动化编译脚本时偶尔会遇到问题。我习惯把 DevExpress 单独放到一个不带空格的目录比如 D:\Dev\DevExpressVCL。安装程序一般会自动调整 Library 路径但升级过 RAD Studio Update 后偶尔会丢所以装完以后要打开 Tools Options Environment Options Delphi Options Library检查 DevExpress 相关的路径是否都在列表里。路径不对的时候编译时最常见的报错是“Unit not found”或“File not found: dxCore.dcu”。有一个排查小技巧在 IDE 里按住 Ctrl 点击某个 DevExpress 单元名可以跳到当前库路径下的对应 .pas 或 .dcu。如果跳转到的目录和你刚安装的新版本不一致说明库路径顺序有问题。这时把 DevExpress 的目录往上移到最前面然后重新编译基本就能解决。3. 稳定控件组合的配置方法与实测体会3.1 cxGrid 的皮肤与高性能显示cxGrid 是大部分数据管理系统的核心表格控件。在 20.2.4 10.4 的组合下我建议在项目启动或主窗体上放一个全局 TcxLookAndFeelController把皮肤统一设置为 Office2019Colorful 或 Basic 系列而不要在每个窗体单独设置 LookAndFeel。这样后续调整整体风格时只改一个控制器就可以了。需要注意的是皮肤资源默认不会自动链接进可执行文件。发布版 exe 运行后如果界面像白板很可能就是皮肤相关的单元没有被引用。通常会在公共代码单元里主动声明uses dxSkinsCore, dxSkinsDefaultPainters, dxSkinscxPCPainter, cxLookAndFeels, cxLookAndFeelPainters;这样皮肤资源会在编译时被绑进程序。如果你还用了 Ribbon 或工具栏还需要把对应的皮肤绘制单元一并引用比如 dxRibbonSkins、dxBarSkins。这个步骤属于 DevExpress VCL 的经典常识但总有人踩因为 IDE 里设计区显示正常一旦脱离开发环境运行就变样。表格绑定大数据集时记得在批量导入数据期间用 BeginUpdate / EndUpdate 包裹。差异很明显六万条记录不加 BeginUpdate 时界面会持续刷新出现明显卡顿包住后加载时间能下降一半以上。还有一个细节用 DBTableView 配合 TDataSetProvider 或 FDQuery 时快速访问当前行数据建议直接调 DataController.Values而不是依赖网格刷新机制这样能减少很多不必要的坐标计算。3.2 dxRibbon 和 dxBarManager 的组合从传统主菜单升级到 Ribbon 风格时我通常用 dxBarManager 实现工具栏和菜单用 dxRibbon 承载页面和标签。在 10.4 上需要注意Ribbon 在 PerMonitorV2 模式下页面标题字体大小和间距会有轻微变化所以不要在窗体 OnCreate 里硬写像素尺寸。这个版本的布局容器会按照当前显示器 DPI 重新计算强制改尺寸反而让界面在不同屏幕之间表现不一致用户换一台缩放比例不同的电脑就抱怨界面错位。还有一个常见现象Ribbon 的样式在某些机器上看起来偏旧或者标签页颜色不对。这多数不是版本问题而是皮肤没有统一初始化。把 LookAndFeelController 的 SkinName 设置好并且在工程编译时引用 dxSkinsDefaultPainters 这类基础单元Ribbon 的外观才不会脱离主题。实际的商用项目里视觉一致性往往比功能先被用户感知到这一步值得专门验证。3.3 数据导出cxExport 与第三方原生导出库导出 Excel 是另一个高频需求。DevExpress VCL 自带的 cxExport 在 20.2.4 里能够把 cxGrid 内容导出为 XLS/XLSX普通的数据导出完全够用。但如果你要输出复杂模板、公式、数据透视表或者需要精确控制单元格样式cxExport 的效果会有限。这时候很多人会调用 NativeExcel 这类专门的原生导出库。选择第三方库时要注意 IDE 编译器版本匹配不同版本组件对应的编译产物、包文件不能跨版本使用。安装前先确认它是否提供当前 RAD Studio 版本的源码或包否则等到编译期再来处理报错就很被动。这里我多说一句不要为了一个导出需求轻易引入新的付费组件。先评估实际场景是“把网格内容导出来”还是“生成一份带格式的业务报表”。前者用 cxExport 足够后者可能需要报表组件或原生导出库。需求边界想清楚了选型成本会低很多。4. 搜索词“clientside event”带来的方向性问题4.1 两个不同平台的同名概念DevExpress 的产品线很长有 VCL、WinForms、ASP.NET、Blazor 等多个技术栈。搜“devexpress clientside event”时很大概率先搜到的是 Web 组件文档里的 ClientSideEvents 属性这是让前端页面用 JavaScript 响应事件的接口。但 VCL 产品里并没有这样的同名属性也没有“客户端”和“服务端”的概念分层。VCL 是原生桌面应用事件全部由 Windows 消息触发最终都会落到 Delphi 的事件方法里比如 OnClick、OnMouseDown、OnCustomDrawCell。如果你在 IDE 里按 F1 搜索“clientside”找不到结果是正常的不要因此以为组件库坏了。出现这个搜索词本质是开发者沿用了 Web 开发的习惯去理解桌面组件。VCL 环境里没有“前后端分离”这一说控件就在进程内事件触发后直接执行本机代码。这个概念如果不转变后面查资料时很容易被带偏。4.2 在 VCL 中实现类似的交互如果你希望 cxGrid 中点击某行时弹出提示或联动其他控件直接在表格视图的 Click 或 DblClick 事件里写 Delphi 代码就可以。例如在双击单元格时读取当前行的某个字段值procedure TForm1.tvCustomerDblClick(Sender: TObject); begin if tvCustomer.Controller.FocusedRecord 0 then begin ShowMessage(tvCustomer.DataController.Values[ tvCustomer.Controller.FocusedRecordIndex, tvCustomer.DataController.GetItemByFieldName(Name).Index]); end; end;这段代码解决的问题等同于 Web 端 cellDblClick 的交互效果只是代码形态完全不同。如果你需要在嵌入浏览器的窗口中操作 HTML DOMDevExpress VCL 里也有 TdxHtmlEditor 这类组件可以插入、读取和修改 HTML 内容。这里可以调用类似 ExecuteJavaScript 的方法来和页面里的脚本交互。但大多数业务桌面应用的“交互”诉求用原生控件事件就足够实现了不必上升到“客户端脚本”的层面。给正在搜资料的人一个经验在 VCL 环境下不要用“clientside event”作为搜索词直接搜索目标控件名加事件名比如“cxGrid OnCustomDrawCell”或“cxGrid DblClick”结果会准得多。搞清平台之间的术语差异比在杂乱信息里淘金更有效。5. 部署、老项目迁移和那些容易忽视的检查项5.1 运行时包还是静态链接发布 exe 时IDE 项目里可以选择“Build with runtime packages”或静态编译。对 DevExpress VCL 20.2.4 来说如果选择运行时包发布文件里除了主程序还要带上 dx 相关 BPL以及 IDE 运行库的 BPL。好处是 exe 体积小多个模块可以共用一套运行包缺点是只要漏发一个 BPL客户端机器上就弹“缺少 xxx.bpl”现场排错很麻烦。我一般的做法是公司内部工具采用静态链接发布成独立 exe。这样做的代价是 exe 会大几十 MB但现场环境少了一个变量。对外发布的商业产品采用运行时包更常见安装脚本里把 DevExpress 相关的 BPL 统一收集进程序目录同时把基础依赖包也带全。DevExpress 的 BPL 之间依赖比较复杂收集运行时包时最好用工具扫描主程序引用了哪些包避免凭印象挑包导致本文还有配套的精品资源点击获取
返回列表