
简介面向 Delphi 12.3 桌面与移动开发者的 DevExpress FMX 控件资源包版本 20.1.2主要解决 FireMonkey 应用缺少成熟商业控件支持的问题可用来扩展表格、数据控制器、布局与内存数据集等界面交互组件。包内共 619 个文件压缩后约 160.76MB其中 dcu 编译单元可直接参与链接o 目标文件用于构件生成pas 源码便于阅读与二次调整dpk/dproj 负责组织组件工程fmx/res/dcr 分别对应界面布局、图标与设计期资源另外还包含少量 so、exe 示例便于跨平台部署与参考运行效果。目前已有 86 人学习下载适合具有 Delphi 组件安装基础、想快速获得 DevExpress FMX 真实编译产物的中高级开发者。通过该资源读者能拿到 Grid、DataController、LayoutControl、MemData 等模块的编译结果和示例工程节省自行适配 Delphi 12.3 的时间对照 pas/dcu 结构还能理解控件的内部依赖关系在项目集成、版本冲突或构件编译排错时更有方向。1. 先回答最直接的问题这个 rar 是干什么的Delphi 12.3 用户能不能直接用拿到手一个名为 “Delphi 12-DevExpressFMX-20.1.2.rar” 的压缩包第一反应应该是版本号对不上DevExpress FMX 20.1.2 是 2020 年前后发布的控件版本而 Delphi 12.3 是 2024 年之后的新 IDE。这个落差不是小事它决定了这个包不能像官方安装器那样点两下就完事。这个 rar 解决的诉求很具体给 Delphi FMX 开发者补一套商业级 UI 控件覆盖 FireMonkey 自带控件在表格、导航、皮肤、编辑器这些场景上的短板。适合谁手上维护 FMX 跨平台项目、或者从 VCL 迁移到 FMX 时不想放弃 DevExpress 操作习惯的 Delphi 工程师。结论先给能装但解压后不能直接双击用编译注册那一步要手动处理几个代差问题。2. 安装前先摸清底细FMX 控件、20.1.2 版本和 Delphi 12.3 的代差2.1 DevExpress FMX 是什么它不是 VCL 控件的简单移植Delphi 里的 DevExpress 控件大多数人用的是 VCL 版FMX 版是另一条独立产品线。FireMonkeyFMX是 Embarcadero 从 XE2 时代推的 GPU 加速 UI 框架控件用自绘方式在 Windows、macOS、iOS、Android 上渲染同一套界面没有 VCL 那种窗口句柄。DevExpress FMX 20.1.2 把 VCL 上的表格、导航、编辑器、皮肤思路搬到了 FMX 上解压后能看到以 dx 或 cx 开头的单元文件以及配套的设计期包源码。选型理由很现实FMX 自带控件在表格这类密集数据场景的表现力不够筛选、列定制、样式都要自己写DevExpress 这类商业控件把这块工作量吃掉代价是版本兼容性得自己扛。20.1.2 这个版本号在 DevExpress 的命名规则里是 2020 年的第一次大版本发布后的第二个补丁版当时对应的 Delphi 还是 10.3.3 或 10.4编译器版本宏停在 VER330/VER340 左右。对比项VCL 版 DevExpressFMX 版 DevExpress控件宿主Win32/Win64 原生窗口句柄GPU 自绘的可视对象树位置布局Left/Top AlignX/Y TAlignLayout文字属性CaptionText跨平台仅 WindowsWindows/macOS/iOS/Android版本宏时代可追到很老的 Delphi20.1.2 只认到 Delphi 10.4有一个判断要提前做这个 rar 是源码分发还是纯二进制分发。如果压缩包里只有 Lib 和 BPL没有 Source 目录那在 Delphi 12.3 上基本没法用因为 20.1.2 的预编译 BPL 是为老 IDE 做的新 IDE 加载会报模块版本不匹配。有 Source 就能救下面所有步骤都建立在“源码包在手”这个前提上。2.2 解压与目录纪律7z 命令、英文路径和源码包识别常见做法是用 7-Zip 命令行解压比 WinRAR 图形界面更适合反复重装。注意 rar 格式需要 7-Zip 内置的 RAR 解压支持装完 7-Zip 后直接调 7z.exe 就行。C:\Program Files\7-Zip\7z.exe x D:\downloads\Delphi12-DevExpressFMX-20.1.2.rar -oD:\DevExFMX20 -y参数说明x是解压并保留目录结构-oD:\DevExFMX20指定输出目录注意-o和路径之间不能有空格-y表示有同名文件直接覆盖。解压完先别急着双击任何 exe先看目录结构。dir /b D:\DevExFMX20 dir /s /b D:\DevExFMX20\*.dproj第一条命令列出顶层目录第二条递归找出所有 Delphi 工程文件。.dproj是 Delphi 的 MSBuild 工程文件控件源码包一般会把可编译的包工程放在 Packages 目录下。看到 Source 目录和 Packages 目录同时存在说明这个包是源码分发可以继续往下走如果只有二进制和安装脚本后面那套 msbuild 编译流程就不适用得换思路。路径纪律是踩出来的解压目录不要放桌面和下载目录权限和索引服务会干扰 IDE 读取不要放 Program Filesbpl 注册和写 Library Path 时权限麻烦路径不要带中文老版 bpl 在 Unicode 路径下的加载支持不完善报错时你会以为是控件问题其实是路径问题。注意解压前先把目标目录加进杀毒软件白名单。第三方控件的 BPL 本质是 DLL重新打包后数字签名可能失效杀毒软件按启发式规则隔离是常见现象。2.3 代差处理给旧控件源码补上 Delphi 12.3 的条件编译DevExpress 这种商业控件源码里到处是条件编译靠.inc文件管理不同 Delphi 版本的分支。20.1.2 时代只认到 VER340Delphi 10.4Delphi 12.3 的编译器版本宏是 VER360.inc 里没有对应分支时预处理器会走默认分支经常漏掉新平台的特性开关导致编译到一半报找不到某个符号。先找出哪些 .inc 文件里带版本判断。Windows 下用 findstr 就能干这活findstr /s /i /m VER340 D:\DevExFMX20\Source\*.inc/s递归子目录/i忽略大小写/m只打印包含匹配的文件名不打印匹配行内容。搜出来的 .inc 文件就是要改的。修改原则不是新写一个 VER360 分支而是把 VER340 那段复制一份条件改成 VER360宏名沿用原来的。这样后续代码里所有引用老宏的地方都能命中不会出现“定义了新宏但代码里没人认”的半吊子状态。// 修改前这段只有 Delphi 10.4 的分支 {$IFDEF VER340} {$DEFINE DX_FMX_104} {$DEFINE DX_USE_NEW_ALIGN} {$ENDIF} // 修改后追加 Delphi 12.3 支持 {$IFDEF VER360} {$DEFINE DX_FMX_123} {$DEFINE DX_USE_NEW_ALIGN} {$ENDIF}上面这段是示意写法宏名不要照抄要看你手上源码里真实使用的名字。可靠做法是打开 .inc 文件全局搜 VER340把整段复制后把 340 改成 360并保留相同的宏定义体。改完先别急着编译全部包随便编一个小的运行时包验证条件编译能通过再继续下一步。3. 把控件装进 IDE用 msbuild 编译 dproj 并注册设计期包3.1 两条编译路线在 IDE 里打开包还是用 msbuild 命令行把控件源码装进 IDE 有两条路图形界面路线是 File Open打开 Packages 目录下的 .dproj右键 Project Manager 里的工程选 Build再右键 Install命令行路线是用 rsvars.bat 初始化环境后跑 msbuild。两条路各有适用场景首次安装图省事用 IDE反复重装或要写自动化脚本用 msbuild。我一般直接用命令行因为控件包通常有好几个 dproj一条命令能编完的绝不一个个点。命令行编译前要先初始化 Delphi 工具链环境变量。RAD Studio 12.x 对应 BDS 版本号 23.0rsvars.bat 在安装目录的 bin 下。call C:\Program Files (x86)\Embarcadero\Studio\23.0\bin\rsvars.bat cd /d D:\DevExFMX20\Packages msbuild dxFMX20.dproj /t:Build /p:ConfigRelease /p:PlatformWin64 msbuild dclDXFMX20.dproj /t:Build /p:ConfigRelease /p:PlatformWin64rsvars.bat把 dcc32、bds、资源编译器这些工具路径加载到当前控制台不执行它的话 msbuild 会找不到编译器。/t:Build是 msbuild 的构建任务名/p:ConfigRelease指定 Release 配置/p:PlatformWin64指定目标平台。先编不带 dcl 前缀的运行时包再编带 dcl 前缀的设计期包顺序反了会报找不到依赖包。注意Release 配置关掉了调试符号设计期加载更快体积小一半。Debug 配置能编但 IDE 启动会明显变慢不建议日常使用。3.2 注册 bpl 与 Library Path设计期包、运行期包的分工编译产物里有两类 BPL以 dcl 开头的是设计期包IDE 靠它把控件显示在 Tool Palette 上不带 dcl 的是运行期包你写的工程编译和运行时要链接它。只装运行期包工程能编译但控件不出现在控件面板上只装设计期包IDE 启动会报找不到模块。两边都要装。先确认编译产物位置然后一步步注册dir /s /b D:\DevExFMX20\Packages\Win64\Release\*.bpl看到带 dcl 前缀的 BPL 文件后按下面顺序操作Tools Options Language Delphi Library点路径编辑器把 Source 目录和编译输出目录Win64\Release加进去这是让 IDE 在编译工程时能找到 .dcu。重启 IDE让新的 Library Path 生效。Component Install Packages Add浏览到编译输出目录选中 dcl 开头的 BPL。安装完成后Packages 列表里会多出对应的设计期包确认勾选状态是启用的。这里有个容易忽略的点Library Path 里的目录顺序也会影响解析。Source 目录要排在编译输出目录前面否则 IDE 可能优先找到旧版本的 .dcu。路径加错了后面编译你的工程时会报一堆“Unit not found”那会儿排查起来比现在多花半小时。3.3 第一个验收动作新建 FMX 工程确认控件能拖能编译装没装成功空口不算要新建一个 FMX 工程实际拖控件。IDE 里 File New Multi-Device Application Blank Form然后在 Tool Palette 搜索框里输入 dx 或 devexpress看能不能搜到刚注册的控件。拖一个网格控件到窗体上设计器会在 .pas 里自动生成类似这样的代码// 这段代码由设计器生成不需要手写 FFMXGrid1 : TdxFMXGrid.Create(Self); FFMXGrid1.Parent : Self; FFMXGrid1.Align : TAlignLayout.Client;代码逻辑说明FMX 控件创建后必须挂 Parent 才会显示Align 设成 Client 让它填满窗体。这一步能通过说明设计期包和运行期包都已生效。接下来按 F9 编译运行如果编译报找不到单元回 3.2 检查 Library Path如果能编译但控件显示异常多半是 Delphi 12.3 默认的 Windows 11 主题跟老控件有视觉冲突这个放到避坑章细说。4. 在 FMX 工程里用 DevExpress 控件宿主、皮肤与性能三个关键差异4.1 宿主差异FMX 没有句柄控件树的挂载顺序决定一切VCL 里写惯了 Left/Top 布局的人转到 FMX 最容易翻车的地方是“控件挂在谁身上”。FMX 控件树是自绘的没有句柄Create 时的 Owner 只负责生命周期显示与否完全看 Parent。顺带一提FMX 控件跟 VCL 一样只能在主线程操作后台线程算完数据要 TThread.Synchronize 或 TThread.Queue 回主线程再碰控件这个红线两边通用。procedure TForm1.BuildUI; var LPanel: TPanel; LLabel: TLabel; begin LPanel : TPanel.Create(Self); LPanel.Parent : Self; LPanel.Align : TAlignLayout.Top; LPanel.Height : 48; LPanel.CornerRadius : 8; // FMX 面板自带的圆角属性 LLabel : TLabel.Create(LPanel); LLabel.Parent : LPanel; LLabel.Align : TAlignLayout.Client; LLabel.Text : DevExpress FMX 宿主示例; LLabel.TextAlign : TTextAlign.Center; end;逻辑说明TPanel 的 CornerRadius 是 FMX 原生属性不需要像 VCL 那样自己写自绘圆角TLabel 的 Text 取代了 Caption。DevExpress FMX 控件同样遵守这套规则动态创建时先 Create 再设 Parent 再设 Align顺序不能乱。FMX 场景下做摄像头预览、人脸识别这类界面原生桥接层把视频帧交给 FMX 控件渲染也是建立在这棵树挂对的前提下。4.2 皮肤体系用 TStyleManager 和控件自带风格文件统一外观FMX 的风格系统跟 VCL 完全不同VCL 是控件自己画FMX 是风格接管绘制。DevExpress 控件通常自带一套风格文件常见后缀是 .vgs 或 .style加载方式走 FMX 标准的 TStyleManager。这套机制决定了皮肤文件跟控件版本强绑定20.1.2 配 20.1.2 的皮肤文件不会出事拿别的版本硬塞会出现部分控件有样式、部分控件打回原形的怪状态。uses FMX.Styles, FMX.Forms; procedure LoadDxSkin; begin if not TStyleManager.TrySetStyleFromFile(D:\skins\dxfmx20.vgs) then ShowMessage(皮肤加载失败请检查文件版本是否匹配); end;代码说明TrySetStyleFromFile 返回 Boolean加载失败返回 False不要忽略这个返回值。调用时机要在 Application.Initialize 之后、主窗体创建之前放在 FormCreate 里经常因为窗体已经在用旧风格而部分失效。团队里多套皮肤时建议封装一个全局函数统一加载替换皮肤只改路径参数。4.3 性能和尺寸FMX 控件比 VCL 版本沉多少FMX 控件比 VCL 版多一层样式绘制运行成本是实打实高出来的。控件数量少时感知不明显一旦表格列数多、滚动频繁GPU 占用和内存都会往上走。控件过多导致的卡顿在 FMX 下比 VCL 更早出现因为每个可视对象都要参与样式解析。优化手段是把不可见的 Tab 页内容延迟创建不要一上来把整个窗体的控件全部实例化。对比项VCL 版FMX 版最小编译产物小原生 GDI 绘制大带样式和着色器资源内存占用相对低相对高控件树节点开销滚动性能表格密集场景更稳依赖 GPU 和样式复杂度适用场景Windows 单平台跨平台或需要现代视觉这个差异也影响了 Delphi/CBuilder 目前处境下技术选型的一个判断跨平台诉求强就上 FMX桌面 Windows 为主就留在 VCL两条路都有生态支撑不必强行迁移。DevExpress FMX 20.1.2 的价值主要在桌面端移动端适配不完整后面避坑章会细说。5. 避坑DevExpress FMX 20.1.2 配 Delphi 12.3 的五个典型雷区5.1 解压后 bpl 被清掉现象、原因、解决现象解压时一切正常IDE 启动或编译时提示找不到某个 BPL回目录一看文件消失了。 原因第三方控件 BPL 本质是 DLLrar 二次打包后数字签名失效杀毒软件按启发式规则把它当风险文件隔离。 解决解压前把目标目录加白名单解压后如果文件已被隔离从隔离区恢复再操作。路径尽量用英文部分安全软件对中文路径下的 DLL 查得更严这算血泪经验。5.2 控件面板搜不到 FMX 控件现象、原因、解决现象设计期包编译安装全程无报错重启 IDE 后在 Tool Palette 里搜 dx 搜不到任何控件。 原因最常见是只编译并安装了运行期包dcl 前缀的设计期包没装另一个原因是把 Debug 版 BPL 装给了 Release 版 IDEIDE 加载时界面包冲突导致静默失败。 解决回到 Component Install Packages 检查列表里有没有 dcl 开头的包确认勾选把 Debug 版输出目录从 Library Path 里删掉只留 Release。改完重启 IDETool Palette 缓存也会跟着刷新。5.3 编译工程报找不到 dcu现象、原因、解决现象控件能在设计器拖出来但按 F9 编译时报 Fatal: Unit not found 或 File not found指向 dxFMX 开头的单元。 原因Library Path 没有覆盖 Source 目录或者编译输出目录和当前工程目标平台不一致。比如包编的是 Win64工程默认编 Win32两边对不上。 解决确认 Tools Options Language Delphi Library 里 Source 目录在列表顶部确认工程 Target Platforms 与包的 Platform 一致。路径改了还报错就把工程目录下的 __dcu 缓存目录删掉重建这个缓存跟 IDE 的资源管理器缓存一样玄学删了往往就好。5.4 Android 目标编译失败或运行闪退现象、原因、解决现象Windows 平台编译运行都正常切到 Android 目标编译时报链接错误或者 APK 装到真机上启动即闪退。 原因DevExpress FMX 早期版本主要覆盖桌面端20.1.2 对高版本 Android SDK 和 NDK 的适配不完整原生依赖库可能不含 arm64-v8a 或新版 API 的兼容层。 解决先查包文档里声明的目标平台支持清单如果只写了 Windows/macOS/iOS就别在移动端硬扛。非要用移动端升级到控件的新版本老版本不值得浪费时间调 NDK。5.5 皮肤加载后界面还是默认风格现象、原因、解决现象TrySetStyleFromFile 返回 True但运行起来界面没变化或者只有部分控件变了。 原因皮肤文件版本和控件版本不匹配20.1.2 的皮肤描述字段与 Delphi 12.3 自带 FMX 控件的属性对不上另一个原因是加载时机太晚窗体已经创建完成。 解决使用 rar 里自带的同版本皮肤文件不要跨版本混用把加载调用放在项目源码里 Application.Initialize 之后、主窗体创建之前检查返回值返回 False 时不要继续后续流程先解决文件匹配问题。6. 装完怎么验证三个验收动作、一个卸载后悔药6.1 验收动作一三件套一次性跑通新建 FMX 工程后做三个动作拖一个表格控件并绑定一张内存表数据确认数据能显示、能点击排序放一个导航控件切换页面确认焦点和页面跳转正常加载一次皮肤确认全局样式生效且无控件打回原形。三个动作都通过这套控件在你的环境下算基本可用。6.2 验收动作二盯住编译产物和 IDE 健康度控件包会显著增大编译产物这是正常的但要有量化认识。编译一次空 FMX 工程记录耗时再编译一个带控件的工程对比打开任务管理器看 bds.exe 的内存占用如果装了控件后 IDE 启动后内存长期高居不下考虑是不是把不用的设计期包从 Packages 列表里取消勾选。BPL 文件数量和体积也可以作为装全没装全的判断依据。6.3 验收动作三留一条卸载回滚的路装控件包最怕装完不满意想卸结果不知道动了哪些注册表项。先备份再装后悔药就有了。Delphi 12.3 的库路径和已安装包信息都存在 HKCU 注册表里。echo off rem 备份 Delphi 12.3 的库路径与包注册信息卸载时用于回滚 reg export HKCU\Software\Embarcadero\BDS\23.0\Library D:\backup\bds23-library.reg /y reg export HKCU\Software\Embarcadero\BDS\23.0\Known IDE Packages D:\backup\bds23-packages.reg /yreg export 是 Windows 自带命令/y表示覆盖已存在的备份文件。两个注册表项分别是 Library Path 和 IDE 包列表卸载控件时先执行这两个备份再在 IDE 里取消勾选包和删除路径不满意时双击 .reg 文件就能恢复原状。我的习惯是装这类老控件包时把验收结果记在一个文本文件里写上 Delphi 版本、编译平台、皮肤版本、IDE 内存占用、编译耗时。下次换机器或升级 IDE照着记录重来一遍比每次重新踩一遍坑快得多。这套 20.1.2 的 FMX 控件在 Delphi 12.3 上属于“能装能用但有代差”的定位适合已有 DevExpress 经验的团队在桌面端快速出界面新项目或移动端场景建议先做能力评估再决定投入。希望帮到你。本文还有配套的精品资源点击获取