ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Delphi 12.3下TeeChart Pro源码包安装与编译全流程详解

2026/8/30 18:01:11 拓冰建站 浏览量
Delphi 12.3下TeeChart Pro源码包安装与编译全流程详解 简介在Delphi开发环境中第三方控件的安装与配置直接影响到工程开发效率与稳定性。对于像TeeChart这样功能丰富的图表控件采用Full Source源码包进行手动编译安装相比传统exe安装程序具有更高的灵活性和可维护性。源码包允许开发者深入控件内部逻辑便于调试和定制同时能确保与当前IDE版本完全匹配。本文从环境准备、目录规划、运行期包与设计期包的编译顺序、VCL与FMX分支差异、常见错误排查等方面系统梳理了在Delphi 12.3 Athens下安装TeeChart Pro v2023.38源码包的完整流程。无论是Windows桌面端的VCL应用还是移动端的FMX跨平台项目掌握这套安装方法都能有效规避版本冲突和包依赖问题提升开发体验。 先说我为什么折腾这个事。我主力开发环境已经升到 Delphi 12.3 Athens之前项目里一直用 TeeChart 做报表图形升级 IDE 后旧安装版本老提示包版本不匹配干脆直接换成 Steema TeeChart Pro VCL FMX v2023.38 Full Source 源码包。这个包在 Delphi 12 Athens 上直接编译安装VCL 和 FMX 两套体系都能用而且带完整源码调试图表问题时能直接跟到控件内部逻辑比等官方修复靠谱多了。这篇东西就把我从解压源码到把控件注册进 IDE、再到跑通 VCL/FMX 两个平台的完整过程写出来重点讲清楚每一步为什么要这么做以及哪些地方容易翻车。1. 为什么我坚持用 Full Source 包而不是老老实实跑 exe 安装程序1.1 源码包和传统安装版到底差在哪Steema 官方一直提供两种分发方式一个是我们平时最常看到的 exe 安装程序双击后一路 Next 就能把运行期库、设计期包、Demo 和帮助文档全部装好另一个就是这种 Full Source 压缩包里面是完整的 .pas 源文件、.dpk 工程文件、范例工程和必要的说明文档安装动作必须自己通过 IDE 完成。很多刚接触的朋友会问既然 exe 安装版那么省事为什么还要用源码包这里有几个很现实的原因。第一exe 安装版通常在安装路径、编译选项上已经被官方预设好了虽然省心但你想给同一个包编译 Win32、Win64、Android 多个目标平台时版本之间的包路径和搜索路径管理很混乱。第二源码包是排查问题的利器。比如某个 Series 类型缩放行为不对我可以直接在源码里打断点、堆栈跟进去看不需要靠黑盒测试反复猜。第三源码包可以让你锁定自定义补丁官方修复某个 bug 后你可以 diff 出变化并把它合并进自己的代码库这在长期维护的项目里价值非常高。1.2 什么情况下源码包是刚需我实际遇到过的几种场景基本都离不开源码包。一是做跨平台图表应用而且需要同时维护 VCL 和 FMX 两个界面层。exe 安装版虽然也支持 VCL FMX但如果你有自定义的 Chart 外观风格、自定义 Series 绘制代码仅靠安装版提供的接口往往不够灵活。源码包可以直接改底层绘制逻辑。二是离线开发环境。有些项目在隔离网络里开发IDE 机器不允许连外网。exe 安装版通常还是需要临时下载一些组件包而 Full Source 一个 7z 就能拷进去解压编译。三是 Delphi 版本升级后兼容性排查。官方安装包总是针对某个小版本做完整测试你从 Delphi 11 或 10.4 升到 Delphi 12.3安装版里可能残留旧编译的 .bpl/.dcp导致 IDE 里控件时有时无。源码包可以做到完全在当前 IDE 版本下重新编译一遍从根上消除“旧二进制文件在新 IDE 里不兼容”的问题。提示如果你只是做一次性成品项目、不想深究内部实现用 exe 安装版确实够了。但如果你是长期维护、多目标平台、喜欢跟源码调试的开发者Full Source 包几乎必选。2. 拿到源码包后的环境准备与目录规划2.1 Delphi 12.3 Athens 下先确认 IDE 状态开始解压前我先确认当前环境干净。这里有个容易忽略的点如果你的机器上装过旧版 TeeChart 或者其它第三方图表控件建议先从 Delphi 的组件包里卸载干净再装新版。我在一台测试机上直接叠加安装结果 IDE 启动后组件面板出现两个 TeeChart 分类其中一个点进去全是灰图标所有含 TeeChart 的窗体打开都报“Cannot find unit”类错误非常折腾。所以第一步建议这样操作打开 Delphi 12.3进入Component Install Packages在列表里把和 TeeChart、TeeUI、TeeDB 相关的运行时和设计时包全部 Remove。如果没有旧包这一步可跳过。然后确认 IDE 的库路径规划。Delphi 12.3 默认库路径里通常已经带了一组官方 TeeChart 的 dcu 搜索路径因为 IDE 自带标准版 TeeChart。源码包装的是 Pro 版会和标准版同名单元冲突。我的做法是先打开Tools Options Environment Options Delphi Options Library在Library path里把任何指向旧 TeeChart 的路径删掉避免后面对源码包添加新路径时编译器优先命中了旧 dcu。2.2 目录规划与 7z 解压源码包文件名是TeeChart Pro VCL FMX v2023.38 Support Delphi 12 Athens Full Source.7z解压后结构大概是这样不同版本细节略有差异TeeChart/ Compile/ Demo/ Docs/ Source/ VCL/ FMX/ Packages/ VCL/ FMX/我建议解压到D:\Components\TeeChart2023.38这种固定路径不要解压到桌面或下载目录。原因是 Delphi 的Options里保存的库路径是绝对路径一旦路径变了所有工程编译时找不到 dcu又得重新配置。把组件放到一个有辨识度且长期不变的分区目录后续升级版本时可以和平共处通过切换库路径即可。解压后我一般先把Docs下的Whats New和Release.txt扫一遍确认它支持的 Delphi 版本、包名和 IDE 版本号是否含 12.x。v2023.38 这个版本号对应的是 Steema 发布的 2023 年度第 38 个构建Support Delphi 12 Athens 是标题里明确写出来的所以理论上 IDE 层面是匹配的。2.3 源码包里的关键文件一览真正和编译安装相关的主要是Packages目录。它下面会按 VCL 和 FMX 分开再按 Delphi 版本拆成Delphi12之类的子目录里面有.dpk包工程文件和对应的.dproj项目文件。运行期包TeeChartPro.dpk、TeeChartVCL.dpk这类编译后生成.bpl运行期库程序运行时需要。设计期包DclTeeChartPro.dpk编译后生成设计期包IDE 用它来显示组件图标、属性编辑器只有在设计期需要。还有一个Compile目录里面通常带一个Compile.exe或Recompile.exe工具可以直接批处理编译所有包。我这次没有用它因为我想手动控制每个编译目标后面会说明为什么手动更可控。3. 从源码编译并注册到 IDE 的完整操作流程3.1 先编译运行期包还是设计期包这里有一个原则永远先编译运行期包再编译设计期包。设计期包依赖于运行期包的类型注册信息如果顺序颠倒IDE 会报“Cannot load package ... It contains unit ... which was compiled with a different version”之类的错误。我实际操作时是先用 Delphi 12.3 打开 VCL 下的运行期包TeeChartPro.dpk。打开之后在 Project Manager 里确认目标平台是Win32还是Win64右键选择Compile。这一步会生成它依赖的所有单元比如VCLTee.Chart.pas、VCLTee.Series.pas、VCLTee.TeeProcs.pas等。3.2 编译目标平台的选择与依赖这里要特别提醒TeeChart 的源码包在 Delphi 12.3 下VCL 分支可以正常编译 Win32 和 Win64FMX 分支还能编译 Android 和 iOS。但你在 IDE 里同时打开多个平台的同一个包时Delphi 会要求你逐个平台设置输出目录否则不同平台的 .dcu 会互相覆盖。我的做法是给每个平台单独设置输出目录防止 dcu 文件混杂。比如在包工程Project Options Delphi Compiler Output intermediate output里设置Win32 输出到..\..\Lib\Win32\Debug或..\..\Lib\Win32\ReleaseWin64 输出到..\..\Lib\Win64Android 输出到..\..\Lib\Android这个步骤很多教程会略过但实际非常重要。尤其当你从 Win32 切换到 Win64 编译时Delphi 默认可能沿用旧的中间目录导致后面 IDE 识别包类型时读到错平台的 dcu玄学报错。3.3 安装设计期包运行期包编译成功后再打开设计期包DclTeeChartPro.dpk同样先Compile编译通过后右键选择Install。这时候 IDE 会弹出一个提示框显示安装完成组件面板会多出一个TeeChart Pro分类里面出现TChart、TChartGrid、TChartEditor、TDBChart等组件。FMX 分支的操作流程完全一样只是打开的是Packages\FMX下的包工程。注意FMX 和 VCL 的设计期包名称不能冲突官方一般使用不同的包名例如DclTeeChartFMX。如果你在 IDE 中同时安装了两套包组件面板会出现两个TeeChart Pro标签分别是 VCL 和 FMX 组件。3.4 设置源码搜索路径包编译并不等于所有工程都能直接用。要在自己的工程里写uses VCLTee.Chart或FMXTee.Chart还需要把 TeeChart 的源码路径加到 IDE 的 Library path 里。我添加的路径一般是D:\Components\TeeChart2023.38\Source\VCL D:\Components\TeeChart2023.38\Source\FMX添加后新建工程里写uses VCLTee.Chart;就不会报找不到单元的错了。这里有个细节如果你的工程是 VCL 应用不要去 FMX 路径里找单元反过来也是。虽然编译器不报错但 VCL 的TForm和 FMX 的TForm完全不同混用时类型检查会让你怀疑人生。4. VCL 与 FMX 两套分支的差异和编译要点4.1 为什么 TeeChart 要拆成 VCL 和 FMXTeeChart 从 Delphi XE2 时代开始就把代码库分成了 VCLTee.* 和 FMXTee.* 两组单元。VCL 基于 Win32/Win64 的 GDI 绘制体系FMX 基于跨平台的TCanvas抽象层绘制。两者的公共逻辑虽然有部分复用但控件基类、事件机制、设备上下文都不同所以不能直接互用。如果你只是做 Windows 桌面程序VCL 是首选如果你要同一套代码跑到 Android 平板、iOS 或者 macOSFMX 是唯一选择。我在项目里是 Windows 客户端用 VCL 版本移动端 PDA 用 FMX 版本两边共享同一套业务数据模型只把界面绘制层分开。4.2 FMX 分支编译时容易踩的目标平台坑FMX 版本编译 Android 平台时有两点和 Windows 明显不同。第一某些 TeeChart 工具比如依赖 GDI 的绘图工具在 Android 上不可用编译时会以条件编译指令跳过。如果你在源码里直接引用了它们会报“Unit not found”。第二Android 上输出目录和包名规则更严格建议按上一节说的为每个平台单独设置输出目录。另外一个常见问题Android 编译时找不到System.Skia或FMX.Skia相关单元。TeeChart 新版在 FMX 上默认启用 Skia 加速渲染如果你用的 Delphi 12 不带 Skia 支持或者路径被裁剪过会报错。解决方式是检查Tools Options Environment Options Delphi Options SDK Manager里 Android SDK 是否完整并确认工程的Conditional defines里没有强行禁用SKIA。如果不需要 Skia 加速可以在包的条件编译里关闭相关定义但不推荐因为渲染性能差距明显。4.3 VCL 和 FMX 包同时安装时的注意事项我在另一台机器上遇到过一次诡异的情况VCL 版本编译安装正常FMX 版本一安装整个 IDE 启动后组件面板消失了一大半最后定位到是设计期包注册冲突。原因是我把两个设计期包都叫DclTeeChartPro注册到 IDE 后后安装的包把前一个覆盖了。解决办法是安装前看清楚包名。Steema 官方的源码包里已经做了区分比如 VCL 的设计期包是DclTeeChartPro.dpkFMX 的设计期包通常叫DclTeeChartFMX.dpk或类似。如果你用的第三方整合包没有区分建议自己在项目设置里改Package名称确保唯一。5. 第一次创建 TeeChart 工程设计器和纯代码两条路线5.1 用设计器快速搭建一个带曲线的图表源码包安装成功后我推荐先新建一个 VCL 工程跑通最基础流程。新建工程后从组件面板的TeeChart Pro分类拖一个TChart到 Form 上。右键点击 Chart选择Edit Chart会打开 TeeChart 的图表编辑器。在编辑器里切到Series页点击Add选择Line类型添加一条曲线。然后回Series页下面的Data Source标签可以选“Random”先填充随机数据让画面先出来。如果直接绑定数据集可以选 Dataset 并指向一个TDataSet子类比如TADOQuery、TFDQuery或TClientDataSet。这里我一般会把Legend设置成可见Title改成实际项目名称Axes Left和Bottom设置好标题和刻度精度。这些设置在设计期能看到即时效果比纯代码写方便很多。5.2 纯代码创建图表并动态追加数据设计器适合搭界面但图表数据往往来自程序运行时的动态计算所以纯代码创建也很常用。下面的代码演示在按钮点击事件里创建一个带两条曲线的图表uses VCLTee.TeeProcs, VCLTee.Chart, VCLTee.Series; procedure TForm1.Button1Click(Sender: TObject); var Line1, Line2: TLineSeries; I: Integer; begin Line1 : TLineSeries.Create(Self); Line2 : TLineSeries.Create(Self); Chart1.FreeAllSeries; Chart1.AddSeries(Line1); Chart1.AddSeries(Line2); Line1.Title : 2024年数据; Line1.Color : clRed; Line2.Title : 2025年数据; Line2.Color : clBlue; for I : 0 to 100 do begin Line1.AddXY(I, Random(100), , clTeeColor); Line2.AddXY(I, Random(200) 50, , clTeeColor); end; Chart1.Title.Text.Text : 年度趋势对比; Chart1.Legend.Visible : True; end;如果要在 FMX 工程里使用只需要把uses换成FMXTee.Chart、FMXTee.Series组件类名几乎一致TChart、TLineSeries这是 TeeChart 做得比较好的一点——跨平台 API 设计统一业务移植成本低。5.3 在 Android PDA 上显示扫码统计图的实际注意点很多做 PDA 扫码项目的朋友会在 FMX 里集成 TeeChart用来展示扫码数量趋势。我帮人调过一个项目他们的硬件是 Android PDA系统是 Android 11Delphi 12.3 写 FMX 程序扫码枪通过广播把条码传到界面。TeeChart 在这一场景里最常见的问题是真机运行后图表不刷新。原因是 Android 上主线程绘制和扫码广播回调不在同一线程直接在主线程外调用Series.AddXY有时 UI 不重绘。解决办法是把数据更新放进TThread.Queue或TThread.Synchronize里确保图表操作在主线程执行TThread.Queue(nil, procedure begin Chart1.Series[0].AddXY(Now, ScanCount, , clTeeColor); Chart1.Repaint; end);另一个注意点是字体和坐标轴刻度。PDA 屏幕通常比手机窄图表横轴标签如果太多会重叠。我一般会动态设置BottomAxis.LabelStyle或Increment让横轴步进值更大或者把标签角度旋转 45 度。这样在窄屏上不会挤成一团。6. 源码编译时那些高频报错与排查方法6.1 包版本不匹配IDE 里控件装完又消失这是我在源码包安装里遇到最多的坑。症状是设计期包明明 Install 成功了关掉 Delphi 再打开组件面板里的 TeeChart 分类还在但拖到窗体上报“Class TChart not found”或者启动时弹“Package ... was compiled with a different version of ...”。这类问题绝大多数不是 TeeChart 的锅而是混用了不同 IDE 版本编译出来的 .bpl/.dcu。比如机器上装过 Delphi 11 和 Delphi 12.3 两套环境打开 Delphi 12.3 编译时包的搜索路径里却包含了旧 IDE 的库目录。排查时先从Project Options Delphi Compiler Search path和全局Library path里排除旧版本路径。还有一个小技巧看到.dcu文件时用文本编辑器打开前几个字节能看到编译它的 IDE 版本信息。如果里面是旧版本号直接删掉该 dcu 重新编译。6.2 编译时提示找不到VCLTee.TeeProcs.dcu出现这个错误大多数情况下是源码路径没配好或者编译运行期包时中间输出目录不对。如果你在某个具体工程里写uses VCLTee.TeeProcs报错而运行期包已经编译成功先手动确认那个.dcu文件是否存在于输出目录。如果存在那就是全局库路径没指向这个输出目录如果不存在说明包工程没有在对应平台下编译需要回到包工程重新编译并确认平台选择正确。6.3 每次进入 IDE 都丢失控件又得重新拖一遍网上搜 Delphi 控件问题经常能看到“每次进入 IDE 都丢失控件需要重新放置保存后还是那样”这种描述。这个问题的根源通常是设计期包由于异常未正确注册或 IDE 的Win32/Win64平台选择与包不匹配。处理办法分三步走打开Component Install Packages确认目标包还在列表里并且勾选状态是启用。如果包不在列表里用Tools Manage Platforms确认当前 IDE 使用的是 32 位还是 64 位包管理器。Delphi 12.3 默认 IDE 是 64 位进程需要安装 64 位版本的设计期包。若包在列表里但控件丢失先移除包关闭 IDE删除C:\Users\用户名\AppData\Roaming\Embarcadero\BDS\12.0\*下相关的.dsk文件或组件缓存建议先备份重启 IDE 后重新安装。这个问题我和同事排查过多次最后基本都落到“64 位 IDE 需要 64 位设计期包”上。源码包里编译时千万别只编了 Win32 就完事一定要在当前 IDE 架构对应的平台上重新编译并安装。6.4 编译源码包时内存不足或 IDE 卡死TeeChart 源码包里有大量单元手工在 IDE 里编译时有些机器配置低的会遇到 IDE 长时间无响应。如果编译十几分钟还没结束不要急着关先看任务管理器的 CPU 占用。Delphi 编译器是单文件串行编译遇到复杂单元确实慢。如果想提速可以用命令行编译工具比如rsvars.bat配msbuild或者在包工程里启用Build而不是Compile。Compile只编译有变化的文件Build会全量重编译。第一次建议用Build后续小改动用Compile能省下大量等待时间。7. 部署到目标机器运行期包怎么折腾最稳7.1 先分清静态链接还是动态运行期包源码包编译出来的包有两种使用方式。一种是动态运行期包程序发布时要把TeeChartPro.bpl和依赖的bpl放在 exe 同目录或系统 PATH 里另一种是静态链接把所需单元直接编译进 exe生成的文件只有一个 exe。TeeChart 官方默认推荐静态链接发布因为不需要目标机器安装额外运行库也避免版本冲突。在工程Project Options Packages Runtime packages里把Build with runtime packages的勾选去掉重新 Build所有 TeeChart 单元就会编译进 exe。7.2 静态链接后 exe 体积变大怎么办静态链接后 exe 会明显变大因为 TeeChart 的绘制、工具、序列逻辑全进去了。我在一个 Win64 项目里实测加了完整图表功能后 exe 增大了大约 15~20MB但换来的是部署简单很多。如果确实对体积敏感可以只静态链接用到的单元但手工调整链接单元列表比较麻烦。我的经验是内部工具程序可以接受体积大一点宁可稳也别在客户机器上因为没有 bpl 打不开程序。分布式部署的首要原则是“少依赖”。7.3 部署前的最后检查清单给客户机器装程序前我通常会确认这几件事程序在开发机 Release 配置下能正常运行不依赖 IDE 的调试 dcu。如果使用动态运行期包bpl文件是否存在且版本号与编译环境一致。如果使用静态链接exe单独拷贝到一台无 Delphi 环境的干净 Windows 机器上测试能正常启动并绘制图表。在 FMX 移动端则要确认AndroidManifest.xml中没有额外权限问题TeeChart 本身不需要太多权限但大数据量图表可能涉及存储要按实际需求申请。8. 关于 v2023.38 这个版本的个人使用体会最后聊点不太容易写在官方文档里的内容。v2023.38 这个版本在 Delphi 12 Athens 下的整体稳定性我个人评估是“可以正式用于生产”。之前测试过几版别的图表库升级后要么属性编辑器崩溃要么跨平台渲染字体错乱TeeChart 在这一轮升级里没出大问题。两个我特别满意的小细节一是 FMX Android 上的渲染性能明显比早年版本好Scaled 模式下折线图滚动、缩放非常跟手用来做扫码统计趋势图完全够用二是设计期图表编辑器在源码版下也能正常打开没有因为篡改源码导致编辑器失效。还有一个经验如果你的项目长期依赖 TeeChart建议把源码包里的.pas文件纳入版本管理并打上内部标签。这个包升级、合入自定义补丁时能快速定位到所有改动而不是在几十个文件里猜哪段是官方原版。如果后面你也在 Delphi 12.3 上折腾这个源码包记住最核心的三件事先清干净旧包、按 VCL/FMX 分开编译、为每个目标平台单独设置输出目录。这三步做对了剩下的大多是顺水推舟的事。本文还有配套的精品资源点击获取