简介:这份资源面向已将 Delphi 升级至 11、需要同步更新界面控件库的开发者,提供 DevExpress VCL 20.2.6 的完整安装包,解决国内渠道版本混杂、下载后无法编译或实为试用版的问题。压缩包为 7z 格式,体积约 473MB,内含可直接运行的 DxAutoInstaller.exe 安装入口及配套组件文件,安装过程无需繁琐的手动配置,装完后在 Delphi 11 中即可调用。资源标签涉及 DevExpressVCL、fullsource 与 Delphi11,适合具备一定 VCL 开发经验、希望快速恢复既有项目界面能力的中高级程序员。目前已有 520 人浏览学习,说明该版本在升级场景中有一定关注度。对于正在迁移旧项目或搭建新工程的团队,这份经过实际编译验证的完整源码包能省去反复搜索与试错的时间,直接进入开发环节。
1. DevExpress VCL 20.2.6 装到 Delphi 11:一份能直接复现的控件包落地记录
手上有个老项目要从 Delphi 10.2 迁到 Delphi 11,界面层全是 DevExpress VCL 的皮肤和网格控件,重写不现实,只能把控件包跟着升上去。翻了一圈,能同时满足「支持到 Delphi 11」「带完整源码」「非试用版」三个条件的,就是这份 DevExpress VCL 20.2.6 安装包。它解决的不是「要不要用第三方控件」这种选型问题,而是「老工程升级 IDE 后,控件库怎么无损接上」的落地问题。适合正在做 Delphi 版本迁移、需要重新编译控件包、或者被试用版水印和编译报错折腾过的从业者。下面按我实际拆包、编译、装进 IDE、跑通 Demo 的顺序写,参数和坑都落在具体位置。
2. 拆包看结构:fullsource 版到底给了什么
拿到压缩包先别急着双击安装,先看清楚目录结构,这决定了后面是走「一键安装」还是「手动编译」。DevExpress VCL 的 fullsource 版本和普通安装版的差别,核心就在源码是否完整、是否需要自己编译 BPL/DCU。
2.1 目录分层与关键文件识别
解压后典型的分层是这样的(不同小版本命名略有差异,以实际为准):
| 目录/文件 | 作用 | 是否必须 |
|---|---|---|
Library | 预编译 DCU、BPL 及运行时包 | 是,安装器依赖 |
Sources | 完整 Pascal 源码,fullsource 的核心 | 是,重编译要用 |
Packages | 各 IDE 版本的.dpk/.dproj工程 | 是,手动编译入口 |
Setup.exe | 图形化安装器 | 可选 |
Help | CHM 帮助文档 | 否 |
Demos | 示例工程 | 否,但验证有用 |
判断是不是 fullsource,最直接的办法是看Sources下有没有成规模的.pas文件,以及Packages里是否按 IDE 版本分目录(如Delphi26对应 Delphi 11)。如果只有Library没有Sources,那就是纯二进制分发,后面想改源码或适配新编译器就没戏了。
2.2 版本号与 IDE 编译器的对应关系
Delphi 的编译器版本号是玄学重灾区,装错目录直接导致「找不到单元」。常见对应关系:
| IDE 版本 | 编译器代号 | 包目录常见命名 |
|---|---|---|
| Delphi 10.2 Tokyo | 25 | Delphi25 |
| Delphi 10.3 Rio | 26 | Delphi26 |
| Delphi 10.4 Sydney | 27 | Delphi27 |
| Delphi 11 Alexandria | 28 | Delphi28 |
注意 20.2.6 这个控件版本发布时,Delphi 11 的官方支持可能是后期补丁形式加入的,所以Packages里未必有现成的Delphi28目录。这种情况就得用 Delphi 10.4 的工程在 Delphi 11 里打开重编译,这是后面第 4 章要重点处理的点。先记住:目录名对不上不代表不能用,关键看源码能否在新编译器下通过。
2.3 安装前的环境清理
老机器上如果装过旧版 DevExpress,注册表和环境变量里会残留路径,新包编译时可能链接到旧 DCU,出现莫名其妙的「版本不匹配」。我一般先做三件事:
# 1. 备份当前 IDE 的库路径(Delphi 11 默认在用户目录下) # 路径形如:C:\Users\<用户>\Documents\Embarcadero\Studio\22.0\... # 2. 记录已安装的第三方包列表,装完对照 # 3. 关闭 IDE,确保没有 bds.exe 进程占用 BPL tasklist | findstr bds.exe逻辑说明:Delphi 的包搜索路径分「全局」和「工程级」,旧版残留多在全局库路径里。先备份再动手,出问题能回滚。tasklist那步是血泪经验——IDE 开着的时候覆盖 BPL 会报「文件被占用」,很多人以为是权限问题,其实是进程没退干净。
3. 编译与安装:从源码到 IDE 面板可见
这一章是核心操作区。fullsource 版的价值在于「能自己编译」,所以我不推荐直接跑Setup.exe了事,手动编译一遍才能确认源码和当前编译器真的兼容。
3.1 用命令行编译运行时包与设计时包
DevExpress 的包分两层:运行时包(*R.bpl,如cxLibraryR.bpl)和设计时包(*D.bpl,提供 IDE 面板上的控件图标)。设计时包依赖运行时包,顺序不能反。用dcc32/msbuild都行,我习惯用 IDE 的msbuild保证和 IDE 内编译一致:
# 进入 Packages 下对应 IDE 版本的目录(以 Delphi 10.4 工程在 Delphi 11 下重编译为例) cd "D:\DevExpress\Packages\Delphi27" # 先编译运行时包,再编译设计时包;/p:Config=Release 走发布配置 msbuild cxLibraryR.dproj /p:Config=Release /p:Platform=Win32 /t:Build msbuild cxLibraryD.dproj /p:Config=Release /p:Platform=Win32 /t:Build逻辑说明:/t:Build是完整重建,避免增量编译残留旧 obj;/p:Platform=Win32必须显式给,Delphi 工程默认可能带 Win64 目标,混编会报「单元重复」。参数上,Config=Release关掉调试信息,产出的 BPL 体积小、加载快;如果要做断点调试控件内部,改成Debug。
编译顺序上,cxLibraryR是最底层的运行时库,其他包(如cxGridR、cxEditorsR)都依赖它。所以正确顺序是:先cxLibraryR,再各功能模块的R包,最后统一编D包。漏了顺序会报「找不到 cxLibraryR.dcp」,这不是源码问题,是依赖没满足。
3.2 在 IDE 里注册设计时包
命令行编出 BPL 后,还要让 IDE 认识它。打开 Delphi 11,走Component → Install Packages → Add,选中刚编出的*D.bpl。注册成功后,工具面板(Tool Palette)里会出现 DevExpress 分类。
这里有个细节:如果Add时报「Cannot load package,它包含单元 xxx,而该单元也包含在包 yyy 中」,说明同一个单元被两个包重复包含。常见原因是旧版包没卸载干净。解决顺序是先在Install Packages列表里Remove掉所有 DevExpress 相关项,再重新Add,不要直接覆盖。
3.3 库路径配置与工程级引用
包注册只解决「IDE 面板可见」,工程编译还需要库路径能找到 DCU 和源码。在Tools → Options → Language → Delphi → Library里,把Library\Win32\Release和Sources加进Library path。更稳妥的做法是只配工程级搜索路径(Project → Options → Delphi Compiler → Search path),这样不同项目可以用不同控件版本,互不污染。
// 验证用:新建一个 VCL 窗体,拖一个 cxGrid,编译通过即说明路径正确 procedure TForm1.FormCreate(Sender: TObject); begin cxGrid1 levels := 0; // 占位,实际按需配置 end;上面这段只是确认单元能被uses到、链接不报错。真正验证功能要看第 5 章的 Demo 跑通。
4. 避坑与排查:五个真实翻车点
控件包安装的坑高度集中在「版本错配」和「路径污染」两类。下面五条是我和同事实际踩过的,按现象、原因、解决写。
4.1 编译报「Unit not found: System.SysUtils」
现象:命令行msbuild一上来就报找不到基础单元。原因:dcc32的库路径没继承 IDE 配置,或者环境变量BDS/BDSLIB指向了旧版本。解决:在命令行先执行 IDE 自带的rsvars.bat(位于 IDE 的bin目录),它会设好BDS、FrameworkDir等变量,再跑msbuild。这一步很多人省掉,结果路径全是默认值。
4.2 设计时包加载后控件面板空白
现象:Install Packages显示已加载,但 Tool Palette 里没有 DevExpress 分类。原因:设计时包编译时没带DESIGNTIME条件,或者 BPL 被放到了 IDE 搜索路径之外。解决:确认.dproj的Define里有DESIGNTIME,并把 BPL 输出目录加入 IDE 的Browsing path。改完重新Build设计时包,重启 IDE。
4.3 运行时报「Access violation」在皮肤初始化处
现象:程序启动加载皮肤时崩,堆栈指向cxSkins相关单元。原因:运行时 BPL 和 DCU 版本不一致——工程链接的是旧 DCU,运行时加载的是新 BPL。解决:清理工程目录下所有.dcu、.obj,Build而非Compile;同时确认Library path里没有旧版 DevExpress 目录排在前面。
4.4 Delphi 11 下编译 10.4 工程报「Unsupported platform」
现象:用Delphi27目录的工程在 Delphi 11 打开,编译报平台不支持。原因:.dproj里的Platforms节点还是旧 IDE 写的,缺Win32/Win64的新标识。解决:在 IDE 里Project → Options → Delphi Compiler → Target重新勾选目标平台,保存后.dproj会被重写;或者手动在工程文件里补<Platform value="Win32"/>。
4.5 安装后 IDE 启动变慢或偶发崩溃
现象:装完控件包,IDE 冷启动明显变慢,偶尔在打开工程时崩。原因:加载了过多设计时包,或某个包在initialization段做了重活。解决:Install Packages里只保留当前项目真正用到的模块包,把不用的D包Remove;崩溃时看 IDE 的bds.exe事件日志,定位是哪个 BPL 加载失败。
提示:每次动包之前,把
Install Packages列表截图存一份,出问题能快速对照回滚,比记在脑子里靠谱。
5. 验证与进阶:用 Demo 反推配置是否正确
装完不算完,得用实际工程验证。Demos目录里挑一个用到 Grid + 皮肤 + 编辑器的综合示例,编译运行,重点看三件事:皮肤能否切换、Grid 的右键菜单是否正常弹出、数据感知控件能否正确绑定。这三项覆盖了运行时包、设计时包和 IDE 集成三条链路。
进阶用法上,fullsource 版最大的价值是能改源码适配特殊需求。比如某个控件的行为不符合业务,可以直接改Sources下的.pas,然后只重编译受影响的包,不用等官方发版。改之前建议在Sources上做一层版本管理(哪怕只是复制一份带日期的备份),否则下次升级控件包时改动会被覆盖,这是后悔药都买不到的操作。
另一个技巧是「按项目隔离控件版本」:不同项目引用不同目录下的 DevExpress,通过工程级Search path指定,而不是全局库路径。这样老项目锁在 20.2.6,新项目可以试更高版本,互不打架。配置时把Library path留空,全部走工程级,虽然每个新工程要多配一次,但换来的是升级时的从容。
验证清单我一般这么过一遍:
| 验证项 | 通过标准 | 失败先查 |
|---|---|---|
| 包加载 | Tool Palette 出现分类 | DESIGNTIME 条件、Browsing path |
| 编译 | 无 Unit not found | rsvars.bat、库路径顺序 |
| 运行 | 皮肤/Grid 正常 | DCU 与 BPL 版本一致 |
| 迁移 | 老工程直接 Build 通过 | 平台节点、旧 DCU 残留 |
从那以后我每次装控件包,都强制先跑一遍rsvars.bat再编译、装完先截Install Packages列表、改源码前先备份Sources——这三步看着琐碎,但省下的排查时间远超投入。希望帮到你。
本文还有配套的精品资源,点击获取