
简介Delphi 12.3 配套的 DevExpress VCL 23.2.6 完整源码包面向使用 Delphi 进行桌面与跨平台开发的中高级程序员解决商业控件库升级与源码级调试需求。压缩包内共 2000 个文件以 642 个 cpp、443 个 h、432 个 png、383 个 txt 为主另有 xml、pas、chm、pdf 等类型cpp 与 h 提供完整源码png 为控件图标与界面资源txt 多为说明文档chm 为帮助手册便于理解高级 VCL 组件实现。包体约 523.45MB已有 87 人学习下载。从内容预览可见包含 RibbonNotepad、Office12Views、CustomDrawTableViewDemo 等示例覆盖 Ribbon 界面、Office 风格视图、自定义表格绘制、云存储演示等典型场景开发者可借此深入 DevExpress 内部机制快速构建专业界面并利用完整源码进行个性化修改与排错。源码完整、目录清晰适合按模块查阅和技术进阶。1. 为什么要把 DevExpress VCL 23.2.6 Full Source 装进 Delphi 12.3先说一个反直觉的结论在 Delphi 12.3 里装 DevExpress VCL 23.2.6Full Source 源码包比一键安装包更值得认真对待。官方安装包把 BPL、DCU 按自己的目录结构写死等你想把条件编译换成 Release、把输出目录挪到共享盘IDE 立刻报「Cannot find unit」那时候再回头找源码包已经晚了。源码包的好处是所有 .dproj 都在手边编译顺序、输出路径、条件定义全部可控。它适合两类人一类是要把 VCL 控件编译接入 CI、或者需要按 F7 进组件源码调问题的老手另一类是刚装好 Delphi 12.3、想用 cxGrid 这类表格控件却卡在 Tool Palette 怎么都不显眼的新人。这篇文章就按「选型 → 编译 → 注册 → 验证」的顺序把 Full Source 这条链路上的操作和坑一次说清。2. 动手前先摸清底数Delphi 12.3 与 DevExpress VCL 23.2.6 的匹配关系2.1 三种交付形态别把 Full Source 当安装包用先把交付形态和后续操作对应起来能省掉大量返工。DevExpress VCL 在实际分发场景里常见三种形态官方安装包、Full Source 压缩包、以及已经编译好的单个 BPL。安装包适合只做业务开发、不打算碰组件内部的团队双击下一步再在 IDE 里勾选设计时包就能开工而标题里的 Full Source 包把组件库的工程文件、单元源码、示例和资源全部摊开编译哪几个包、输出到哪个目录、用什么条件定义都由使用者自己决定。选择权变大出错面也变大最常见的翻车就是把它当成安装包解压后随便点开一个 .dproj 就编译结果 IDE 弹出一堆找不到 dcu。交付形态内容安装动作典型场景能否改源码/进 CI安装包预编译 BPL、DCU、设计时包向导式下一步纯业务开发都不行Full Source 源码包.dproj、Sources、Packages、Demos打开工程组自行编译深度定制、自动化构建都可以单个 BPL他人编译好的运行时包复制并注册到 IDE快速消除依赖改不了选 Full Source 的理由一般有两个。第一是要调试组件内部状态比如 cxGrid 某列排序行为异常想确认是用法问题还是组件实现问题源码在手就可以直接按 F7 跟进去看它到底对什么数据结构做了排序第二是要把控件编译纳入每日构建凌晨自动增量编译 dcl 包第二天同事打开 IDE 直接用。这两种需求都没有的话安装包确实更省力这句是真话不用为写文章硬吹源码包。2.2 版本匹配Delphi 12.3 与 23.2.6 只看三个兼容点判断一个组件包和当前 IDE 是否配对别只盯大版本号。DevExpress VCL 在标注兼容范围时通常以 RAD Studio 的 IDE 版本和编译器平台两个维度为准23.2.6 这个版本线对 Delphi 12 系列的 Win32/Win64 平台都是支持的。实际动手前重点核对三处。第一处是工具链机器上必须装了 Delphi 编译器本体而不是只有 CBuilder。源码包里的 .dproj 是 Delphi 工程若 IDE 里没有 Delphi 编译器工程管理器里连文件都打不开。第二处是平台位数Delphi 12.3 的 IDE 进程本身是 32 位所以设计时包必须以 Win32 平台编译才能被 IDE 加载运行时包则可以根据项目需要编 Win64。很多人反复编译却看不到控件就是因为在 Win64 下编译了设计时包IDE 根本不认。第三处是路径RAD Studio 12.x 的 Studio 目录版本号是23.0装完 12.3 后默认在C:\Program Files (x86)\Embarcadero\Studio\23.0后面做命令行编译要到这里取 rsvars.bat。顺便提一句如果你看到的是「Delphi 12.3 绿色版下载」这种免安装版本组件包的注册表路径通常不完整源码包编译基本做不了建议用官方安装包打底再把 Full Source 作为组件来源这才是稳定的组合。2.3 解压源码包先看目录结构再决定从哪个工程下手Full Source 是 rar 压缩包Windows 下可以用 WinRAR 或 7-Zip 解压命令行环境里则用 unrar。解压路径建议直接指到磁盘根目录下的短路径比如C:\DevExpress\VCL\23.2.6。不要解到桌面或带用户名的目录也不要用中文路径——Delphi 编译器对路径中文的容忍度一直不算好遇到一些源文件里硬编码的相对路径编译时逐一爆出来会非常消磨耐心。unrar x DevExpress.VCL.23.2.6.Full.Source.rar \ C:\DevExpress\VCL\23.2.6\ -o参数说明x表示保留压缩包内目录结构解压而不是把所有文件拍平到一层组件包内部目录有依赖关系e参数会破坏它第二个参数是目标路径注意最后的反斜杠unrar 对末尾分隔符处理比较严格-o表示解压时遇到同名文件直接覆盖用于重复解压修正损坏文件解压完成后会看到几个核心目录位于业务组件如表格、工具栏、图表的源码与工程文件、公共的 Sources 源码目录、Demos 示例工程以及按平台划分的二进制输出目录。日常只需要关心工程目录和输出目录Demos 留着做功能参考。源码包体积明显大于安装包因为每个组件的原代码和资源都在里面解压过程耐心等就好。3. 在 Delphi 12.3 里编译 Full Source先运行时包再设计时包3.1 顺序不能反设计时包依赖运行时包的 DCU 和 DCPFull Source 编译的第一原则先全部运行时包再编译设计时包。运行时包是组件真正干活的代码载体编译后生成 DCU 和 DCP设计时包只是 IDE 用来在属性面板、组件面板里展示和操作这些组件的壳它本身依赖运行时包里的单元。顺序反了比如先编译 dcl 包编译器去找运行时包的 DCU 时发现还没有就会报类似“Unit not found”或“版本过期”的错误。经验做法是先把所有不带 dcl 前缀的包按依赖顺序批量编译一遍确认输出目录里出现了各个组件的 DCU 和 DCP再去处理设计时包。这里还涉及一个工程组的概念。源码包解压后通常会把整组包整理成一个.groupproj工程组文件。直接双击单个 .dproj 编译依赖顺序得自己记打开工程组右侧 Project Manager 里按列表从上到下 Build依赖顺序由工程组定义省心很多。第一次编译建议用 Release 配置DEBUG 配置会额外生成调试信息体积大、耗时也长日常用不到一上来就全套调试的时候不必编。3.2 两种编译路径IDE 图形操作与命令行 msbuild图形化编译适合第一次接触的人双击工程组文件确保当前配置是 Release平台选 Win32然后右键工程组选择 Build。编译日志窗口可以看到每个包的状态绿色表示通过。整个过程以二十分钟到半小时为常见时长取决于机器性能和包的多少。命令行方式更适合需要反复重编、或者要把编译接进自动化脚本的场景。先起一个命令行环境加载 Delphi 12.3 的环境变量call C:\Program Files (x86)\Embarcadero\Studio\23.0\bin\rsvars.bat然后进入源码包目录用 msbuild 编译单个运行时包。下面以 dxBar 组件包举例实际操作时把命令里的文件名换成你解压目录里真实存在的 .dprojmsbuild C:\DevExpress\VCL\23.2.6\Packages\dxBar.dproj ^ /p:ConfigRelease /p:PlatformWin32 /t:Build /v:m参数含义逐项说/p:ConfigRelease指定用 Release 配置编译避免输出调试描述符/p:PlatformWin32指定目标平台设计时包必须 Win32运行时包则按项目需要改成 Win64/t:Build是 msbuild 的目标动作等价于 IDE 里的 Build/v:m把日志级别设为最小只输出错误和关键摘要省得刷屏。rsvars.bat会设置 BDS、Delphi 编译器路径等环境变量不执行它后续 msbuild 找不到 bds 工具链这一点是最容易忽略的。3.3 三个必调参数输出目录、DCP 落盘位置、条件定义编译源码包之前建议先在 IDE 的 Project Options 里把三个地方过一遍而不是直接用默认值硬编。第一个是 DCU 输出目录。工程默认会输出到包自己的子目录比如Win32\Release但每个包各放一摊后面 IDE 库路径要加一大堆目录。常见做法是把所有包的输出改到统一目录例如源码包的Lib\Win32\Release库路径只加这一个。第二个是 DCP 输出目录DCP 是设计时包注册时要引用的中间文件路径改到同一目录下编译后检查该目录文件是否齐全比逐个包翻找快得多。第三个是条件定义。源码包自带的条件定义一般保持默认就好不要因为好奇去删RELEASE这类宏部分包会用到第三方依赖如果做裁剪建议从工程文件里查看依赖单元再决定而不是凭感觉精简。路径修改在两个位置在 IDE 里打开工程Project Options Delphi Compiler左侧的 Output 和 DCP 相关配置命令行里则通过 msbuild 属性传入msbuild cxGrid.dproj /p:ConfigRelease /p:PlatformWin32 /t:Build ^ /p:DCC_DefineRELEASEDCC_Define是 .dproj 里条件定义对应的 msbuild 属性名效果等同于 IDE 里的 Conditional defines。如果多个包都要改可以直接把整个Packages目录下的工程文件统一处理常见做法是用一个批处理脚本遍历所有 .dproj依次执行上面的 msbuild 命令省得手动开几十个工程。3.4 编译失败先看这张表别急着重装Full Source 编译失败时错误信息往往比想象中直白。把常见输出信息按现象分类可以直接对应到原因和动作错误日志特征直接原因处理方式找不到 dcu / dcp 文件运行时包还没编译或输出目录没进库路径先编译全部运行时包再把输出目录加到 Library Path提示某个包存在但版本不匹配机器上有旧版本残留比如上次改名安装的清理干净所有旧 DX 输出目录重新编译一次编译到一半提示源文件不在解压路径带空格或中文工程文件里的相对路径失效移到短路径重新解压提示 bds 或 msbuild 无法识别没有先执行 rsvars.bat回到 3.2 补环境变量步骤错误停止在某个第三方依赖上该组件包依赖独立的公众单元检查包目录里的依赖说明先编译被依赖的基础包其中“版本不匹配”这一类最容易浪费工作时间。源码包里同一套包的输出目录如果之前装过别的版本旧的 DCU 和 DCP 会混进来IDE 挑新的或老的用完全看搜索路径顺序。处理方式只有一个把输出目录彻底清空然后全量重编。Debug 与 Release 的产物要分开目录这也是推荐 Release 单独输出的原因之一。4. 装完组件不显示注册、库路径与常见误用一起排4.1 Tool Palette 不出组件先查这三件事工程组编译全部通过打开新 VCL 工程发现 Tool Palette 里没有 DevExpress 的任何组件。这一步卡住的人特别多而且多数不是编译问题是注册或路径问题。逐项排查顺序如下先确认组件面板是否启用了对应包再确认库路径是否包含刚才的输出目录最后确认设计时包是否真的安装成功。顺序不要倒过来很多人一上来就重编 dcl 包白白浪费时间。设计时包的安装入口在 IDE 主菜单 Components Install Packages弹窗里能看到当前已注册到 IDE 的设计时包列表。点 Add 按钮定位到刚才编译好的 DCL 输出目录选那个文件名以 dcl 开头、可能带版本号的 BPL 文件。选中后 IDE 会加载并刷新 Tool PaletteDevExpress VCL 的多个包通常集中在 DX 相关的组件页里。部分情况下紧接一个操作关掉 Delphi 12.3 重新打开。IDE 对增量安装的包有时不会立刻刷新组件面板尤其在高 DPI 的机器上重启一次基本都会出来。4.2 Library Path 的作用域IDE 全局搜索路径与项目 Search Path 的区别库路径是整个组件能否被源文件正常引用的基础。进入 Tools Options Environment Options Delphi Options左侧选择 Library - Win32右侧 Library path 编辑框里添加统一输出目录例如C:\DevExpress\VCL\23.2.6\Lib\Win32\Release同时切换 Library - Win64把对应的 Win64 输出目录再加一遍。这里要区分清楚IDE 全局的 Library Path 相当于所有项目的系统级搜索路径任何工程都能引用Project Options 里的 Search Path 只对当前工程生效。组件安装后新建工程能编译、老工程却报找不到单元多半是旧工程的 Search Path 没有包含新组件目录——新工程自动用了全局路径旧工程仍按老配置走。常见误用是图省事把全部源码目录加进 Library Path让编译器自己找 dcus。这会导致 IDE 在启动时或编译时扫描大量源代码工程打开变慢而且多个包之间存在同名单元时搜索路径顺序会引入难以察觉的编译结果不确定性。正确做法是让编译器只指向已经编译好的输出目录源码目录保持工程文件自己去定位。4.3 运行时 BPL 的部署别一股脑塞进系统目录设计时包装好了IDE 里拖控件、改属性都正常但编译出的程序在别的机器上运行却报缺 BPL这就到了运行时包部署环节。DevExpress 组件在链接方式上分成两派静态链接 DCU 和动态链接 BPL。默认情况下组件包以 BPL 方式动态链接可执行文件体积小但要在目标机器上把需要的 BPL 一并带上如果不想带一堆 BPL可以在工程 Options 里把运行时包都取消勾选改用静态编译可执行文件明显变大部署却相应的变成单个 exe。部署最直接的做法是把可执行文件用到的 BPL 复制到 exe 同级目录。目标机器上不必装 Delphi操作系统会优先在当前目录找 BPL再找系统目录。只要把 DevExpress 相关 BPL名字以 DX 开头的那几个和对应的运行库一起放到同一目录程序就能启动。不推荐全量复制到 System32组件包版本一多系统目录里的同名 DLL 或 BPL 相互覆盖排查起来比复制几个文件麻烦得多。这一步也正是很多入门教程没有讲透的地方。5. 验证 23.2.6 是否真正生效最小 cxGrid 工程部署收尾5.1 用 TdxMemData 喂数据给 cxGrid 的最小工程组件安装完成后建议建一个全新的 VCL 工程做冒烟验证不要直接拿老项目试。验证选择 TdxMemData 搭配 TcxGrid是因为这两个组件覆盖数据源与单元格渲染两条关键链路不依赖外部数据库就能一次性验证主要功能。窗体上放一个 TdxMemData、一个 TDataSource再放 TcxGrid并把 cxGrid 的 View 类型换成 DBTableView然后对齐连接。procedure TfrmMain.FormCreate(Sender: TObject); begin dxMemData1.FieldDefs.Add(Name, ftString, 50); dxMemData1.FieldDefs.Add(Score, ftInteger); dxMemData1.Close; dxMemData1.CreateDataSet; dxMemData1.Open; dxMemData1.Append; dxMemData1.FieldByName(Name).AsString : Delphi 12.3; dxMemData1.FieldByName(Score).AsInteger : 90; dxMemData1.Post; cxGrid1DBTableView1.DataController.CreateAllItems; end;逻辑说明与参数要点先用 FieldDefs 定义两个字段再 CreateDataSet 生成内存表结构之后 Open 与 Append 顺序不能颠倒否则数据集还在结构创建阶段就被写入数据容易触发数据集状态类错误CreateAllItems是让表格视图按字段自动生成列省去手写列定义适合做验证若需要列显中文标题直接改 TcxGridDBColumn 的 Caption 即可。运行后窗口里能看到表格数据说明运行时包登记成功dcl 包也没白装。5.2 部署文件清单BPL、RSM 与资源文件各司其职验证工程能运行接下来就是给用户交付。常见做法是用 IDE 的 Deployment Manager 自动列出目标平台所需文件然后把它们随 exe 一起发布。文件分三类BPL 运行时包、RSM 调试资源和一些组件依赖的资源文件。BPL 在 exe 同级目录RSM 在需要远程调试的时候才需要保留正常发布可以去掉少数报表或皮肤组件还会带各自的资源文件例如皮肤包的主题文件或图标集缺失时表现往往是界面为空或加载异常。文件类型作用缺了会怎样发布时建议BPL 动态包控件主体与依赖启动报缺 DLL/BPL复制到 exe 同级目录RSM 调试符号调试信息无影响不发布皮肤资源文件界面视觉主题窗体显示异常按需打包放资源路径下DCU/DCP编译期中间文件运行时无用不发布5.3 收尾技巧把 DCP 输出目录固化到 IDE下次升级省一半时间最后留一个实用的收尾动作在 Project Options 里把全工程的 DCP 输出目录统一指向Lib\Win32\Release_DCP同时把这个目录也加进 IDE 全局 Library Path。原因很简单下次拿到新版本源码包编译后会覆盖 DCU 和 BPL但 DCP 目录如果不统一旧版的 DCP 容易残留设计时包注册时可能索引到旧文件。统一 DCP 目录后升级编译前的清理动作就变成清空一个目录然后在 IDE 里重新 Install Packages整个流程从半小时缩到几分钟。做完整套动作之后再拖一个 cxGrid 到窗体编译、运行、看到数据DevExpress VCL 23.2.6 Full Source 在 Delphi 12.3 里的这套链路就算彻底打通了。本文还有配套的精品资源点击获取