ARTICLE DETAIL

资讯详情

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

DevExpress VCL 25.1.6 全源码安装与多版本 Delphi 配置

DevExpress VCL 25.1.6 全源码安装与多版本 Delphi 配置 简介DevExpress VCL Controls v25.1.6是针对Delphi XE7至XE13Florence深度适配的高级UI组件库涵盖数据可视化、网格、报表、图表、导航与布局管理等模块并附DxAutoInstaller自动化安装工具可显著减少手动配置成本。整套源码包共2000个文件以cpp/h源文件为主体辅以png界面资源、txt/xml配置说明、pas单元及CHM帮助文档等压缩后约640.38MB目录结构便于按Demo与功能模块检索。包内还包含大量官方示例工程覆盖Ribbon界面、自定义表格视图、就地编辑器等典型场景配合全量源码开发者既能快速上手也可深入理解控件实现并做源码级定制。目前已有399人学习下载适合需要现代化界面方案、熟悉MVVM模式或希望扩展DevExpress组件的Delphi中高级开发者。1. 从“拿到源码包”到“Delphi 里多出控件面板”DevExpress VCL v25.1.6 全源码安装到底在做什么刚把 IDE 从 Delphi XE7 换成 Delphi 13.1Florence工具箱里却空空如也或者你手上有几十万行老项目窗体上的 dxBar 和 cxGrid 一到新环境就报“找不到单元” —— 这时候你需要的不是一个个去下载编译好的 bpl而是一份带 Full Source 的 DevExpress VCL Controls v25.1.6以及一个能把它批量装进多个 Delphi 版本的 DxAutoInstall 工具。这套方案解决的是三件事跨 XE7 到 13.1 多版本共存、动态编译全部或部分控件源码、让 IDE 自动注册组件而不需要手工改注册表。适合谁维护老项目又要追新 IDE 的 Delphi 老手以及刚接手一套历史代码、必须在三天内把构建环境拉起来的新人。它能省下你逐个包编译的大半天时间但前提是你得先搞懂它在背后替你做了什么。2. 安装前的三个判断Delphi 版本、源码目录和 DxAutoInstall 的角色2.1 为什么全源码版比编译好的 dcu/bpl 更折腾也更好用DevExpress VCL 的交付形态常见有两种一种是只给编译好的二进制 bpl/dcp装上就能用省事另一种就是标题里这种 Full Source把整个 VCL 控件库的 .pas 源码、.dpk 包工程、皮肤图片资源全部摊开给你。对这个全源码版本我一般会直接说如果你只是想在 IDE 里拖几个控件写个新项目不必碰它但如果你要维护的是老项目、需要升级控件版本、或者想定位控件内部崩溃的堆栈那编译好的二进制包就是黑匣子你连 bug 改在哪一行都看不到。全源码版的核心价值有三个。第一是可裁剪你不需要把几 GB 的控件全部编译只要在工程组里勾选项目实际用到的模块比如 cxGrid、dxBar、dxLayoutControl剩下不用的包可以直接跳过。第二是可调试你把源码路径加进 IDE 的 Debug Source Path 之后按 F7 能直接跟进控件内部代码这对排查“导出 Excel 时莫名崩溃”之类的问题非常管用。第三是可追版本差异DevExpress 25.1.6 对应的是 2025 年的版本线源码里保留了大量的条件编译指令{$IFDEF DELPHI26} 之类你切到不同 Delphi 版本编译时编译器会自动选择对应的代码分支。代价也很实在。全量编译一次通常在 30 分钟到 1 小时中途报错你得自己判断是环境问题还是包依赖顺序问题生成的 bpl 文件数量多装完不清理的话IDE 启动会明显变慢。所以我的建议是先别急着跑 DxAutoInstall花十分钟把当前机器上装了哪些 Delphi 版本、每个版本打算用哪些控件模块列清楚这份取舍在后面能省你一下午。2.2 DxAutoInstall.exe 是谁自动编译器的工作逻辑DxAutoInstall 是 DevExpress VCL 源码包里自带的自动安装工具它在安装流程里扮演的角色相当于一个“编译调度器”。它要做的事情本质上就是一条链识别你机器上已安装的 Delphi 版本 → 按版本号找到 BDS 安装路径和注册表项 → 把源码复制到约定的目录 → 按依赖顺序调用 dcc32/dcc64 编译 runtime 包 → 再编译 designtime 包 → 把生成的文件放到 IDE 的 bin 目录 → 最后写注册表让 IDE 控件面板认识这些新包。这里的关键是“按依赖顺序”。DevExpress VCL 的包不是平级的最底层是核心 runtime 库DevExpress.Utils、DevExpress.Data往上是各控件模块dxBar、cxGrid、dxLayoutControl最顶层是设计时包。如果你手工编译顺序错了就会报“找不到 DevExpress.Utils”但 DxAutoInstall 会把这一串依赖关系按固定次序排好这也是为什么大家普遍选择用它而不是自己在 IDE 里逐个打开 dpk 编译。它识别 Delphi 版本的方式是去读 Windows 注册表里 BDS 的安装信息比如HKCU\Software\Embarcadero\BDS\版本号下的RootDir键。所以环境里有一个重要前提DxAutoInstall 只认安装过的 Delphi不能用绿色版、免安装版去跑否则它枚举版本列表时就是空的。常见的做法是先把所有需要支持的 Delphi 版本都正常装一遍再跑 DxAutoInstall让它一次处理全部版本。2.3 安装前的目录规划全路径无空格、版本号目录、源码目录只读很多人在这一步翻车不是因为工具不会用而是因为路径太随意。DevExpress VCL 的编译器脚本里大量拼接路径字符串虽然多数版本已经支持带空格的路径但保险起见我依旧建议把整个源码包和安装工具放在一个“全路径无空格、无中文、无特殊符号”的目录里例如C:\Dev\DXVCL25。有人用默认下载目录C:\Users\张三\Downloads\DevExpress VCL\...去跑结果编译到一半脚本找不到带空格路径下的资源文件报出一堆莫名其妙的错误。我的目录结构一般是这样C:\Dev\ ├── DXVCL25\ # DevExpress VCL 25.1.6 解压根目录 │ ├── DxAutoInstall.exe │ ├── Library\ # 控件的源码 .pas 和资源文件 │ ├── Packages\ │ └── ... └── DXBuildLogs\ # 编译日志目录按日期归档解压之后我还会顺手把源码目录设成只读。这个动作看着多余实际能防一个常见的坑DxAutoInstall 运行过程中会在源码目录里生成一些临时 .dcu 文件如果你之后手工去改源码做自定义IDE 可能会优先读取旧的临时文件导致你改了代码却看不到效果。只读 干净的编译输出目录可以单独设置 .dcu 输出路径能让构建过程保持可重复。3. 用 DxAutoInstall 完成一键编译从配置文件到 IDE 识别3.1 先读一遍 DXAutoInstall.ini关键的路径和版本开关在双击 DxAutoInstall.exe 之前先打开它同目录下的DXAutoInstall.ini看几行。这个配置文件是整套自动安装的参数来源它决定 DxAutoInstall 会去哪些源码目录找 .dpk、会尝试把包装进哪些 Delphi 版本、以及编译结束之后是否自动启动 IDE 做验证。不同版本的做法可能有细微差别但它基本是下面这种形态[Setup] SourcePathC:\Dev\DXVCL25\Library LogPathC:\DXBuildLogs InstallForAllUsers0 CompileDesigntimePackages1 AutoRegister1 [DelphiVersions] XE71 XE81 D101 D121 D131重点解释几个参数。SourcePath指向源码根目录注意这里不是让你写.\Library\dxBar这种细分路径而是写最外层源码目录工具会自己在里面递归查找 .dpk 文件。CompileDesigntimePackages控制编译完 runtime 包之后是否继续编译设计时包如果你只是需要命令行环境下能编译工程不想让 IDE 控件面板增加几百个组件可以把它置 0但绝大多数人在 IDE 里拖控件所以默认保持 1。DelphiVersions这个枚举列表是核心开关D131对应的就是 Delphi 13.1FlorenceD121对应 Delphi 12XE71对应 XE7。把不打算用的版本改成 0可以明显缩短编译时间。参数改好之后先别急着运行。这里有一个很玄学的点DxAutoInstall 对 ini 文件里的路径分隔符非常敏感统一用反斜杠\不要在末尾多写一个\否则工具拼接SourcePath\Win32\Release时会变成双反斜杠部分版本会直接跳过该目录。我前几次安装时没注意到这个细节结果它编译完核心库之后找不到任何控件包日志里全是 “Skipping not found path”。3.2 启动安装的三种方式和参数DxAutoInstall 不是一个只有“双击运行”一种方式的图形工具它接受命令行参数方便你在不同机器上复现同一套安装流程。常见做法是测试环境里先跑一遍图形界面确认参数没有错生产环境或同事的机器上直接用命令行方式静默执行。常用的命令长这样# 完整安装输出详细日志 DxAutoInstall.exe /all /log:DXBuild.log # 只编译运行时包跳过设计时包 DxAutoInstall.exe /runtime /log:DXBuild_runtime.log # 静默模式适合无人值守 DxAutoInstall.exe /all /silent /log:C:\DXBuildLogs\silent_install.log几个参数的含义值得说清楚。/all表示对 ini 里所有启用的 Delphi 版本执行编译安装如果只针对 Delphi 13.1可以改用类似/d13的限定参数具体名称取决于版本可以先用/help确认。/log指定日志输出路径这个一定要给否则出错时你只能盯着一个进度条干瞪眼。/silent模式适合批量部署但第一次安装不建议加因为图形界面里能看到当前正在编译哪个包、编译到哪个版本信息比日志直观得多。还有一点要注意DxAutoInstall 编译时会用到 IDE 自带的 dcc32.exe 和 dcc64.exe这两个编译器位于各 Delphi 版本的 bin 目录。如果某个版本的 IDE 正开着并且占用了某些 bpl 文件编译到设计时包注册那一步可能失败。所以我的习惯是关闭所有 Delphi 实例、关掉杀毒软件的文件实时防护再启动 DxAutoInstall。特别是杀毒软件它对大量文件的扫描会让编译时间翻倍有些实时防护还会在 .dcu 写入时报“拒绝访问”这一步踩过坑的人不在少数。3.3 编译过程的观察点哪些步骤不能跳过跑起来之后进度界面会经过几个关键阶段每个阶段对应一类问题。第一阶段是“扫描包工程文件”它会列出所有将要编译的 .dpk 名称这时候你可以核对一下数量通常 DevExpress VCL 完整包的 runtime 工程在几十个左右。如果这里列出的数量明显偏少说明SourcePath指错目录了工具根本没用找到完整的包工程列表趁早停掉改配置比等它编译完更划算。第二阶段是“编译 runtime 包”这是耗时最长的部分。观察点有两个每个包是否依次编译成功以及有没有某些版本被跳过。如果你看到XE7的包全部编完、D13的包一个都没动大概率是 ini 里 D13 后面的开关被误关了或者注册表里 13.1 的安装信息不完整。第三阶段是“编译 designtime 包并注册”这一步会向 IDE 的bpl目录复制文件并写注册表。一个比较隐蔽的现象是日志显示成功但打开 IDE 控件面板找不到 DevExpress 分类。原因通常是InstallForAllUsers和当前用户权限不匹配工具以管理员权限写入了系统级注册表路径而你日常以普通用户启动 IDE读的是用户级注册表路径。4. 只编译你需要的模块按组件类别裁剪工程组4.1 为什么全量编译大多数时候是自我折磨DxAutoInstall 默认行为是编译整个源码库里所有模块这对想“反正先装上再说”的人来说确实省心。但你真的需要吗DevExpress VCL 全家桶包含网格、工具栏、布局管理、皮肤、PDF 查看器、报表、图表、日程、编辑器等十几个大模块一个典型的企业进销存项目可能真正用到的只有 cxGrid、dxBar、dxLayoutControl、cxEdit、dxSkins 这几类。把用不到的报表模块、图表模块、PDF 模块也全部编译进 IDE后果很直接IDE 启动时加载大量 bpl启动时间从 10 秒变成 40 秒内存占用多出数百 MB代码提示和编译速度也受影响。而且模块之间还有依赖关系比如 dxLayoutControl 依赖 dxBardxBar 又依赖核心库你裁剪时不能只留一个顶层包要把它的依赖链一并留下。4.2 核心模块清单哪些是必须的哪些可以砍掉下面这张表是我的裁剪经验按“老项目常用程度”排序你可以对照自己项目的 uses 子句来决定留哪些、砍哪些。注意这里列的是模块级别不是包名称实际编译时每个模块会拆成 runtime 包和 designtime 包两个工程。模块Library 子目录典型用处我的建议Library\CoreDevExpress.Utils 等所有控件的地基没有它一切免谈必须保留不可裁剪Library\dxBar工具栏、菜单、停靠面板绝大多数项目都用保留Library\dxLayoutControl表单布局、自适应界面用就留逻辑依赖 dxBar别单独砍Library\cxGrid / cxEdit数据网格、数据编辑器保留核心业务控件Library\dxSkins界面皮肤、视觉样式看项目是否调用皮肤用不到可砍Library\dxSpreadsheetExcel 类表格控件跟项目导出表格需求走不是必留Library\dxPdfViewerPDF 查看看需求一般可砍Library\dxGauge / dxCharts仪表盘、图表没有硬需求就砍编译时间长Library\ExpressPrint报表打印老项目未必用需要才留裁剪的方式不是去删源码目录而是在 DxAutoInstall 的配置里指定要编译的模块列表或者修改工程组文件.dsk / .groupproj手工勾选。我的习惯是先全量编译一次拿个“完全可用的环境”再在第二个编译环境里做裁剪对比。全量环境留着当“后悔药”真遇到缺包重新编译时不用再折腾裁剪环境用来日常开发保证 IDE 轻快。两边共用同一份源码目录只替换 IDE 里注册的 bpl 文件。4.3 手工调整工程组从 dpk 到 groupproj 的操作路径如果 DxAutoInstall 的配置里没有直接提供模块多选不同版本界面的交互偏好不同你可以绕过去直接改工程组文件。打开源码目录下的Packages\Delphi文件夹你会看到按 Delphi 版本组织的子目录里面是成组的 .dpk 工程文件。DevExpress VCL 自带的工程组文件.groupproj默认引用了所有模块的 dpk。方法如下!-- 这是 .groupproj 的简化片段实际内容比这长得多 -- Project NamedxBarRun FiledxBar.dpk / Project NamedxLayoutControlRun FiledxLayoutControl.dpk / Project NamedxSpreadSheetRun FiledxSpreadSheet.dpk / Project NamecxGridRun FilecxGrid.dpk /把不打算编译的模块所在那行删掉保存后用 DxAutoInstall 或 IDE 直接打开这个工程组文件编译。有一点必须提醒designtime 包和 runtime 包是分开的两个 dpk你删了 runtime 包而不删 designtime 包编译 designtime 时依然会因为找不到依赖而报错。所以裁剪要成对操作。另一个常见问题是你以为删了 dpk 引用就干净了但工程组文件里可能还残留对某个 .bpl 的依赖引用编译其他包时它还会被自动带上。遇到这种情况检查一下被编译包里的requires子句比如dxBarButtons会 requiresdxCore这是源码层面的依赖不是工程组能去掉的。5. 安装后排查三个把新手卡到放弃的常见问题5.1 打开窗体设计器提示“找不到 DevExpress.Utils.DXPDL.dll”这是一个非常典型的“安装成功但没完全成功”的场景。现象是IDE 里能看到 DevExpress 的控件分类拖一个 cxGrid 到窗体上也正常但双击进入窗体设计器时弹窗告诉你找不到DevExpress.Utils.DXPDL.dll或某个资源 DLL。出现这个问题的原因通常是 designtime 包编译完成后资源 DLL 没有被复制到 IDE 的 bin 目录。DevExpress 的大量图标、字符串资源不直接编进 bpl而是以独立 DLL 形式放在源码目录的Library\Resources或对应模块目录下。DxAutoInstall 全量安装时会一并复制但如果你只编译了部分包、或者手工改过输出目录这一步就会被跳过。解决方法不复杂也属于值得记下来的那种偏方在源码目录里全局搜索那个缺失的 DLL 文件名找到后手动复制到 Delphi 13.1 的 bin 目录例如C:\Program Files (x86)\Embarcadero\Studio\23.0\bin再重启 IDE。如果同一个模块在多个 Delphi 版本共存别只复制到最新版本挨个版本都拷一遍。你可能会觉得这不科学但我见过的 DevExpress 版本里确实有几版的 DxAutoInstall 在资源文件复制这块存在路径拼接问题手动复制是通行解法。5.2 编译 64 位目标时控件面板变灰现象是在 Delphi 13.1 里用 32 位 Windows 平台编译项目一切正常换成 64 位平台项目能编过但 IDE 窗体上的 DevExpress 控件全部显示为灰色不可编辑。这个问题的原因要分两层看。第一层DevExpress VCL 的控件包分 Win32 和 Win64 版本DxAutoInstall 默认会两个平台的包都编译但如果只编译了 Win32 的 designtime 包IDE 在 64 位设计环境下就加载不到对应的设计时包。第二层IDE 的控件面板在 64 位目标下需要的是同一个 designtime 包但编译目标为 Win64并且在Component Install Packages里同时勾选两个平台的 bpl。解决思路是确认DXAutoInstall.ini或命令行里是否带上了 Win64 编译目标常见做法是重新运行一次全量安装并检查日志里是否同时出现Win32和Win64两组“Install package successful”的记录。如果你使用了自己裁剪过的工程组文件特别容易漏掉 64 位版本因为工程组里的 dpk 工程有Config属性有些工程只配置了 Win32默认不会编译 Win64。遇到这种情况打开 .dproj 文件检查是否有Platform值为Win64的配置没有就补上然后重新编译对应 designtime 包。5.3 编译大工程时报“out of memory”或“cannot allocate memory”这是一个很容易和操作系统内存混淆的环境问题。现象是用 Delphi 13.1 的 32 位 dcc32.exe 编译一个引用了大量 DevExpress 包的大项目编译到一半编译器报内存错误直接退出。原因有两层一是 32 位进程在 Windows 下默认用户态地址空间有限而 DevExpress 的某些单元特别是 cxGrid 相关体积很大符号表膨胀后把地址空间耗尽二是 DxAutoInstall 一次性给编译器设置了过大的-N系统搜索路径路径越多编译器维护的单元缓存越大内存占用越高。这不是说你只能换 64 位编译器很多老项目还依赖 32 位工具链换不掉。我习惯先做两个调整第一在项目里把 DevExpress 相关的搜索路径从“全源码目录”收窄到“只包含用到的模块目录”减少编译器加载的 .pas 文件数量第二给 dcc32.exe 设置一个环境变量BDS_USE_64BIT_DCC如果 IDE 版本支持或在工程配置里把Compiler选项切到dcc64然后看项目里是否有平台相关的第三方库无法在 64 位下编译。如果确认没有用 64 位编译器跑是最省心的解法。我见过不少“共用开发机上的 Delphi 13.1 一编译就内存错误换 64 位立刻过”的案例这就是典型的 32 位 dcc 瓶颈。5.4 DxAutoInstall 在编译器列表中显示不出 Delphi 13.1Florence现象是别人机器上 DxAutoInstall 能看到 Delphi 13.1你机器上却只列出到 Delphi 12或者反过来列表有 13.1 但勾选后编译时提示找不到编译器路径。原因一般不是工具问题而是它读取的注册表键缺失或错位。Delphi 13.1 的 BDS 注册表路径可能与其他版本并存但安装顺序、用户名权限会导致HKCU\Software\Embarcadero\BDS\24.0举例版本号按实际没有写入当前用户。解决方法是手工检查注册表确认键存在、RootDir 指向正确的 IDE 安装目录不存在就补建一个存在但路径不对就直接修正。另一个漏判点如果机器上同时装了 32 位和 64 位 Delphi 版本DxAutoInstall 在 32 位进程里读取注册表时可能需要走Wow6432Node节点这种情况下用管理员权限运行工具通常能解决。6. 安装只是开始验证最小工程、锁定参数和给未来升级留后路环境装好之后别急着把大项目拉进来试水先花五分钟建一个最小验证工程确认组件面板、运行时编译和设计时资源三样都正常。// 最小验证工程Main.dpr program Main; uses Vcl.Forms, Unit1 in Unit1.pas {Form1}; {$R *.res} begin Application.Initialize; Application.MainFormOnTaskbar : True; Application.CreateForm(TForm1, Form1); Application.Run; end.在 Unit1 的窗体上放一个 cxGrid、一个 dxBarManager再放一个 TdxSkinController把皮肤切到 Office2019 风格然后分别用 Win32 和 Win64 目标编译运行。这一步能一次性暴露大多数问题cxGrid 加载说明 runtime 包完整dxBarManager 出现在工具箱说明 designtime 包注册成功皮肤能切换说明资源 DLL 路径没有遗漏。三个点全通过才算真正装好。接下来把安装参数记成一份 README。记录的内容包括源码包版本DevExpress VCL 25.1.6、各 Delphi 版本的启用开关、裁剪掉的模块列表、命令行参数、日志归档位置。这样做的原因很现实半年后你同事在新的构建机上复现环境或者你升级到下一个 DevExpress 版本都需要一份“当时是怎么装出来的”记录。我自己的习惯是把这份 README 放进源码仓库的docs\environment目录构建机环境出问题时它比任何走查流程都好使。最后说升级。DevExpress VCL 的新版本发布后直接下载新包跑 DxAutoInstall 覆盖旧版大多数时候没有问题但这是一种有风险的习惯。新版本的 designtime 包会覆盖旧版 bpl你的老项目如果还没有完全适配新版 API可能会出现个别属性名变化、方法废弃甚至某个控件系列被重构导致编译大面积报错。我的教训是升级前先把旧版本的 bpl 目录整体备份同时把当前项目的第三方依赖版本记录下来新包装完后先在最小工程上验证核心模块再拉老项目编译。如果你长期停留在老版本备份 回滚路径就是你的后悔药别嫌麻烦。这套流程跑通之后DevExpress VCL 的版本维护就不再是黑匣子希望你装的时候少踩几个我踩过的坑顺利把环境搭起来。本文还有配套的精品资源点击获取
返回列表