Delphi 12.3安装DevExpress FMX控件实战:从报错到20分钟搞定
发布时间:2026/8/30 3:39:39 作者:尧图编辑部 阅读量:1,286

简介在跨平台应用开发中Delphi FireMonkeyFMX凭借一套代码覆盖Windows与Android的RAD优势成为企业级项目的热门选择。然而原生FMX控件功能有限表格、日历、弹窗等复杂界面组件往往需要自行封装无形中拉高开发成本。成熟的第三方控件库通过封装跨平台一致性逻辑能显著降低界面层工程量。DevExpress FMX控件凭借在VCL时代积累的组件生态为Delphi开发者提供了表格、日期选择、电子表格等现成方案尤其适合工业PDA、数据采集等快速交付场景。本文从实际安装过程出发讲解DevExpress FMX在Delphi 12.3环境下从版本适配、编译报错到Library Path配置的完整流程分享常见的E1025版本错误处理与IDE控件注册技巧帮助开发者避开版本冲突与路径陷阱实现高效集成。 手里拿到这个DevExpressFMX-20.1.2.7z的时候我正在给一台安卓PDA做界面大改版。说实话一开始我对三方的FMX控件是持保留态度的因为FMX本身跨平台又小众控件库能铺多大摊子我心理有数。但项目进度卡在那儿原生FMX的列表、日历、弹窗做起来太费劲最后还是决定把DevExpress FMX这个包想办法装起来。这一装就装出了接近一整天的折腾从版本不识别、编译报错到每次重启IDE控件就消失——整个过程如果重来一次我能保证在20分钟内搞定。这篇文章就把这套流程和踩过的坑完整讲透。这个包解决什么问题呢一句话给Delphi 12.3的FireMonkey工程提供一套成熟的界面控件集。谁适合看正在用FMX做跨平台桌面或移动端开发、需要表格、日历、编辑框、图表这些现成组件的朋友。打算安装其他DevExpress FMX版本的朋友这篇也能当通用参考因为大版本之间的安装套路其实是一致的。1. 项目场景与控件选型的底层逻辑1.1 从一次PDA界面重构说起先说背景。我在做的项目是工业PDA上的数据采集与审批应用硬件跑的是安卓系统开发框架选了Delphi FireMonkey原因很简单团队熟DelphiRAD开发速度快一套代码能同时覆盖Windows后台和安卓手持终端。但界面做到第二版的时候痛点就来了。原生FMX虽然自带了一批基础控件可真要做企业级界面你会发现列表要靠自己画Cell日历控件要自己拼日期选择器在不同安卓设备上的表现五花八门更别提做表单弹窗、数据网格这种高频组件了。那段时间每天一半时间在调界面一半时间在补业务逻辑效率非常低。后来评估了几个方案继续自绘、用TMS FMX、用DevExpress FMX。自绘就不提了维护成本太高TMS那套我没用过就不评价最终选DevExpress主要还是看中它在传统VCL时代的积累以及这套FMX控件在表格、电子表格、日期处理上的完整度。装了之后前端开发量确实下来一大截很多以前要手搓的组件拖上去配几个属性就完了。1.2 为什么FMX项目离不开成熟的控件库FMX的设计目标是跨平台UI抽象但这带来一个代价原生控件都很“素”。Windows上看着还行放到安卓高分屏上字体、间距、交互手感都会露馅。企业应用偏偏对界面细节很敏感。用户不会管你是哪个框架开发的他们只关心能不能快速定位数据、能不能用日期控件选时间段、表格能不能按列排序、弹窗是不是跟公司其他系统的操作习惯一致。原生FMX要实现这些必须自己封装大量组件而自己封装的组件又要在Windows、Android、iOS三端同时验证测试成本极高。成熟控件库的底层价值其实是把“跨平台一致性”这件麻烦事提前替你解决了。DevExpress FMX里同一个表格控件在Windows桌面和安卓平板上会尽量保持相似的外观和交互底层差异被控件库消化掉了。再加上设计期支持良好调整列宽、绑定数据源、设置样式都能在设计器里完成这比运行时动态布局要直观得多。对于团队规模不大、又要快速交付的项目来说这个选择很有性价比。1.3 解压看目录先搞懂包里装的是什么在动手之前先弄清楚压缩包里是什么。拿到DevExpressFMX-20.1.2.7z解压后目录结构大概是这样的路径/目录主要用途安装时是否需要关心Library存放源码、编译生成的dcu/dcp文件需要加入Library PathSource公共源码目录部分跨项目共用需要加入Library PathPackages各组件包的工程文件、groupproj需要打开编译和安装Packages\Win32\Debug Build编译成功后bpl/dcp的输出目录之一注册设计时包时要用Demos示例工程可选学习时参考这个结构其实很有规律。DevExpress的FMX产品线通常包含多个功能包比如针对表格、电子表格、图表、日期控件的独立包。安装时不是一股脑全装而是要分清哪些是运行时包哪些是设计时包。运行时包一般不带dcl前缀提供实际功能的单元发布程序时需要一起编译链接设计时包一般带dcl前缀比如dclDXFMXGrid.bpl只在IDE里使用用来把控件注册到组件面板上发布程序不参与链接。这种双包结构在大型控件库里很常见理解它之后再看安装过程就清晰了。下面所有操作都围绕这个逻辑展开。2. 安装前必须做好的三件事2.1 检查IDE版本与工具链安装任何控件之前第一步永远是确认IDE环境。Delphi 12.3在官方角度对应的是RAD Studio 12系列的一个版本安装DevExpress 20.1.2这种老版控件之前必须先确认三点。第一确认已安装的编译平台。Windows开发至少要有Win32和Win64的RTL/FMX支持安卓开发需要确认Android SDK、NDK、JDK路径都配置好了。打开Tools - Options - Deployment或者直接用SDK Manager看当前配置。第二确认CompilerVersion宏。这个是Delphi编译器内置的一个常量在代码里可以直接读取用来判断当前IDE版本。不同版本的Delphi对应的数字不同比如Delphi 10.4大概是35Delphi 11系列是36Delphi 12系列更高。先把当前IDE的CompilerVersion记下来后面修改版本判断文件时会用到。想快速查看可以在代码里写一句ShowMessage(IntToStr(CompilerVersion))或直接在调试器的评估窗口里看。第三检查有没有其他版本的DevExpress残留。这一步很重要。我之前有一台机器上装过旧版DevExpress VCL组件两个版本共存在一个IDE里很容易出问题。如果发现已经装了旧版本先卸载干净并清理掉旧的bpl和dcp文件再开始新安装。2.2 解压路径与源码目录规划解压路径看似小事实际上藏了很多坑。第一次解压我直接丢到了“C:\Users\Administrator\Downloads\DevExpressFMX-20.1.2”结果编译到一半各种Could not find unit后来排查发现是路径里的用户名目录存在权限和长度问题。建议统一解压到短路径比如“D:\Dev\DXFMX\”整个路径不要有中文和空格也尽量不要放在桌面或下载目录。DevExpress的包在编译时会把当前路径写进搜索路径路径太长或带特殊字符容易触发编译器的路径解析问题。解压完毕后建议先浏览一下Library和Packages目录确认目录结构完整。尤其要确认Library目录下有三个子目录Common、Win32、Win64。如果有Android目录更好说明这套包自带安卓平台的编译支持。缺少这些目录里的任何一个后面编安卓包都会缺文件。2.3 配置Library Path和IDE搜索路径Library Path配置是整个安装过程中最容易被忽视的环节。很多朋友编译报错找不到单元核心原因就是源码路径没有加进去。配置方法Tools - Options - Delphi Options - Library在Library Path里添加三个主要路径D:\Dev\DXFMX\LibraryD:\Dev\DXFMX\SourceD:\Dev\DXFMX\Library\Win32 或相应的平台目录注意Library Path是分平台的。如果你要编译Windows和Android两个平台需要分别在Platform下拉框里切换然后各自添加对应路径。我一开始只加了Windows平台切到Android编译时直接一堆红色报错全是找不到单元。添加路径时还有一个细节如果后续重新编译后dcu文件更新了但IDE搜索结果还是旧文件就在后面再勾上“Include output directories in library path”这个选项或者手动把dcu输出目录也加进去。这样能有效减少一些莫名其妙的版本不一致问题。3. 完整安装与构建实战3.1 找到groupproj梳理安装顺序路径配置好之后打开Packages目录找到类似“DevExpress FMX.groupproj”的文件用Delphi直接打开。这个分组工程文件里会列出所有需要编译的子项目包括运行时包和设计时包。重点来了安装顺序一定是先编译运行时包再安装设计时包。运行时包负责提供实际功能单元设计时包依赖运行时包。如果顺序反了编译设计时包时会报找不到运行时包的错误。在groupproj里可以看到多个Package比如dxFMXGrid运行时包、dclDXFMXGrid设计时包、dxFMXSpreadSheet运行时包、dclDXFMXSpreadSheet设计时包。建议逐个右键选择Build不要直接编译整个分组因为有些包依赖于先编译好的包全组编译时依赖顺序由工程文件决定效率上不如手工控制。3.2 编译阶段E1025不支持的编译器版本错误处理如果你直接编译很有可能会撞上这样一条报错[dcc32 Error] dxVersion.inc(128): E1025 Unsupported compiler version这个报错的含义是DevExpress 20.1.2发布的时候Delphi 12.3还不存在所以它的版本判断头文件里没有“支持Delphi 12.3”这一项代码分支。这是老控件装新IDE最经典的坑。解决办法也很明确手动给头文件补上对当前CompilerVersion的支持。先备份原始的dxVersion.inc文件然后用IDE打开它。在文件里搜索“CompilerVersion”或一段类似下面这样的条件编译{$IFDEF VER350} // Delphi 10.4 // 对应的一些定义 {$ENDIF} {$IFDEF VER360} // Delphi 11.0 // 对应的一些定义 {$ENDIF}对照你刚才查到的当前CompilerVersion找最近的版本分支复制一份把版本号改成当前IDE的版本号。比如如果12.3对应的是VER400那么可以加上{$IFDEF VER400} // Delphi 12.3 // 与上面版本分支保持一致的定义 {$ENDIF}具体版本号以你当前IDE实际为准我这里的数字只是一个演示。改完之后保存回到groupproj重新编译。注意修改头文件时要小心不要动别的判断逻辑只在原有结构上照葫芦画瓢加一个分支。如果编译过程中还出现个别单元里引用了不存在的API通常是旧控件版本对新的RTL接口不兼容这种情况下只能逐个看报错信息优先判断是否是版本判断分支导致的而不是真的代码不兼容。大部分情况下改完版本号分支就能一路编译过去。3.3 安装设计时包并注册到IDE运行时包全部build成功之后再到groupproj里找到所有设计时包dcl开头的那些右键选择Install。也支持打开每个设计时包工程后选择Component - Install Packages进行安装。这一步安装的本质上就是把dcl*.bpl文件注册到IDE的组件包列表里。安装完成后IDE会提示“组件已安装”组件面板上会出现DevExpress相关的标签页。如果某些设计时包安装时报错优先检查是否已经提前编译了对应运行时包。比如安装dclDXFMXGrid时找不到dxFMXGrid运行时包那就回groupproj里先编译那个包再回头装。有个小技巧安装时确认自己使用的是Debug还是Release版本的bpl。我一般用Debug Build因为开发阶段需要断点调试控件源码Release版本没有调试信息跟不了代码。发布时再切换到Release重编一遍。3.4 新建FMX工程验证安装结果包都装好之后赶紧验证一下。新建一个Multi-Device Application默认空窗体。打开组件面板找到DevExpress标签页拖一个表格控件、一个日期控件到窗体上。如果组件面板什么都看不到先检查一下页面顶部的过滤条件把“全部”选上再看。能拖控件只是第一步。真正要验证的是跨平台编译链路是否正常。先在Windows平台上运行一遍确认界面能正常渲染。再切到Android平台编译APK部署到模拟器或真机上。这个步骤能提前暴露大量问题比如安卓平台下找不到某些dcu文件、JNI接口缺失、或者控件的资源文件没有被打进包。如果安卓部署失败大概率是Library Path没有把“Library\Android”目录加进去或者Android SDK/NDK版本和控件包编译时依赖的版本不一致。在编译日志里搜“Fatal”或“Error”通常能很快定位到具体的单元或头文件。4. 控件在FMX项目中的典型实践4.1 PDA扫码场景列表界面与数据绑定安装控件的最终目的还是为了在项目里用起来。我的PDA场景里最常用的是表格控件。比如扫码入库页面手持终端扫描条码后要把扫码记录实时追加到仓库物料列表中。以前用原生TListView每次更新列表都要重新创建ListItem还要自己管理缓存和刷新操作频繁时很容易卡顿。换成DevExpress的FMX表格控件之后数据源绑定变得清爽很多。思路是把扫码结果放到一个内存表里然后表格控件的DataSource指向这个表。每扫一次往表里插入一条记录表格自动刷新。FDMemTable1.Insert; FDMemTable1.FieldByName(barcode).AsString : ScanResult; FDMemTable1.FieldByName(time).AsDateTime : Now; FDMemTable1.Post;这样列表界面完全不用手工干预。你还可以在图格里配置列名、宽度和排序规则界面效果和Windows桌面端基本一致。我在多个型号的安卓PDA上测试过性能完全够用数据量在几百条以内时滚动非常流畅。4.2 数据网格与编辑控件的常用配置参数这套FMX控件在表单场景里也很能打。做企业级应用时日期选择、时间选择、状态标记这些都是高频需求。以下是我最常用的几个控件和典型配置控件/功能典型用途实用配置/备注FMX表格控件物料列表、审批历史、仓库台账DataSource绑定DataSet支持列排序、列宽拖动、分组日期选择器表单里的日期字段、筛选区间端上滚动选择设计期设置Min/MaxDate时间选择器打卡时间、班次设置支持小时/分钟粒度电子表格控件展示/编辑Excel模板可加载xlsx设置单元格值适合报表打印预览进度/忙碌指示控件扫码界面等待、数据加载展示加载状态避免用户重复操作这里特别说一下电子表格控件。有几个客户要“在线预览Excel报表”之前我们用第三方组件转来转去格式总是丢。后来直接在FMX界面里放了一个电子表格控件把服务端生成的xlsx加载进来用控件自带API设置单元格样式再嵌入到一个弹窗里展示客户看到效果后直接就验收了。4.3 配套常用的Delphi技能MD5、查询、Excel导出说实话控件库解决的是“界面层”的问题但开发中光有界面不够。热搜词里很多人问Delphi字符串函数、MD5计算、ADO连接Excel这些我在项目里也经常用到。这里简单说两个配合FMX开发很好用的点。第一个是MD5计算。Delphi XE之后内置了System.Hash单元不需要自己写算法函数跨平台也能用。比如扫码扫码数据校验、接口签名都会用到uses System.Hash; function CalcMD5(const AInput: string): string; begin Result : THashMD5.GetHashString(AInput); end;第二个是数据库查询和导出。项目里用FireDAC连接远端数据库查询就是正常的FDQuery加SQL。导出到Excel这块我一般用FDMemTable循环导出CSV或者后端用第三方库直接生成Excel文件再传给客户端。FMX客户端只负责展示和交互复杂的导出逻辑尽量放到服务端这是跨平台开发里一贯的稳妥路线。5. 常见问题与排查技巧实录5.1 每次启动IDE控件都丢失、需要重新放置这个问题在热搜词里反复出现我在安装过程中也遇到了。现象是当天装好控件、建好界面一切正常。第二天打开IDE组件面板还在但工程里的控件全部变成未知类型编译直接报错。排查思路是这样的。首先检查Tools - Options - Delphi Options - Library里的路径是否还正确有时候切换平台后路径会被覆盖或丢失。其次打开Component - Install Packages确认dcl开头的DevExpress包是否处于勾选状态。如果包列表里根本没有说明上次安装没有真正持久化需要重新Add一次bpl文件。还有一个隐蔽原因IDE缓存损坏。Delphi会在用户目录下存一些IDE状态文件路径类似“C:\Users\用户名\AppData\Roaming\Embarcadero\BDS\23.0”里面有.dsk或.dst文件。出问题时先把IDE关掉备份后删除这些临时状态文件重新打开工程。这招能解决很多“控件看起来装了但IDE不认”的怪问题。5.2 编译时找不到单元“Cannot find unit dxXxx.pas”运行时报这个错十有八九是Library Path没有配置完整。我之前踩过的一个坑是只加了顶层路径没加平台子目录。切换到Android平台编译时所有平台相关单元都找不到了报错一大片。解决方法是把Common、Win32、Win64、Android这些子目录都加到对应平台的Library Path里。另外还要检查是不是有多个版本的DevExpress源码残留。搜索路径里如果存在两个同名dcu或bpl文件编译器可能引用了旧版本。用一个笨办法查在IDE的Library Path页面下方有个“浏览”按钮可以打开已保存的搜索路径列表。把DevExpress相关的路径点开逐个确认是否存在。重复的路径尽量删除掉。5.3 安卓真机运行时崩溃或控件白屏Windows编译运行一切正常一部署到安卓PDA上要么直接闪退要么打开界面白屏。这个问题通常有两个原因。第一是权限。Android应用访问网络、摄像头、存储都需要动态权限。FMX里面要用TPermissionsService去请求权限代码虽然简单但忘了写就会在运行时崩溃。手动在安卓Manifest里加权限声明和动态申请缺一不可。第二是资源文件。DevExpress控件在运行时会加载自己的样式和图片资源这些资源默认不会自动打进APK。需要在Project - Deployment Manager里确认是否包含DevExpress相关的资源项。如果被打包管理器过滤掉了运行时就找不到资源文件界面自然就白屏了。5.4 设计期预览与运行期效果不一致用FMX做跨平台开发经常遇到设计器里看着挺好看真机上一跑全变形的情况。这其实不完全是控件的问题而是FMX的字体渲染和DPI适配机制在Windows和安卓上差异大。对策是使用StyleBook统一界面样式。DevExpress的FMX控件对StyleBook的兼容性做得不错设置一个统一的StyleBook可以固定字体、颜色、间距。另外在设计器里边缘留白要设计得宽松一些不要用固定像素值卡死多用对齐属性而不是绝对坐标。5.5 问题速查表现象可能原因处理办法编译报E1025 Unsupported compiler version版本判断头文件不识别当前IDE修改dxVersion.inc添加编译器版本分支组件面板看不到DevExpress标签页设计时包没安装成功检查Install Packages列表重新Add dcl*.bpl工程打开后控件显示为未知类型Library Path丢失或包未加载重新配置路径确认运行时包在列表中编译找不到dcu/bpl文件搜索路径不完整或残留多版本添加所有平台目录清理旧版本文件安卓部署崩溃/白屏缺权限/资源文件未部署配置权限检查Deployment Manager资源控件能编译但运行卡顿数据量过大或UI线程占用过多考虑数据分页耗时代码移到后台线程这些小问题并不复杂但每一个都能让你折腾半小时以上。提前了解一遍真遇到时心里就有底了。最后再分享一个实用小技巧。我在操作过程中发现从压缩包解压、配置路径、编译到安装整套流程做完大概20分钟。真正费时间的反而是环境清理和版本匹配排查。如果你也准备在Delphi 12.3上装DevExpress FMX强烈建议先把电脑上所有旧版DevExpress痕迹清理干净再把Library Path一次性配好这样后续遇到的坑会少一大半。本文还有配套的精品资源点击获取