简介:这套DevExpress VCL Controls 26.1.3 EN版本专门面向使用Embarcadero Delphi 13.1(RAD Studio 13.1,代号Alexandria)的Windows原生应用开发者,覆盖数据网格、报表引擎、图表、富文本编辑器、Office风格Ribbon、仪表盘及地图等200余种高商业价值控件,可大幅缩短桌面企业管理软件的界面与交互开发周期。压缩包体积601.74MB,共2000个文件,以cpp、h、pas等源码与头文件为骨架,配合dfm窗体资源、xml配置、png图标、txt说明以及chm帮助文档,便于在设计期与运行期对照查阅;其中多个Demo工程直接展示Ribbon、表格自定义绘制与内容展示等实际用法。当前已有45人浏览下载,适合需要系统了解VCL控件机制并落地到业务项目中、中高级Delphi工程师参考。包内离线帮助文档CHM、详尽的API注释与大量示例工程可让开发者快速掌握控件属性、事件联动、数据绑定与主题切换逻辑,同时通过源码了解严格模式编译下的内存管理、Owner/Parent关系与高DPI适配等底层细节,省去从零踩坑的时间。
1. 这套 DevExpress VCL 26.1.3 是 Delphi 13.1 上最该先装的控件集:它能解决什么
项目排期只剩两周,Manager 要你交一版带表格、树形菜单、皮肤换肤的进销存客户端演示,UI 没人手,自己写又得踩一堆边框、对齐、排序的坑——这种时候,装一套 DevExpress VCL Controls 是最省时间的解法。这个 26.1.3 英文版控件包,是针对 Delphi 13.1 这条 IDE 版本线编译的完整 VCL 控件体系,覆盖表格、树、编辑器、皮肤、调度等桌面端高频场景,不是单个小插件,是一整套能同时挂进 IDE 组件面板的框架。适合三类人:维护老业务系统要快速升级界面的、从 C++ Builder 转 Delphi 的、以及项目交付前需要统一界面风格的。
2. 版本对应与安装前置:26.1.3 匹配哪些 IDE,装之前先查这一张表
2.1 DevExpress VCL 版本号怎么看:26.1.3 和 Delphi 13.1 的对应关系
拿到文件名先别急着解压,先看懂版本号。DevExpress 的版本规则是「年份.发布季度.修订号」,26.1.3 表示 2026 年第一季度的第三个修订 build。这个版本和 Delphi 版本号是两条独立的线,IDE 是 RAD Studio 的版本线,控件包是 DevExpress 的版本线,二者靠「编译时绑定的 bpl 包名」关联起来,绑错了 IDE 直接打不开工程。
常见做法是先去 DevExpress 官方页面查 Version Support Matrix,一个大版本通常覆盖当时主流的三个到四个 Delphi/C++ Builder 大版本,并向后兼容到较老的版本线。标题里写的是 Delphi 13.1,对应 RAD Studio 13.1 这条线;控件包 26.1.3 是 2026 年上半年的版本,正常情况下会覆盖 13.1 对应的 IDE 版本。注意,文件名的 EN 表示资源是英文的,安装后 IDE 组件面板、属性编辑器里的术语都是英文,中文业务系统要做好术语统一的心理准备。
| 信息项 | 看哪里 | 说明 |
|---|---|---|
| 控件包大版本 | 文件名 26.1.3 | 大版本决定匹配哪些 IDE 线 |
| IDE 版本 | 标题 Delphi 13.1 | 安装时勾选的编译目标 |
| 语言资源 | 文件名 EN | 界面术语为英文 |
| 运行时包目录 | 安装目录 | 目录名含版本号,用于后期部署 |
安装器会探测你机器上的 IDE 版本,如果版本不在它的支持矩阵里,会直接灰掉安装按钮。我的习惯是装之前先记下当前 IDE 的准确 build 号(About 对话框里能看到),再对照矩阵,避免装到一半发现不匹配又全部卸载。
提示:DevExpress 是商业控件,正式项目交付需要对应 License。想先评估功能可以用试用模式,正式发布前向厂商采购授权,这是合规底线。
2.2 装之前必须做的三件事:杀软白名单、清理旧版、确认 IDE 补丁
第一件是杀软实时防护。安装过程要往系统目录注册一批 bpl 和 dll,杀软实时监控会逐条扫描,进度条卡住不是玄学,是扫描器在和安装器抢文件锁。我一般先把安装目录加到白名单,再把实时防护临时关掉,装完再开回来。
第二件是清理旧版本。机器上如果装过 DevExpress 的旧版(比如 24.x、25.x),残留的 bpl 会和 26.1.3 的包重名冲突,打开 IDE 时报「Package ... was not installed」。卸载干净是唯一的后悔药。卸载完成后可以跑一条命令确认系统目录里没有残留:
dir C:\Windows\System32\DevExpress*.bpl 2>nul dir C:\Windows\SysWOW64\DevExpress*.bpl 2>nul第一条查 64 位系统目录,第二条查 32 位兼容目录。正常卸载干净的情况下,两条命令都没有输出;只要有结果,说明有残留,需要手动删除或重装旧版再卸一次。注意别直接删系统目录里的文件,先用卸载程序走一遍,实在删不掉再手动处理。
第三件是 IDE 补丁。DevExpress 安装器会核对 IDE 的补丁级别,比如 Delphi 13.1 的某个 hotfix 没打,安装器可能提示版本不满足。装控件前先去 IDE 的 About 对话框确认补丁状态,把能打的更新都打上,否则安装器会在检测阶段反复报错。
另外提醒一点:解压路径别用带空格的中文目录,比如「下载\DevExpress控件包」这种路径。安装器对路径解析偶尔会出问题,我统一解压到C:\DevExpressInstall这种纯英文短路径下,省掉后续一堆莫名其妙的报错。
2.3 安装选项怎么选:全量安装和定制安装的取舍
安装器会让你选组件集。全量安装最省心,勾上之后所有组件一遍编译完,IDE 组件面板全出来,缺点是编译时间翻倍,机器差一点的要等四十分钟往上。定制安装按项目实际需求勾,但有两个坑要注意。
第一个坑是 core 必须勾。DevExpress 的 cx 系列控件全部依赖核心包,core 不勾,后面 grid、editors 全都白装。第二个坑是源码要不要勾。包内带了 Source 目录,勾上源码编译时间会明显拉长,除非你要调试 DevExpress 内部实现,否则我建议不勾。表格是推荐选项组合:
| 选项 | 是否推荐 | 原因 |
|---|---|---|
| Core(cxClasses 等基础库) | 必选 | 所有控件的依赖 |
| Grid | 推荐 | 表格是最常用场景 |
| Editors / Bar | 推荐 | 编辑器、工具栏高频使用 |
| TreeList | 按需 | 有树形结构才勾 |
| Skins / LookAndFeel | 推荐 | 换肤功能依赖皮肤包 |
| Source 源码 | 不推荐 | 编译时间翻倍,调试才需要 |
配置选项在安装器里是分步出现的,先选 IDE 版本,再选组件,再选编译配置,最后才执行安装。中途返回上一步改选项是允许的,但一旦进入编译阶段就别打断了。
3. 从解压到组件面板出现:完整安装流程与每一步的验证
3.1 解压后的目录结构:哪些是安装引导,哪些是运行时库
解压后先看目录结构。典型的包内会有一个安装引导程序(setup.exe 或类似名字)、一个 Library 目录(存放按 IDE 版本区分的编译产物目录)、一个 Redist 目录(存放运行时依赖),以及可选的 Sources 目录。Library 下的子目录名通常会带上版本号和平台标识,比如rs26、rs27这种命名,分别对应不同 IDE 版本线编译出来的单元文件。
重点说 Library 目录。安装器编译完成的 bpl、dcu 文件会写到这里,IDE 的 Library Path 也会指向这里。后期如果缺某个 dcu,第一反应就是来这里看文件在不在。Redist 目录则是在做安装包分发时,需要拷贝给目标机器的运行时文件,这部分在第 6 章展开。
解压这一步有个细节:文件路径不要包含空格和中文。安装器内部会拼绝对路径,路径带空格时,某些组件包的脚本解析会翻车,表现是安装报错但错误信息含糊。解压到C:\DevExpressInstall后,右键安装程序选择「以管理员身份运行」,Windows 的用户访问控制在注册 dll 那一步会拦截普通权限。
3.2 命令行静默安装和交互式安装:两种方式的参数与适用场景
个人机器用交互式安装就行,点几步界面、勾选项、等编译。如果是团队批量装,交互式太慢,用静默安装更合适。DevExpress 的安装器支持命令行参数,常见做法是用/silent和/components组合:
DevExpressVCLSetup.exe /silent /norestart ^ /components=core,grid,editors,tree,lookandfeel参数说明:/silent表示不弹交互界面,安装过程在后台执行;/norestart禁止安装结束后重启系统,避免影响正在跑的其他任务;/components后面用逗号分隔要安装的组件名,core 是基础库必须包含,grid、editors、tree、lookandfeel 按项目需要写。注意这里的组件名是安装器约定的名称,具体拼写以安装器自带的帮助输出为准,我习惯先不带参数跑一次/help把可用组件名列出来。
主机资源紧张时,静默安装会因为杀软拦截而卡住,表现为进程在任务管理器里挂了几小时没动静。所以团队批量装之前,我通常先在一台机器上跑一遍交互式安装,确认组件名和耗时,再写静默安装脚本给其他人用。
交互式安装的步骤是固定的:第一步同意许可,第二步勾选目标 IDE 版本(这里勾 Delphi 13.1,不要顺手勾 C++ Builder 除非确实需要),第三步选组件集,第四步选编译配置(Debug 和 Release 都勾,免得事后切换配置时提示找不到 dcu),第五步点 Install 然后等待。编译阶段机器 CPU 会拉满,这段时间别动 IDE,也别强制关安装器,否则 bpl 注册到一半,下次开 IDE 直接报包损坏。
3.3 安装完成的三个验证步骤:包列表、组件面板、最小工程
装完别急着写业务代码,先验证三步。第一步,打开 IDE 主菜单 Component > Install Packages(组件 > 安装包),在弹出的对话框里找有没有 DevExpress 开头的条目,看到说明运行时包已经被 IDE 加载。
第二步,新建一个 VCL Forms Application,看左侧组件面板是否多出 cxGrid、cxTreeList、cxLookAndFeelController 这些控件页。组件面板没刷新时,右键面板选择刷新,或者重启一次 IDE,这一步能解决八成「装好了但找不到控件」的问题。
第三步,写一个最小工程验证编译链。在 Form 上放一个 cxGrid,然后在 FormCreate 里加一段枚举注册类的代码:
uses cxClasses, cxGrid; procedure TForm1.FormCreate(Sender: TObject); var AList: TList; begin AList := TList.Create; try // 枚举当前进程中已注册的 cx 类 cxClasses.GetRegisteredClasses(AList); // 数量为 0 说明运行时包没加载成功 Caption := Format('Registered classes: %d', [AList.Count]); finally AList.Free; end; end;这段代码的作用是调用cxClasses.GetRegisteredClasses枚举当前进程里已注册的 cx 系列类。正常安装后,这个数量不会是 0,Caption 上会显示一个大于 0 的数字;如果显示 0,说明 bpl 虽然注册进 IDE 了,但工程编译时没有正确链接到 DevExpress 的运行时单元,要去检查 Library Path 是否指向了 Library 目录。最小工程能跑起来,安装这关才算真正过去。
4. 核心控件快速上手:TcxGrid、TcxTreeList 与 LookAndFeel 皮肤
4.1 TcxGrid:把 DataSet 接上,十分钟出一张可排序筛选的表
TcxGrid 是这套控件里使用率最高的一个,它的架构分三层:最外层是 TcxGrid 容器,中间是 Level(层级),最里面是 View(视图)。View 的类型决定表格长相,常用的是 TcxGridDBTableView。第一次用的人容易在 Level 和 View 之间绕晕,记住一句话:Level 管布局,View 管数据和行为。
把一张表跑起来只需三步。先在 Form 上放一个 DataSource 并连接到你的 DataSet,然后放一个 TcxGrid,右键默认生成的 View 类型是 DBTableView,最后在代码里把数据源接上:
procedure TForm1.SetupGrid; var V: TcxGridDBTableView; C: TcxGridDBColumn; begin // 取第一个 Level 关联的 View,默认就是 DBTableView V := cxGrid1.Levels[0].GridView as TcxGridDBTableView; // 绑定数据源,列结构会根据 DataSet 的字段自动生成 V.DataController.DataSource := DataSource1; // 动态创建一列并绑定字段 C := V.CreateColumn; C.Caption := '单据编号'; C.DataBinding.FieldName := 'BillNo'; C.Width := 100; C.Options.Filtering := True; // 打开增量搜索,键盘直接打字定位到匹配行 V.OptionsBehavior.IncSearch := True; end;关键点都在参数上:DataController.DataSource是 TcxGrid 的数据入口,绑定之后列会自动按 DataSet 字段生成,不需要手工逐列添加;CreateColumn是动态建列的标准方式,给 Caption 设表头文字,DataBinding.FieldName绑定显示字段,Width控制列宽;OptionsBehavior.IncSearch打开后,用户焦点在表格上时直接敲键盘就能跳转到匹配行,这个体验比普通 ListView 高一个档次。
数据量大时注意DataController还有一个缓存选项,默认全量加载,几十万行的表会卡启动。我一般把V.DataController.Options里的 dcoSortByDisplayText 关掉,并开启SmartRefresh,这样局部刷新不会重绘整个表格。底部分组汇总藏在OptionsView.Footer和DataController.Summary里,勾上 Footer 后在设计期右键 GridView 就能配汇总字段,不用写代码。
4.2 TcxTreeList:树形分类数据不用递归拼,直接挂节点
做物料分类、组织架构这类树形界面,TcxTreeList 比 TreeView 好用在两点:自带列头和排序,跟表格风格统一;节点操作 API 直观。给一段手工建树的代码:
procedure TForm1.BuildTree; var Root, Child: TcxTreeListTreeNode; begin // 包住所有操作,避免每个节点触发一次重绘 cxTreeList1.BeginUpdate; try cxTreeList1.Clear; // 根节点直接挂在 Roots 下面 Root := cxTreeList1.Roots.Add; Root.Texts[0] := '华东区'; Root.ImageIndex := 0; // 子节点挂到上一级节点的 Children Child := Root.Children.Add; Child.Texts[0] := '上海分部'; // Text 的第 2 列对应树形表第 2 列 Child.Children.Add.Texts[0] := '浦东门店'; finally // 结束批量更新,一次刷新完成 cxTreeList1.EndUpdate; end; end;Roots.Add创建根节点,Children.Add在指定节点下追加子节点,Texts[0]对应树形表第一列的文字,ImageIndex对应绑定的 ImageList 图标索引。BeginUpdate和EndUpdate一定要成对出现,不加这两个方法时,每 Add 一个节点表格就重绘一次,节点上百后界面肉眼可见的卡顿,这是 TcxTreeList 最常见的性能误用。
如果数据在数据库里且父子关系是 ParentID 结构,用 TcxDBTreeList 更省事:设置 KeyField 和 ParentField 两个字段名,绑定 DataSource 后树自动生成,不需要手工递归。
4.3 LookAndFeel:一个控制器统管全局皮肤,解决界面风格不一致
DevExpress 的所有控件外观都听 TcxLookAndFeelController 的,这是一个放一个在窗体上就能全局生效的控制器。我习惯把它放在主窗体或 DataModule 里,让所有窗体共用。切换皮肤的代码就一行:
// 在任意地方设置皮肤名,整个工程所有 DevExpress 控件自动跟随 cxLookAndFeelController1.SkinName := 'Office2019Colorful';SkinName的值是内置皮肤的名称,常见的有 Office2019Colorful、VisualStudio2013Light、Dark 系列等,具体列表以你安装包内置的皮肤资源为准。设置后,所有 DevExpress 控件会取皮肤里的颜色、边框和圆角定义重绘,这就是很多人要的「圆角面板」效果——不需要逐个控件去调 BevelKind 和 ParentColor,皮肤统一带走了。
有一点要提醒:运行时切换皮肤,DevExpress 会重建所有可视控件的句柄,频繁切换(比如用户每点一次就换肤)会明显卡顿几秒。我的做法是皮肤选择放在程序设置页,切换时机控制在用户确认后,且不要循环切换做测试。这套皮肤体系只覆盖 DevExpress 自家的控件,原生 VCL 控件和第三方控件不受影响,界面混排时原生控件的外观会显得「格格不入」,这也是为什么很多人换肤后还要再配一个 FastReport VCL 做报表——不是替代关系,各管一摊。
4.4 多线程场景下的控件刷新:一个容易忽略的约定
如果你用 Delphi 多线程拉数据再刷新 TcxGrid,记住一条铁律:控件操作必须回到主线程。DevExpress 的 VCL 控件内部大量依赖主线程的消息循环,工作线程里直接调DataController.DataSource的接口,轻则数据错乱,重则内存访问违规。常见做法是把工作线程的结果放进一个线程安全的队列,再用TThread.Queue把刷新动作调度回主线程:
TThread.Queue(nil, procedure begin // 回到主线程后刷新表格,避免跨线程控件操作 cxGrid1DBTableView1.DataController.Refresh; end);TThread.Queue是异步调度,调用后立刻返回,刷新动作排队到主线程消息队列里执行。用Synchronize也可以,但会阻塞工作线程,影响拉数据的吞吐量。这个约定和控件本身关系不大,但凡是 DevExpress 控件在项目里翻车,十有八九都栽在这里。
5. 避坑排查:安装失败、编译不过、运行时错误,五条血泪记录
5.1 编译报错 "File not found: 'cxGrid.dcu'"
现象:新建工程后第一次编译,提示找不到cxGrid.dcu或某个 dx 开头的 dcu 文件,代码里写uses cxGrid也报同样错误。
原因:IDE 的 Library Path 里没有包含 DevExpress 编译产物所在目录。dcu 文件其实已经生成在硬盘上,但 IDE 找不到搜索路径,编译器拒绝编译。另一种原因是当年安装时没勾选 Grid 组件,Library 目录里根本没有这个 dcu。
解决:打开 Tools > Options > Delphi Compiler > Library,在 Library Path 里添加 DevExpress 的 Library 目录,路径结尾带上平台和版本子目录。添加后重启 IDE,再编译一般就过了。如果路径加了还是报错,去 Library 目录确认cxGrid.dcu是否存在,不存在就重装安装器并勾选 Grid 组件。这个问题安装后第一次建工程就会暴露,不要拖到写了几百行代码再来查。
5.2 打开旧工程报 "The package ... was not installed"
现象:IDE 启动或打开旧工程时弹出对话框,提示某个 DevExpress 包的安装状态异常,或者干脆以「此包未安装」为由,把窗体弹窗拦截掉。现象在设计期比运行期更明显,代码里能引用类,但打开窗体编辑器就报错。
原因:IDE 的 bpl 注册信息和实际安装的包不一致,通常是旧版本卸载不干净、新版本安装时注册被中断导致的。IDE 启动时按注册表加载包列表,加载失败就报这个错。
解决:先在 Component > Install Packages 里看包的完整名称,记下来,然后重启 IDE。如果重启没效果,把有问题的包移除,再点 Add 手动定位到 Library 目录下的同名 bpl 重新注册。我遇到一次怎么都修不好,最后是删掉%APPDATA%\Embarcadero\BDS目录下的 IDE 缓存配置,让 IDE 重新扫描一遍包列表才恢复。注意删缓存前先备份,那里面还有你自己的 IDE 窗口布局和快捷键设置。
5.3 中文系统上安装进度卡在 "Registering"
现象:安装进度跑到注册阶段就停滞,进度条长时间不动,任务管理器里安装进程的 CPU 占用很低,像是死掉了。中文 Windows 系统出现概率明显高于英文系统。
原因:注册阶段要写入系统目录和注册表,杀软实时防护把注册行为当可疑操作拦截,安装器在等待文件锁释放,形成假死。路径含中文或空格的安装目录会加剧这个问题。
解决:把安装目录换成纯英文短路径,把杀软对安装目录和系统目录的实时防护临时关闭,再以管理员身份运行安装器。我碰到过一台机器怎么关防护都卡,最后是把安装包拷到C:\DevExpressInstall并从本地磁盘运行,不从网络共享目录跑,问题才消失。另外确认系统开启了 Windows Installer 服务,服务状态是禁用也会卡在注册。
5.4 换机器运行 exe 提示找不到 devexpress 运行包
现象:在本机编译运行好好的程序,拷贝到另一台机器双击 exe,弹出 "The code execution cannot proceed because dxBarEdtr.bpl was not found" 之类的错误,程序起不来。
原因:工程默认使用动态运行时包(Runtime Packages),DevExpress 的 bpl 没有静态链接进 exe,目标机器上没装 DevExpress 的运行时,所以启动加载失败。本机能跑是因为本机装了完整控件,掩盖了这个问题。
解决:两种方式任选。第一种是把 Runtime Packages 关掉,让编译器把 DevExpress 的代码静态链接进 exe,体积会大很多但免部署。第二种是保留动态链接,把运行依赖的 bpl 一起拷贝到目标机器,放在 exe 同目录即可。我一般选第二种,体积小,但前提是把依赖包收齐(第 6 章细说)。需要提醒的是,选第一种时要注意项目里如果还引用了其他第三方包的 bpl,也要一并处理,否则同样的错误换个包名继续报。
5.5 换肤后控件出现黑色色块或字体发虚
现象:设置 SkinName 后,部分控件的区域变成黑色块,或者文字边缘发虚、锯齿明显,关闭皮肤恢复 NativeStyle 症状消失。
原因:皮肤资源没有正确加载,或者显卡驱动对皮肤绘制使用的渐变笔刷支持不到位。黑色块往往是皮肤 bpl 没被工程引用,运行期皮肤对象只创建了一半;发虚则是字体在皮肤模式下没有走清排版,DPI 缩放设置不对。
解决:黑色块在工程主程序里加一行皮肤注册代码:
uses dxSkinsCore, dxSkinscxPCPainter;强制引用皮肤运行时单元,编译器会把dxSkins*.bpl链接进工程。字体发虚在 Project Options 里把 Manifest 的 DPI Awareness 设为 Per-Monitor V2,并确保系统字体是 Tahoma 或微软雅黑。这一类问题本机复现不出来,往往在远程桌面或虚拟机里翻车,发布之前建议在干净的虚拟机上跑一遍验收。
6. 发布部署收尾:把运行时依赖精简到只剩必需 BPL
控件装好、功能跑通只是第一步,交付给用户的 exe 能不能独立运行才是最后的验收。DevExpress 运行时包是按功能拆分的,几十个 bpl 不会全部被工程用到。全部拷过去体积臃肿,漏拷则目标机器报缺包。我先用一个土办法锁定必需文件:编译后用 Process Explorer 打开 exe,查看它加载了哪些 DevExpress 模块,把列表记下来。
IDE 的 Project > Deployment 菜单会自动列出工程引用的运行时文件,这是最省事的途径,勾选后发布会自动带上。手动维护时我用一段批处理收口,按依赖只拷用到的包:
set SRC=C:\DevExpress VCL\Library\rs26 set DST=C:\Dist\runtime mkdir "%DST%" 2>nul copy "%SRC%\dxBarEdtr*.bpl" "%DST%" copy "%SRC%\cxGrid*.bpl" "%DST%" copy "%SRC%\dxSkins*.bpl" "%DST%"这段脚本把核心编辑器、网格、皮肤三类运行包复制到发布目录,*通配符匹配同前缀的多个文件,省得逐个写全名。实际项目用到哪些模块,按 Process Explorer 的加载列表替换文件名即可,不需要整目录拷贝。部署目录里再放一个dxlic.dll之类的注册文件时,要确认它和目标机器的运行环境匹配,这一步踩过坑的人都知道,少一个 dll 起来就是黑屏。
从那以后,我每次换 Delphi 主版本都强制走一遍完整流程:先查版本矩阵,再清理旧包、关杀软、管理员权限安装,装完用最小工程验证编译链,最后发布前在纯净虚拟机跑一遍依赖检查。这套流程救过我太多次。希望帮到你。
本文还有配套的精品资源,点击获取