您的 Delphi 桌面应用,
现在可以运行在 Linux 上。
安装 FMXLinux 后,sgcUI 的 FireMonkey 控件即可在 Linux64 的真实桌面应用中运行。窗体和代码与您在 Windows 和 macOS 上发布的完全相同,外观也一致。
- Delphi
- FireMonkey
- FMXLinux
- Linux64
- Ubuntu 22.04 或更高版本
对于 Delphi 桌面开发者来说,Linux 一直是最难的平台。编译器支持 Linux64 目标,但可视化应用需要 FireMonkey,而 Linux 上的 FireMonkey 需要 FMXLinux 附加组件。在此之前,sgcUI 在 Linux64 上只支持非可视化部分:数据模型、导入导出,以及无界面渲染为 PNG 和 SVG。
今天情况有了变化。在 IDE 中安装 FMXLinux 后,sgcUI 的 FireMonkey 控件即可在 Linux64 上编译并运行,包括数据表格、图表、仪表、仪表板、计划器、地图、图表编辑器以及套件中的其余部分。本文中的每一张截图都是在 Ubuntu 上拍摄的,使用的演示项目与 Windows 和 macOS 上运行的相同。
一分钟了解 Linux64 上的 sgcUI,录制自 Ubuntu 上运行的真实演示程序。也可在 YouTube 观看。
不只是控件,而是完整应用
评判一套 UI 组件的最好方式,是看完整的应用。sgcUI Suite 演示正是如此:每个演示都把十几个产品组合成一个程序,包含导航、实时数据和多个页面。它们现在全部可以在 Linux64 上原样运行。
交易台
Markets 演示由一个模拟器提供数据,每秒推送约 1,000 次更新。自选表格会随价格变动闪烁红绿色,K 线图带有布林带、移动平均线、成交量和 RSI 窗格,行业树状图则显示市场的走向。
工厂控制室
Factory 演示是一个灌装工厂的 HMI。它包含 OEE 卡片、七段数码瓶数计数器、带动画连接线的产线工艺流程、报警面板、径向和线性仪表,以及带报警限值的十二个传感器实时趋势。
Fleet、ERP 和项目组合
Fleet 演示在西班牙和葡萄牙的地图上跟踪 48 辆车,包含路线、停靠点、车辆表格和告警列表。ERP 演示以 KPI 卡片、图表、仪表和客户地图组成的仪表板开场,随后是客户、计划、报表和分析页面。Portfolio 演示用甘特图安排 12 个项目和 520 个任务,并显示关键路径。
sgcUI 为 Linux 桌面带来什么
sgcUI 是一套原生 UI 产品,共享同一个核心、同一个主题引擎和同一种工作方式。在 Linux64 上,整个套件的 FireMonkey 控件都可以使用:
- sgcGrid:用于实时数据流、数据集和大型表格的数据表格,支持排序、分组、汇总、过滤行、查找面板和 Excel 导出。
- sgcCharts:二十一种系列类型,适用于业务图表和实时数据流,从折线图、柱状图到 K 线图、树状图和漏斗图。
- sgcGauges:十四种仪表,适用于目标、设备和控制室。
- sgcDashboard:磁贴和 KPI 卡片,把数字变成一块屏幕。
- sgcPlanner:基于同一数据模型的调度器、甘特图和看板。
- sgcPivotGrid:带字段列表的数据透视表和透视图。
- sgcMaps:原生地图,支持标记、路线和离线瓦片。
- sgcDiagram:图表编辑器和布局,把您的数据画出来。
- sgcNavigation、sgcToolbar、sgcEditors 和 sgcWizard:侧边栏、标签页、工具栏、状态栏、输入控件和多步骤表单,把应用组织在一起。
- sgcSpreadsheet、sgcRichEdit、sgcReports、sgcPDF 和 sgcChat:在您的应用中提供电子表格、富文本、报表、PDF 文档和聊天。
表格值得单独配一张图。这是 Ubuntu 上拥有 100,000 行数据的 FilterAndFind 演示,包含表头过滤按钮、过滤行和“Ask the grid”输入框。鼠标滚轮滚动流畅,按 Ctrl+End 可直接跳到第 100,000 行。
您需要准备什么
- Delphi 13 Enterprise 或 Architect 版本,其中包含 Linux64 编译器。
- 通过 GetIt 安装的 FMXLinux 附加组件。拥有有效订阅的 Enterprise 和 Architect 客户可以使用。
- 带源代码的 sgcUI 版本。FireMonkey 单元会与您的项目一起为 Linux64 编译。
- 一台 Linux 机器(真实机或虚拟机),并安装 PAServer,用于从 IDE 构建和调试。应用需要 glibc 2.34 或更高版本,即 Ubuntu 22.04 或更高版本,以及 GTK3。
Linux64 上的 sgcUI 已在 Ubuntu 22.04 和 Ubuntu 24.04 上使用 Delphi 13 和 FMXLinux 1.84 测试通过。
构建您的第一个 Linux64 应用
- 通过 GetIt 安装 FMXLinux,然后重启 IDE。
- 在 Linux 机器上启动 PAServer,在 IDE 中创建连接配置文件并导入 Linux SDK,与任何 Delphi Linux64 项目的做法相同。
- 把 sgcUI 的
Source文件夹添加到 Linux 64-bit 库路径(Tools, Options, Language, Delphi, Library),这样编译器就能找到该平台所需的 sgcUI 单元。 - 打开或新建一个 FireMonkey 应用,在 Projects 窗口中添加 Linux 64-bit 目标平台并选中它。
- 把 sgcUI 控件放到窗体上并运行。IDE 会编译项目,通过 PAServer 部署,并在 Linux 桌面上启动。
无需编写任何 Linux 专用代码。下面是 Hello Grid 快速入门的完整源代码,窗体上有一个 TsgcFMXGrid,其三列在设计器中定义:
uses
System.SysUtils, System.Classes, FMX.Types, FMX.Controls, FMX.Forms,
// sgc
sgcGrid_Data, sgcGrid_FMX;
procedure TfrmHelloGrid.FormCreate(Sender: TObject);
begin
{ BeginUpdate / EndUpdate repaint the grid once, after the last row }
Grid.Data.BeginUpdate;
try
{ AppendRow(Key, [City, Country, Population]) }
Grid.Data.AppendRow('Madrid', ['Madrid', 'Spain', 3416771]);
Grid.Data.AppendRow('Paris', ['Paris', 'France', 2102650]);
Grid.Data.AppendRow('Berlin', ['Berlin', 'Germany', 3755251]);
Grid.Data.AppendRow('Rome', ['Rome', 'Italy', 2749031]);
finally
Grid.Data.EndUpdate;
end;
end;
图表的用法也一样。TsgcFMXChart 控件绘制一个 TsgcChart 组件,每个系列也是一个组件,这里是 TsgcChartSeries_Line。唯一的代码就是添加数据点:
uses
// sgc
sgcCharts_Chart, sgcCharts_Series, sgcCharts_FMX;
const
CS_VISITS: array [0 .. 6] of Integer = (420, 515, 480, 610, 590, 380, 350);
procedure TfrmHelloChart.FormCreate(Sender: TObject);
var
i: Integer;
begin
{ X is the day, Y the visitors. The chart repaints by itself }
for i := Low(CS_VISITS) to High(CS_VISITS) do
serVisits.AddXY(i + 1, CS_VISITS[i]);
end;
在 Projects 窗口中选择 Windows、macOS 或 Linux 64-bit,这两个窗体就能在各个平台上运行。
从窗体到高级应用
上面的 Suite 演示由相同的部件构建,其源代码随 sgcUI 一起提供。以下思路可以让大型 Linux64 应用更易于维护:
- 从 Suite 演示开始。ERP、Factory、Fleet、Markets 和 Portfolio 都是完整的应用,包含导航、页面、主题和数据模拟器。选择与您的项目最接近的一个,把模拟器换成您的数据。
- 在窗体设计器中设计。演示的界面保存在
.fmx文件中,而不是代码里,因此您在 Windows 上的 IDE 中看到的就是在 Linux 上运行的效果。 - 把数据放在模型中。每个 sgcUI 控件绘制的都是与框架无关的模型:表格数据、图表、计划器数据和图表文档。您的业务代码只与模型交互,因此不依赖平台或 UI 框架。
- 批量更新。对于实时界面,把成批的变更包在
BeginUpdate和EndUpdate之间,这样控件每批只绘制一次,而不是每个值绘制一次。 - 全局使用一个主题。控件会跟随应用的浅色或深色主题,因此像 Factory 演示这样的深色控制室界面,无需为每个控件单独设置样式。
- 服务器端也能渲染。同样的模型可以在没有窗口的情况下,把表格、图表、仪表和仪表板渲染为 PNG 和 SVG。Linux64 服务可以为报表、电子邮件和 Web 接口生成图像,这部分不需要任何附加组件。
- 在实际部署的发行版上测试。不同 Linux 桌面的字体和窗口管理器各不相同,请在目标系统上检查最终界面。
立即体验:274 个已编译的 Linux64 演示
要在 Linux 上看到 sgcUI 运行,您不需要 Delphi、FMXLinux 或许可证。每个产品的 FireMonkey 演示共 274 个程序,均已为 Linux64 编译并打包在一个压缩包中:
tar -xJf sgcUI_bin_linux64.tar.xz
./run.sh # choose a demo from the list
./run.sh Charts # only the demos of one product
# or start one demo directly
cd Grid/FilterAndFind
GDK_BACKEND=x11 ./FilterAndFindFMX
这些演示可在 Ubuntu 22.04 或更高版本上运行,也可在其他 glibc 2.34 或更高版本并带有 GTK3 的发行版上运行,需使用 X11 或 XWayland 显示。带在线地图的演示还需要 libcurl 和互联网连接。详情请参阅压缩包中的 README.txt。
一套代码,覆盖所有桌面
Windows、macOS,现在还有 Linux64,使用相同的 FireMonkey 窗体和相同的 sgcUI 控件。下载已编译的演示程序,在您自己的 Linux 桌面上运行看看。
有问题或反馈?请联系我们,回复您的是编写这些代码的人。
