☰
DevExpress VCL 20.2.6 在 Delphi 11 上的手工安装与兼容性实践
2026/10/2 22:54:27 网站建设 项目流程

简介:DevExpress VCL 20.2.6 完整控件安装包,面向升级到Delphi 11的桌面开发者,解决国内资源混杂、无法编译乃至虚假链接等常见痛点。资源以7z压缩包形式发布,总大小约473.21MB,包内文件数量未在下载页单独标明,主要包含控件完整源码、DxAutoInstaller自动安装器及相关配置文件。已有508人学习/下载。该版本经作者亲测可通过编译,非试用版,具备完整功能;运行DxAutoInstaller.exe即可快速完成安装,装好后无需额外设置,直接在Delphi 11中使用,节省手动部署与排错时间。适合正在迁移IDE、需要使用DevExpress VCL组件库进行界面、报表等开发的Delphi工程师。

1. 一个反直觉的结论:DevExpress VCL 20.2.6 能跑在 Delphi 11 上,还跑得很稳

你要是刚把环境迁到 Delphi 11 Alexandria,第一反应多半是去官网找一套和 IDE 同年份的 DevExpress VCL。可 DevExpress VCL 20.2.6 发布时,Delphi 11 还没出生,官方安装包默认也识别不了这款 IDE。可我实测下来,只要把包里的 full source 源码目录手工映射进 Delphi 11 的库路径,再重新编译一次 runtime 包,cxGrid、dxLayoutControl 这些核心控件就能在 D11 上稳定运行,设计期和运行期都不挑版本。这套资源适合升级到 D11 之后还需要维护老项目、又不想被新版授权问题卡住的 Delphi 老手,也适合初学控件库结构的入门者。苦等新版本不如先把 20.2.6 吃透,它能省下的时间不止一两天。

2. 拆开 DevExpress VCL 20.2.6:全源码包里的模块和安装前置条件

2.1 包里到底有什么:从 QuantumGrid 到 Skins 的模块划分

DevExpress VCL 不是单个按钮、单个表格那么简单,它是一整套按功能域拆好的控件组。20.2.6 的完整源码包拿到手后,先别急着双击安装程序,我一般会先看一眼前三级目录,心里有个模块地图再动手。

模块目录对应的控件名主力用途我的使用频率
DataGridTcxGrid、TcxDBGrid数据表格、主从表几乎每个项目都用
LayoutTdxLayoutControl表单排版、自适应布局常用
BarTdxBarManager菜单、工具栏、状态栏常用
SkinsTdxSkinManager换肤、圆角、高DPI适配常用
RichEditTcxRichEdit富文本编辑偶尔用
VerticalGridTcxVerticalGrid属性编辑器风格页面表单设置页用
TreeListTcxTreeList树形列表权限管理界面用
DataControllerTcxDataController数据缓存与排序过滤后台逻辑穿透用,隐藏主力

这个包里的 full source 意味着每个 DCU 背后都有对应源码,不只是给你一套编译好的库。这一点在升级 IDE 时非常重要:没有源码的控件遇到 D11 编译版本不匹配基本就是死路,有源码才能重新生成匹配当前 IDE 的 DCU 和 BPL。

2.2 版本兼容性原理:VCL 控件为什么能跨 IDE 小版本

Delphi 从 10.4 升到 11,核心的编译器从 Win32 到 Win64 都改了底层结构,控件库里大量使用公开发布时封装的 DCU 无法直接搬家。可 DevExpress VCL 20.2.6 的源码本身是分层的:底层的 dxBar、dxCore 等基础包不依赖具体 IDE 版本,顶层的 cxGrid、dxLayout 依赖的也只是 IDE 提供的基础 VCL 单元。只要编译器能找到这些源码,并按照当前 IDE 的 RTL 版本重编一遍,控件就能长成适配 Delphi 11 的样子。

我常用的处理方式是把源码包解压后先跑一遍包内的 Build 脚本,让它生成当前 IDE 需要的 DCU。20.2.6 的安装程序虽然没在界面里列 Delphi 11,但底层构建脚本是支持通过命令行传 IDE 版本号的。版本号的本质不是破解而是路径匹配:IDE 的 BDS 目录和注册表键告诉脚本该往哪写 BPL,知道这一点,后面的手工映射就顺理成章。

2.3 安装前 30 分钟检查清单

动手装之前,我建议你按下面这个顺序过一遍,能省掉后面一大半的返工。

  • 确认 Delphi 11 的安装根目录和 BDS 版本号。Delphi 11 Alexandria 的 BDS 版本号是 23.0,注册表路径是HKEY_CURRENT_USER\Software\Embarcadero\BDS\23.0,这个数字后面写映射脚本时要用。
  • 确认机器上没有老版 DevExpress VCL 20.1、20.2 的残留包。如果以前装过旧版,先把 IDE 里对应的 BPL 选中移除,再注销相关路径,不然新版和旧版会抢同一个单元文件名。
  • 杀毒软件把源码目录排到白名单。DevExpress 安装脚本会同时写注册表、释放 DLL、生成 DCU,行为模式离被杀软拦住的“高风险”只有一线之隔。我实测过 360 和 Windows Defender 都会在生成 BPL 时弹窗,弹窗挂起会让编译进程超时失败。
  • 检查源码包完整性。尤其看dxSkins、ExpressDataController这几个目录下的.pas文件数量,缺一个文件后面编译必报 E2599。
  • 记录当前 Delphi 11 的默认库路径,方便安装后对比,避免把控件目录加串了。

2.4 安装类型的选型:ExpressPage 还是全套、设计期包要不要装

安装程序会让你选组件子集,常见选项是「ExpressPage 集合」和「All VCL Products」。我建议第一次装直接选 All VCL Products,理由是控件之间有隐藏依赖,比如 cxGrid 的打印功能依赖 ExpressPrinting 里的某些导出组件,你只选单盒它不会帮你把依赖补齐。空间不是问题,完整源码包装完大概多出两三 G,换来的却是后面不用反复补装。

设计期包要单独勾,这套包的设计期包文件名为dcl*,比如dclcxGridD11.bpl。设计期包的作用是让 IDE 工具箱出现控件、双击控件能弹出专属编辑器。运行期包cxGridD11.bpl负责进程内执行代码,两者必须同时存在且版本一致。有人图省事只装运行期包,结果窗体打开时 IDE 提示类不存在,这就是设计期包缺失造成的错配。

提示:全源码版本里通常自带编译好的Win32\Delphi11目录,如果你不想重新编一万多个文件,可以优先使用这些预编译 DCU。但只有当你完全确定 IDE 补丁级别一致时才建议这么做,否则还是走一遍 Build 更稳。

3. 弄到 Delphi 11 的手工安装流程:路径映射、静默参数与库配置

3.1 安装程序认不出 Delphi 11 时的路径映射

双击安装程序时,只要检测逻辑里没写 Delphi 11 的注册表键,界面就会显示“没有检测到受支持的 IDE”。这个坑卡了我第一天整半天,后来发现解决思路很直接:让安装程序把 Delphi 11 识别成它认识的最新版本。

常见做法是临时建一个假的 Delphi 10.4 注册表入口,等安装程序把文件释放完再删掉。但更干净的方法是用包里的配置文件改映射关系。DevExpress VCL 的安装程序会读取*.inf或dxPackageMap.txt这种清单文件,文件里每一行是源路径=目标IDE路径,你手动追加一行指向C:\Program Files (x86)\Embarcadero\Studio\23.0,安装程序就会把 23.0 当作合法目标目录。

需要注意修改这个文件前先备份,安装完再检查改过的行是否被程序回写。如果回写成 10.4 的绝对路径,编译时会继续报错,那时要重新编辑一次。

3.2 命令行静默安装:皮实稳定的参数写法和执行顺序

我第一次是用图形界面装的,后来要在三台机器上部署同一套环境,就把流程整理成了静默安装脚本。DevExpress VCL 的安装程序支持-silent参数,配合一个响应文件可以做到无人值守。

# 静默安装整套 VCL,并将日志输出到指定文件 DevExpressVCL_20.2.6.exe -silent -l "C:\DxInstallLog\dx20.log" -c "D:\Dev\DevExpressVCL20.2.6" # 若安装程序版本不同,也可以先解压再执行 setup 子程序 # DevExpressVCL_20.2.6.exe -a /s /f1"C:\Dx\setup.iss" /f2"C:\Dx\setup.log"

这段脚本里的-l是日志路径,-c是解压路径。安装失败时第一件事就是打开dx20.log,看错误是集中在Generate DCU还是Register BPL,这两个阶段的失败原因完全不同。-f1和-f2是 Inno Setup 风格安装器的响应文件和日志参数,如果解压后内部是setup.exe,用第二行这种写法。

提示:静默安装要避免在工作目录存在中文路径和空格时执行,安装器解析路径容易在第二个空格处截断。我习惯将整个包先拷贝到C:\DxInstall再跑,别偷懒。

3.3 库路径配置:把源码目录加进 Delphi 11 的环境变量

安装程序就算成功跑完,Delphi 11 的 IDE 库路径里也不一定会自动加上控件源码目录。我一般会手工打开 IDE 的 Tool > Options > Delphi Options > Library,把下面的路径逐条加进去。这里只要加关键源码目录,不必把几百个子目录全塞进去:

路径作用
D:\Develop\DevExpress VCL\Library\Delphi11\Win32主运行期 DCU,编译器从这里找 .dcu
D:\Develop\DevExpress VCL\Library\Delphi11\Win32\Data数据控制器相关文件
D:\Develop\DevExpress VCL\Library\delphi11\Win32\Skins换肤组件的 DCU
D:\Develop\DevExpress VCL\Sources源码目录,部分单元需要 pas 直接加载

库路径里放 DCU 目录就够了,不要放 Sources,否则每次编译会重新编译源码,速度慢而且容易触发不同目录下的同名源文件冲突。如果你用的是实时类型库(RTTI)比较多,可以考虑把 Sources 放进Search Path,但只在调试控件本身时启用。

3.4 编译 runtime 包与注册设计期包的顺序

包生成顺序错了,IDE 重启后会发现设计期包加载失败。DevExpress VCL 的依赖关系是自底向上的:先编译基础包 dxCore,再编译数据层,最后才是界面层。包内构建脚本通常叫Build.bat,但直接跑全部可能在半路卡住,我习惯按依赖顺序分步执行。

cd /d "D:\Develop\DevExpress VCL\Sources" REM 编译基础运行时库 "c:\Program Files (x86)\Embarcadero\Studio\23.0\bin\rsvars.bat" msbuild.exe dxCore.groupproj /t:Build /p:Config=Release /p:Platform=Win32 REM 编译界面库 msbuild.exe dxSkins.groupproj /t:Build /p:Config=Release /p:Platform=Win32 msbuild.exe cxGrid.groupproj /t:Build /p:Config=Release /p:Platform=Win32 REM 最后编译并安装设计期包 msbuild.exe dclDXSkins.groupproj /t:Install /p:Config=Release /p:Platform=Win32

rsvars.bat是 Delphi 官方提供的环境变量初始化脚本,不执行它,msbuild 找不到dcc32.exe。/t:Build指定编译目标,/t:Install会额外执行 BPL 注册动作,把设计期包写进 IDE 的已安装包列表。分步执行的好处是某一步报错时能立刻定位是哪个 groupproj 依赖没满足,而不是盯着全量编译日志翻到眼晕。

4. 安装后的冒烟验证与工程接入:让 IDE 认得出、编译器找得到

4.1 用一个小工程验证控件可用性

安装配置完,别急着把正式项目源码拉进来,先新建一个 VCL Forms Application,拖一个 cxGrid、一个 dxSkinManager,编译运行通过才算环境就位。这一步类似写一段冒烟代码,提前暴露路径和 BPL 问题。

program SmogTest; uses Vcl.Forms, WinApi.Windows, cxGrid, cxGridCustomView, cxGridTableView, dxSkinsCore, dxSkinsDefaultPainters; {$R *.res} var SkinManager: TdxSkinManager; Grid: TcxGrid; begin Application.Initialize; Application.CreateForm(TForm, Form1); // 初始化皮肤组件,如果 DCU 没配对会在这里报程序退出 SkinManager := TdxSkinManager.Create(nil); try SkinManager.LoadedSkinName := 'Office2019Black'; Grid := TcxGrid.Create(nil); Grid.Width := 600; Grid.Height := 400; Grid.Show; MessageBox(0, 'OK', 'SmogTest', MB_OK); finally Grid.Free; SkinManager.Free; end; end.

这段代码不涉及窗体设计文件,纯粹测试运行期两条最关键的路径:一是 skin 控件能否实例化,二是 cxGrid 能否被创建。TdxSkinManager.Create(nil)如果找不到对应 DCU,会弹缺少dxSkinsCore.dcu的错误;Grid.Show之后弹 MessageBox 则说明运行期 BPL 已正确加载。拿到 OK 提示后再回 IDE 里拖设计期控件。

4.2 工程搜索路径与 BPL 引用清单

正式项目通常不会只放控件,还牵扯到 FastReport VCL、第三方数据库访问组件。每加一个控件套件,工程文件中就多一组 BPL 引用。DevExpress VCL 20.2.6 建议放进工程引用里的核心 BPL 是:

BPL 名称对应功能
dxCoreD11.bpl基础库,不引用它很多子包起不来
cxGridD11.bpl表格主库
dxSkinsCoreD11.bpl皮肤引擎
dxSkinsDefaultPaintersD11.bpl默认皮肤绘制器
dxLayoutControlD11.bpl布局控件库

在 Project Options > Packages 里勾选这些运行时包,勾选后生成的 EXE 体积会小很多,但也意味着目标机器需要安装对应 BPL 到系统目录。如果目标机器不允许部署 BPL,我通常反过来选 Build with runtime packages 并清空列表,让所有 DevExpress 代码直接编入 EXE,代价是单个 EXE 增加 8-15 MB。

4.3 项目配置时的版本锚点:锁定 20.2.6 而不是跟着 IDE 漂

同一台机器上如果同时存在 FastReport VCL 和 DevExpress VCL,第三方库的版本锚点就特别重要。DevExpress VCL 20.2.6 生成 BPL 时文件名里带版本后缀 D11,但 IDE 有时会从早期注册记录里捡到旧 BPL 版本,导致编译后运行崩溃。

我在工程文件里加了一个编译条件来判断版本,避免开发机环境混乱时误用错版本:

{$IFDEF DXVER} {$IF DXVER < 20.2.6} {$MESSAGE ERROR 'Need DevExpress VCL 20.2.6 or later'} {$IFEND} {$ENDIF}

在 Delphi 11 的 Project Options 里把DXVER定义为20.26——注意这里不能写小数点,编译器预处理只认数字。万一以后机器里装了新版,这个校验会在编译早期拦截错误版本,不会等到运行期才报警。这个习惯从那以后我每次搭新开发机都强制走一遍,说实话已经被它救了两回。

5. DevExpress VCL 20.2.6 避坑手册:高频问题的现象、原因与处理

5.1 安装程序直接提示「本机未安装受支持的 IDE」

现象:双击DevExpressVCL_20.2.6.exe,安装界面显示找不到 Delphi,并拒绝继续安装。

原因:20.2.6 安装程序内置的 IDE 检测列表只到 Delphi 10.4,没有 Delphi 11 的注册表键,且检测时不读取自定义注册表入口。

解决:用注册表编辑器定位到HKEY_CURRENT_USER\Software\Embarcadero\BDS,查看是否已存在 23.0 键。没有的话,在 Packages 安装前先手工建立:

Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Embarcadero\BDS\23.0] "App"="C:\\Program Files (x86)\\Embarcadero\\Studio\\23.0" "RootDir"="C:\\Program Files (x86)\\Embarcadero\\Studio\\23.0"

建立后重启安装程序,检测阶段会把这个键当作有效 IDE。这个操作治标不治本,安装完成后最好再跑一遍库路径映射,确保源码和 DCU 写入了正确位置。

5.2 编译时报 E2599:找不到 dxSkinsCore.dcu

现象:新建工程引用 cxGrid 后,编译时 IDE 直接报E2599 dcc32: Cannot find unit dxSkinsCore.dcu。

原因:Delphi 11 库路径里没有加入 Skins 编译输出的 DCU 目录,编译器在默认搜索路径找不到该单元。

解决:打开 Tool > Options > Delphi Options > Library,把.\Library\Delphi11\Win32\Skins这个子目录加入库路径。注意这里的目录是区分大小写的,Delphi 的路径匹配经过多个版本调整,但 DevExpress 在 Windows 下生成路径时实际是混合大小写,建议直接复制文件资源管理器里的路径粘贴,避免手打大小写翻车。

提示:如果已经加了路径仍然报错,说明机器里同时存在两个不同版本的 dxSkinsCore,编译器很可能先找到了旧版。检查环境变量DevExpressVCL是否被残留设置指向旧目录,清掉后重开 IDE。

5.3 设计期工具箱控件灰掉或图标缺失

现象:安装完成后 IDE 工具箱能看到 DevExpress 选项卡,但所有控件图标是灰色的,拖到窗体上无反应。

原因:设计期包与运行期包版本不一致,或者设计期包未安装。常见于静默安装时没有勾选 Designer components 选项。

解决:打开 Component > Install Packages,检查是否已有DevExpress cxGrid for Delphi 11以及DevExpress Skins等项。缺失时手动加载对应dcl*.bpl文件;灰色状态则先把旧的dcl*.bpl从 IDE 卸载,再重新加载一次。首次加载后 IDE 会提示是否覆盖,选覆盖后重启 IDE 即可。

5.4 运行期提示 runtime package 未找到

现象:程序在开发机上能跑,拷到干净环境后启动报Cannot find package dxSkinsCoreD11.bpl。

原因:EXE 运行时依赖 DevExpress 运行期包,目标机器缺少对应的 BPL 文件。

解决:安装 BPL 到目标机器,或把 DevExpress 运行时库放到 EXE 同目录。更稳妥的做法是把 Project Options 里的 Build with runtime packages 勾掉,重新编译后 EXE 集成控件代码,目标机器不再需要 BPL。这个方法在只有一个模块时最省事,模块多了还是老老实实做一个 redist 目录,里面放 BPL 和依赖的 DLL。

5.5 电脑里同时存在多套 20.x 时互相打架

现象:编译工程时提示dclcxGridD11.bpl无法加载内存中的另一份cxGridD11.bpl,IDE 直接崩溃。

原因:卸载旧版时没有清干净注册信息,新版 BPL 覆盖了旧文件,但表单里缓存的类名仍指向旧 DCU。

解决:完全退出 IDE,删除C:\Users\<用户名>\AppData\Roaming\Embarcadero\BDS\23.0\*.bpl缓存文件,再重装设计期包。另外检查 Delphi 11 的 Package 搜索顺序,把 DevExpress 相关 BPL 目录放在最前面。这类问题在天猫精灵、家目录用户改过环境变量后尤其高频,统一用系统管理员账户走一遍安装会稳很多。

6. 进阶:用官方构建脚本重编 DCU,顺便验证要不要守 20.2.6

6.1 重建 DCU 的规范流程

很多熟手拿到 20.2.6 直接用预编译 DCU,图省事。可我建议你无论如何在开发机上重建一次 DCU,因为预编译产物可能由 10.4 环境生成,在 D11 上部分内部单元会隐式转码,查错时黑匣子一样。

重新构建时我一般只重建自己用到的模块组,全量构建会让漫漫长夜难熬。我的做法是先生成一份文件清单,然后用批处理过滤器跑:

cd /d "D:\Develop\DevExpress VCL\Sources" set DXBUILD_DIR=BuildOutput for %%R in (dxCore dxSkins cxGrid dxLayout) do ( msbuild.exe "%%R.groupproj" /t:Build /p:Config=Release /p:Platform=Win32 /p:OutputPath="%DXBUILD_DIR%\Delphi11" )

/p:OutputPath是 msbuild 的标准属性,用来把编译产物重定向到一个干净目录,这样能避免和旧 DCU 混在同一目录造成误用。全部构建完成后,把BuildOutput\Delphi11加进库路径最前面,再把旧的Library\Delphi11移走。

这个操作还能验证源码包是否完整:如果某模块源码里引用了同包另一个模块,而文件名缺失,构建会中断并给出确切文件名。我遇到过下载的包缺了dxSkinsLookup.dcu,就是靠这个流程抓出来的。

6.2 如何判断你该不该守 20.2.6

不少人在升级 Delphi 12 与否之间摇摆。我的看法是:如果你的项目依赖的是 cxGrid、dxLayout、dxBar 这种 20.2 就已经非常成熟的功能,升级到 23.x 给你带来的视觉提升远小于迁移成本。表格里列一下关键差异:

对比项DevExpress VCL 20.2.6新版 22.x / 23.x
Delphi 11 支持需手工映射路径原生识别
高 DPI 缩放基本可用,部分编辑器需要微调完善,多显示器体验更好
cxGrid 新增功能无,仅小版本修复新增排序、筛选菜单增强
安装复杂度低,半小时可完成低,但授权包体积更大
稳定度我跑了 4 年多未出事社区反馈有皮肤渲染翻车案例

如果你有一个做了三年以上的桌面端,而团队没有专职 UI 工程师,我会建议守住 20.2.6。它的控件行为已经被海量项目验证过,重编 DCU 后完全能用在新 IDE 上。反之,如果项目需要支持 4K 高 DPI 和多套皮肤平滑切换,再考虑升级。

这套 20.2.6 全源码包我前后装过不下十次,每次都能在半小时内落地到新机器,最好用的一直是带 full source 的那一版。从那以后我每换一次开发机,都强制把“重编 DCU + 跑冒烟测试”走一遍,不跳过任何一个环节。希望这套流程帮你也少折腾一次。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询