首页 / 资讯中心 / 文章详情

DevExpress VCL 20.2.6 for Delphi 11:安装验证、版本兼容与排错指南

DevExpress VCL 20.2.6 for Delphi 11:安装验证、版本兼容与排错指南 ★ FEATURED ARTICLE
简介DevExpress VCL 20.2.6 控件安装包面向 Delphi 11 及更早版本开发环境专为升级后需要重新匹配 VCL 控件库的 Delphi 开发者准备解决国内常见渠道要么挂羊头卖狗肉、要么无法编译的痛点属于可直接投入使用的正式发行版。压缩包约 473.21MB采用 7z 单包交付内含可执行的 DxAutoInstaller.exe 一键安装引导程序以及完整 full source 源码文件无需手动配置环境运行安装脚本后即可在 D11 中直接加载控件省去繁琐的注册与编译过程。该版本已经在实际环境亲测通过且标注为非试用版各类常用可视化组件和底层库均可正常使用同时保留完整源码便于二次开发与定制维护。目前已有 512 人学习/下载适合从工具类小工具到大型企业级业务的 Delphi 开发者快速补齐升级后的基础设施把节约的时间投入业务开发。1. DevExpress VCL 20.2.6不是新版本却正好能落在 Delphi 11 的坑位上第一次听到“20.2.6 支持 Delphi 11”这种组合不少人第一反应是版本对不上。DevExpress VCL 20.2 是 2020 年底发布的子版本线Delphi 11 是 2021 年的 IDE 主线按直觉应该装 21.2 或 22.x 才对。可实际工程环境里很多团队就是拿 20.2.6 配 Delphi 11 做维护版编译、部署都正常。这套资源属于 full source 版本带有全部源码单元不做黑匣子处理适合需要长期维护老项目、又想让 IDE 升级的 Delphi 开发者。本文记录的是我完整走一遍安装、注册、建工程验证的实测过程包括那些装完却拖不出控件的坑。2. 版本兼容性为什么 20.2.6 能在 Delphi 11 上注册成功安装第三方控件最怕的是 IDE 崩掉或控件面板空白。在动手之前先搞清楚一个关键点DevExpress VCL 判断 IDE 是否兼容用的不是“Delphi 11”这个产品名而是编译器版本号。它内部的公共头文件里写着一系列条件编译指令根据 Delphi 的 VER 常量决定包含哪些单元和注册逻辑。Delphi 11 Alexandria 的编译器版本对应 VER350而 20.2.6 在发布窗口上正好覆盖了这个编译分支所以它能在新版 IDE 里正常编译、正常注册。选择“旧大版本 新补丁”组合图的是稳定。20.2 的功能集已经被大量项目验证过20.2.6 又吸收了这个系列后期的修正所以很多从 Delphi 10.4 迁移到 11 的团队会特意锁在这两个版本之间而不是直接跳到 21.2 或 22.x。这和你“要不要追新”是两回事做维护项目的人最看重的是老代码能编译、新系统能跑、出问题有源码可追。2.1 先用编译版本号而不是产品名判断兼容性打开 Delphi 11 的 Tools Options IDE Environment Variables能看到平台版本号。Delphi 11 的 IDE 目录对应Studio\22.0这不是编译器版本只是 BDS 目录名。真正要留意的是编译器版本见下方代码。注意 Delphi 11 的 CompilerVersion 输出是 35.0对应的条件编译符号是 VER350DevExpress 源码头文件里就是靠这个来切换兼容分支的。program CheckCompiler; uses System.SysUtils; begin // 输出当前编译器的版本号用来核对控件安装包是否兼容 WriteLn(CompilerVersion: , CompilerVersion); WriteLn(RTLVersion: , RTLVersion); Readln; end.这里的CompilerVersion和RTLVersion是编译器内置常量前者对应编译器发行版本后者对应运行时库版本。在 Delphi 11 上执行会看到 35.0 这个值。判断 DevExpress 20.2.6 是否匹配不用看宣传文案直接看它的源码头文件里有没有VER350分支即可。我一般会先建一个空控制台程序跑一下确认当前环境的编译版本号再决定要不要继续安装避免“装了又卸”的反复折腾。2.2 安装前的环境检查一份可以复用的清单安装前还有一件容易被忽略的事机器上是否存在旧版 DevExpress 残留。很多安装报错不是新包有问题而是旧版本的 BPL、DCU 或注册表项混在环境里。检查清单见下。$studioPath C:\Program Files (x86)\Embarcadero\Studio\22.0 if (Test-Path $studioPath) { # 22.0 是 Delphi 11 的 IDE 目录21.0 是 10.4 Write-Host [OK] Delphi 11 安装在默认路径 } else { Write-Host [WARN] 没找到默认路径请手动指定 IDE 根目录 } $oldDxPath C:\Program Files (x86)\DevExpress if (Test-Path $oldDxPath) { # 这里列出的是旧版安装目录检查是否同时存在 20.1/19.2 等目录 Get-ChildItem $oldDxPath -Directory | Select-Object Name }脚本里Test-Path用来测试路径是否存在Get-ChildItem -Directory列出 DevExpress 根目录下的所有子目录。如果看到多个版本目录说明机器上有版本混装风险。此时不要急着安装 20.2.6先把旧版的 IDE 包从 Delphi 11 里卸载再清理旧版目录否则两个版本的同名 BPL 会在 IDE 加载时抢位置。full source 和试用版的差别也体现在这里源码版会把完整的 Source 目录展开到安装目录下而试用版只放编译好的 DCU 和少量文档。没有源码后续一旦遇到控件内部异常只能盲试。3. 安装实操从环境检查到控件面板出现图标安装这一步我没有使用默认一路下一步的方式而是把安装器流程拆成“模式选择、编译注册、许可校验”三个阶段来走。这样做的好处是万一某一步没生效你能立刻知道问题出在哪个阶段不用反复卸载重装。3.1 安装器的两种模式与版本路径识别安装包执行后第一个关键页面是让你选 Express 还是 Custom。做维护项目的建议选 Custom因为 Express 会把大量不一定用得上的套件全部装进去比如 ExpressSpreadSheet、ExpressNavBar 之类的既拖慢安装也增加 IDE 启动时加载的包数量。Custom 模式下只需要勾选实际用到的套件即可。接着是版本识别。安装程序会在页面上列出它检测到的 IDE 版本如果 Delphi 11 没有被列出来不要继续点下一步。常见做法是右键“以管理员身份运行”安装器因为 Delphi 的 BDS 注册表主键位于 32 位注册表视角下非管理员权限读取会失败。如果管理员权限运行后仍然识别不到就在 Custom 页面里手动指定 IDE 根目录为C:\Program Files (x86)\Embarcadero\Studio\22.0指向bds.exe所在目录。这里有一个容易被忽略的点安装器对 IDE 的检测是看注册表里的 BDS 键值而不是扫描磁盘。如果之前安装过其他版本的 RAD Studio后来又卸载不干净注册表里可能残留旧路径导致新安装器读到错误位置。所以检查注册表里 Embarcadero 相关主键是否指向 22.0比反复重启安装器更有效。3.2 BPL 注册与控件面板出现图标安装完成后大多数情况下安装器会自动完成 IDE 包注册。但实际项目中我见过多次“安装成功但控件面板空白”的情况原因就是 IDE 集成步骤被 UAC 静默拒绝或者安装器写完了文件但没有执行包注册。手动注册的操作是Delphi 11 主菜单 Component Install Packages Add然后进入 DevExpress 的 Library 目录下对应编译器版本的文件夹选择以 dcl 开头的 BPL 文件。这里要区分设计期包和运行期包dcl 开头的是设计期包只负责在 IDE 里显示控件、弹出属性编辑器不带 dcl 的是运行期包编译出来的程序运行时依赖它们。下面这段批处理用于把运行期 BPL 统一拷贝到团队公共目录避免每台机器各装各的版本。echo off rem 将 DevExpress 运行时 BPL 统一拷贝到公共目录避免机器间版本不一致 set DX_SRCC:\Program Files (x86)\DevExpress\VCL\Library set APP_LIBD:\TeamLib\DevExpress\20.2.6 if not exist %APP_LIB% mkdir %APP_LIB% rem dcl 开头的是设计期包目标机器运行 exe 时不需要只拷贝非 dcl 的 bpl for %%f in (%DX_SRC%\*.bpl) do ( echo %%f | findstr /i /v dcl nul if not errorlevel 1 copy /y %%f %APP_LIB% ) echo Copy done.这段脚本的逻辑是遍历 Library 目录下所有 bpl 文件用findstr /v排除包含 dcl 的文件名剩下的就是运行期包统一复制到公共目录。注意errorlevel 1表示 findstr 没找到匹配项也就是文件名里没有 dcl这时执行复制。运行脚本前要关掉 Delphi IDE否则 bpl 文件被占用会复制失败。3.3 非试用版许可状态的三种验证方式很多人在这一步翻车装到一半可以看到控件但一编译就弹出试用提醒或者 IDE 启动时提示试用到期。验证这份资源是否真正注册成功可以从三个角度检查。第一打开任意 VCL 工程看主菜单是否出现 DevExpress 菜单里面 About 窗口会显示当前版本号和许可状态。第二新建一个空 VCL 工程放一个 TcxGrid直接编译看是否弹出试用提醒框。第三检查安装目录下是否存在完整的 Source 目录这是 full source 版与试用版最直观的区别。验证点操作系统位置期望结果IDE 菜单DevExpress About显示 20.2.6 版本信息编译验证新建 VCL 工程放 TcxGrid编译无试用提醒源码目录DevExpress 安装目录下的 Source多个子套件源码目录齐全需要说明的是非试用版指的是许可文件已经写入本机注册表构建出的 exe 不会出现试用版的水印或弹窗。至于这个资源是怎么获得的我不展开也不评价我只关注装完能不能稳定开发。4. 避坑排查三个装了也用不了的典型场景这一章我直接记录实际安装中遇到过的三类典型故障每一条都是完整走一遍安装后才暴露出来的问题。如果你按照第 3 章的步骤操作大概率不会走到这里但如果你的机器环境比较杂下面三条能帮你省下一个下午。4.1 安装器检测不到 Delphi 11现象安装向导的 IDE 列表里没有 Delphi 11 Alexandria只有一个灰色提示说“未检测到支持的 IDE”无法继续选择组件。原因安装器读取的是注册表里 Embarcadero 的 BDS 主键不是扫描磁盘目录。常见情况是当前用户不是管理员或者之前安装过其他版本 RAD Studio 后卸载不干净注册表残留了旧路径。解决右键安装包选择“以管理员身份运行”。如果管理员权限仍然无效打开注册表编辑器定位到 HKEY_LOCAL_MACHINE 下 Embarcadero 相关主键确认 BDS 根目录值指向C:\Program Files (x86)\Embarcadero\Studio\22.0。这里有冲突路径时修正后重新打开安装器就会识别出来。4.2 安装过程顺利但控件面板没有 DevExpress 项现象安装向导全程正常走完没有任何报错但打开 Delphi 11 的工具面板翻遍所有分类也找不到 TcxGrid、TcxButton、TcxTextEdit 这些控件。原因安装器把文件写进了磁盘但没有成功完成 IDE 包注册。这种情况在 UAC 弹窗被忽略或权限不足时最常出现表现为“文件到位、注册没到位”。解决打开 Component Install Packages看已安装包列表里是否存在 DevExpress 条目。没有就点击 Add进入 DevExpress 的 Library 目录下对应 Delphi 11 的文件夹手动选择 dclcxGrid、dclcxEditors、dclxLib 等关键设计期包添加后确认。如果加载过程中提示找不到模块参考下一条处理。4.3 加载包提示 Cant load package 找不到指定模块现象在 Install Packages 中点 Add 后IDE 弹窗显示 cant load package后面跟着一个 bpl 文件名但文件明明存在于磁盘上。原因设计期包依赖的若干运行期包没有同时被加载或者搜索路径里存在旧版 DevExpress 的 bpl导致 IDE 加载新包时优先找到了旧依赖。这是版本混装最典型的现场。解决先关掉 Delphi打开系统环境变量或 IDE 的 Library Path把所有指向旧版 DevExpress 目录的路径删掉。然后清理 IDE 缓存目录中对应 22.0 的缓存文件夹重启 IDE重新执行第 3.2 节的包注册步骤。注意加载顺序在 Install Packages 里是可以调整的把 DevExpress 的基础包如 dxSkinsCore、dxBar 排在前面再加载 dcl 开头的设计期包。4.4 老工程迁移后提示重复定义或找不到 dx 单元现象原本在 Delphi 10.4 上正常编译的工程切到 Delphi 11 后编译报错提示某个 dx 开头的单元重复定义或者找不到某个 cx 开头的源文件。原因工程文件的搜索路径里还残留旧版本 DevExpress 的目录Delphi 11 编译时会同时看到旧版.dcu和新版.dcu两个包里的同名单元发生冲突。这种错不是 20.2.6 本身的问题是路径污染。解决打开 Project Options Delphi Compiler Searching Path把旧版 DevExpress 相关目录全部移除只保留 20.2.6 对应的 Library 目录。然后执行 Project Build清理工程目录下的旧.dcu文件后重新编译。我习惯在迁移前先复制一份工程专门用来做路径清理实验这样即使改错了也不影响原工程。5. 验证安装用 TcxGrid 跑通一个最小 VCL 工程安装成功不等于能用。判断一套 VCL 控件包是否真的可用我会新建一个最小工程放一个最常用的控件编译一次通过才算真正落地。TcxGrid 是 DevExpress VCL 里最重型也最常被用到的控件用它做验证性价比最高编译通过说明绝大多数套件依赖都已正常注册。5.1 新建工程并放置 TcxGrid把“安装成功”变成“能用”打开 Delphi 11新建 VCL Application在表单上放置一个 TcxGrid。双击网格DevExpress 会自动生成一个 cxGrid1DBTableView1 视图。此时在 Object Inspector 里可以看到 DataController 节点这个对象负责网格的取数逻辑。下面的代码是最小验证单元它把数据控制器和一个空的 DataSource 挂接起来再调用 CreateAllItems 自动创建列。unit Main; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxContainer, cxEdit, dxSkinsCore, dxSkinscxPCPainter, cxClasses, cxCustomData, cxData, cxDataStorage, cxDBData, cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxGridLevel, cxGrid, cxGridCustomView; type TForm1 class(TForm) cxGrid1: TcxGrid; cxGrid1DBTableView1: TcxGridDBTableView; cxGrid1Level1: TcxGridLevel; procedure FormCreate(Sender: TObject); private FDataSource: TDataSource; public end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin // DevExpress 网格取数入口是 DataController不是直接操作 View FDataSource : TDataSource.Create(Self); FDataSource.DataSet : nil; // 把 DataSource 挂到当前 View 的 DataController 上 cxGrid1DBTableView1.DataController.DataSource : FDataSource; // 自动按数据集的字段创建列DataSet 为空时只建空白结构 cxGrid1DBTableView1.DataController.CreateAllItems; end; end.这段代码里最关键的两行是DataController.DataSource : FDataSource和CreateAllItems。前者把标准 VCL 的数据源组件接入 DevExpress 的数据控制层后者根据数据集的字段集合自动生成网格列。如果编译通过说明控件的设计期包和运行期包都已正确装入 IDE而不是只装了文件没注册。如果这一步编译失败报错信息多半和 dcl 包或 dcufiles 有关直接回到第 4 章的排查路径里对号入座。注意这个工程本身没有任何业务数据它只验证控件链条是否完整。5.2 核对依赖链与 BPL 版本编译通过后还可以再做一层验证观察生成的 exe 依赖的 DevExpress BPL。常见做法是打开 Project Deployment勾选“自动部署运行期包”然后在输出目录里看列出了哪些 bpl。下表列出最常出现的关键依赖及其作用便于对照排查。BPL 名称作用验证点dxSkinsCore皮肤绘制基础库缺失时启动程序报找不到 dxSkinsCore.bpldxBar工具栏与菜单支持库使用 TdxBarManager 时依赖cxGrid*.bpl网格运行期库包含 cxGrid 系列单元cxEditors*.bpl编辑器控件运行期库使用 TcxButton、TcxTextEdit 时依赖运行时最容易出的问题不是控件面板而是 exe 拷到另一台机器后提示“找不到 dxSkinsCore.bpl”。解决办法很简单把第 3.2 节公共目录里的运行期 bpl 和 exe 放在同一目录或者启动前注册到目标系统的路径里。多数维护项目采用前者简单直接也方便回滚版本。DevExpress 版本升级时BPL 文件名通常不变但文件版本不同混放会引发运行时错误所以我在团队里强制要求公共目录按版本号建子目录不允许直接丢根目录。6. 进阶用法把 full source 源码副本做成一劳永逸的调试基础把安装包里的 Source 目录整体归档到独立目录这是我对 full source 版最推荐的一步操作。安装目录受卸载程序控制哪天机器重装或者卸载时误删源码就找不回来了。我一般用 robocopy 把源码复制到非系统盘项目目录然后把这个目录加入 IDE 的 Library Path。robocopy C:\Program Files (x86)\DevExpress\VCL\Source D:\DevExpressSource\20.2.6 /E /R:2 /W:2参数/E表示复制所有子目录包括空目录/R:2表示失败重试两次/W:2表示失败后等待两秒。robocopy 的退出码 0 到 7 都算成功不需要在批处理里用if errorlevel去判断。源码归档后在 Delphi 11 的 Tools Options IDE Library 里把D:\DevExpressSource\20.2.6添加到 Library Path 的顶部这样当你按 F7 跟踪进控件内部方法时IDE 会直接打开这份源码而不是进入没有调试信息的黑匣子。这个习惯来自一次教训。我最开始装这套包时图省事把安装包留在临时目录后来系统盘清理时顺手删了。两个月后要改 cxGrid 的绘制细节发现源码目录已经不存在只能重新找安装包解压再对比。从那以后我每次装完 DevExpress VCL 都会强制走一遍“归档源码、统一 BPL 目录、新建验证工程”这三步已经养成习惯。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站