Delphi、C++ Builder & .NET sgcUI 的一部分

sgcGauges,适用于 Delphi、C++ Builder & .NET 的仪表盘面板

十种仪表类型,适用于仪表盘和 HMI 面板,从径向表盘到报警指示盘。绘制绿色、琥珀色和红色区间,数值越过限值时触发报警,让指针平滑移动到每个新读数,并在服务器上将同一个仪表渲染为 PNG 或 SVG。

VCL、FireMonkey、WinForms、WPF、Avalonia十种仪表类型,社区版包含六种无需窗口即可输出 PNG 和 SVG包含在 sgcUI Professional 中
HMIPanel 演示,包含储罐、水泵、LED 条和报警指示盘

仪表盘面板所需的一切

四个分组,十一项功能,附带真实的类和属性名称以及每个帮助主题的链接。标有“注册版”的功能不包含在免费的 .NET 社区版中。

仪表与刻度

十种类型共用一个模型,支持区间、样式和多个指针。

sgcGauges 图库,包含径向、环形、罗盘、时钟、VU 表、线性、数字和 LED 仪表

仪表与刻度

一个库中的十种仪表类型

仪表盘、HMI 面板和测试台需要不同的仪表:用表盘显示速度,用条形显示液位,用数字读数显示频率,用指示灯显示水泵,用磁贴面板显示报警。sgcGauges 提供十种共用同一个模型的类型,刻度、指针、区间、阈值和主题都相同。只需学习一套 API,每种仪表的行为都一致。

  • TsgcVCLRadialGauge、TsgcVCLLinearGauge、TsgcVCLDigitalGauge、TsgcVCLLEDGauge、TsgcVCLLEDBarGauge、TsgcVCLProgressRingGauge
  • TsgcVCLVUMeterGauge、TsgcVCLClockGauge、TsgcVCLCompassGauge、TsgcVCLAnnunciatorGauge
  • 每种类型也提供 FireMonkey 版本,在 .NET 中则提供 WinForms、WPF 和 Avalonia 版本
  • 每种类型都有一个框架无关的模型,例如 TsgcRadialGauge,用于无界面场景

社区版包含径向、线性、7 段数字、LED、LED 条和进度环仪表。VU 表、时钟、罗盘和报警指示盘属于注册版。

阅读帮助主题
从 0 到 260 km/h 的速度表,带绿色、琥珀色和红色区间

仪表与刻度

任意刻度上的彩色区间

只有当绿色、琥珀色和红色指出数值应处的范围时,操作员才能一眼读懂仪表。为刻度设置任意最小值和最大值,设置主刻度间隔和次刻度,并为重要的区段添加彩色区间。区间有各自的粗细和标题,刻度可以反向,也可以把刻度线放在内侧或外侧。区间直接绘制在刻度上,因此无需额外工作,它们也会出现在 PNG 和 SVG 输出以及两种主题中。

  • Scales[0].Ranges.Add,带 StartValue、EndValue、Color、Thickness 和 Caption
  • TsgcGaugeScale:Minimum、Maximum、MajorInterval、MinorCount、Reversed
  • 用于刻度标签的 LabelFormat 和 ShowLabels
  • StartAngle 和 SweepAngle 决定径向仪表的圆弧形状
阅读帮助主题
三个垂直线性仪表:子弹图、温度计和条形

仪表与刻度

一个控件即可实现子弹图、温度计和条形

液位、温度以及相对目标的进度天然适合线性显示。一个线性仪表可绘制三种样式:普通条形、带球泡的温度计,以及把数值与目标标记进行比较的子弹图。可设为水平或垂直,以适应储罐、侧边栏或表格行。子弹图的目标是一个属性,而不是额外的指针,因此子弹图在免费的社区版中也可使用。小型仪表可放入表格单元格或仪表盘磁贴。

  • LinearStyle:glsBar、glsThermometer 或 glsBullet
  • Target 绘制子弹图目标标记,所有版本均可用
  • Orientation 和 BulbSize
  • 区间和阈值的工作方式与径向仪表完全相同
阅读帮助主题
径向仪表,用指针表示实际值,用标记表示目标值

仪表与刻度 仅限注册版

一个仪表上的多个刻度和指针

有些读数只有并排比较才有意义:实际值与目标值、进口与出口、小时与分钟。一个仪表可以带有多个刻度和多个指针,每个指针可选择自己的刻度和样式:针形、标记或条形。阈值可以监视任意指针。双指针表盘在拥挤的面板上节省空间,并让目标与实际之间的差距一目了然。

  • TsgcGaugePointer 的 Pointers 集合,带 Kind、NeedleStyle、MarkerShape 和 ScaleIndex
  • Scales 集合,每个刻度带 Radius 和 Offset
  • 阈值和数据绑定上的 PointerIndex
  • 使用多个指针制作的窗体仍可在社区版中加载,但社区版只绘制第一个指针

社区版每个仪表绘制一个刻度和一个指针;注册版绘制全部。

阅读帮助主题

报警、动画与实时数据

会做出反应的仪表:阈值、动画、工业显示和实时数据源。

报警、动画与实时数据

带滞后的报警,在主线程中触发

在限值附近徘徊的压力不应每分钟触发上百次报警。阈值包含数值、方向和滞后区间:数值越过时触发一次,只有在数值回退超过该区间后才会重新就绪。无论哪个线程写入数值,OnThreshold 始终在主线程中运行,因此您可以直接点亮 LED 或显示消息。每个阈值可以监视不同的指针,因此一个仪表可以对实际值触发高位报警,对第二个读数触发低位报警。

  • TsgcGaugeThreshold 的 Thresholds,带 Value、Hysteresis 和 Direction
  • gtdRising、gtdFalling 或 gtdBoth
  • 阈值激活期间,ValueColor 会为数值文本重新着色
  • Gallery 演示在 200 km/h 时点亮报警 LED
阅读帮助主题

报警、动画与实时数据

带缓动效果的平滑指针动画

跳变的指针看起来像出了故障,平滑移动的指针才像仪表。每个新值会在您选择的时长内,以五种缓动曲线之一从旧值过渡,因此突变易于跟随,实时数据也不会闪烁。对于需要立即得到原始值的测试台,可以关闭动画。OnChange 会在数值变化时通知您,与屏幕上的动画无关。

  • 带 Enabled 和 Duration 的 Animation(TsgcGaugeAnimation),默认 300 毫秒
  • Easing:geLinear、geQuadOut、geCubicOut、geCubicInOut、geBackOut
  • 适用于每种仪表类型和每个版本
  • IsAnimating 告知指针是否仍在移动
阅读帮助主题
工业显示:段码、LED 和报警指示盘

报警、动画与实时数据

工业显示:段码、LED 和报警指示盘

控制面板有自己的视觉语言。数字仪表可绘制 7 段、14 段或点阵数字,并可选幽灵段和倾斜。LED 会闪烁,LED 条会保持峰值,报警指示盘则显示一组报警磁贴,在操作员确认之前会一直闪烁。这些显示都与其他仪表共用相同的刻度、阈值和主题,因此报警在各处的工作方式相同。

  • TsgcVCLDigitalGauge:DisplayType、Digits、ShowGhost、Skew
  • TsgcVCLLEDGauge,带 Blink 和 BlinkInterval;TsgcVCLLEDBarGauge,带 PeakHold
  • TsgcVCLAnnunciatorGauge:Tiles、FlashInterval、Acknowledge、AcknowledgeAll
  • HMIPanel 演示将它们与储罐、水泵和压力组合在一起

社区版包含 7 段数字、LED 和 LED 条。14 段和点阵显示以及报警指示盘属于注册版。

阅读帮助主题

报警、动画与实时数据 仅限注册版

将 MQTT 主题直接绑定到指针

在 IoT 控制台中,大部分代码都是管道工作:订阅、解析、找到仪表、设置数值。sgcGaugesWS 桥接免去了这些工作。数据源挂接到 sgcWebSockets 客户端,每个绑定把一个主题和一个 JSON 路径映射到一个仪表指针。支持带 + 和 # 的 MQTT 主题过滤器,过滤路径可从共享数据流中挑出某个设备。多个绑定可以共用一个数据源,因此一个代理连接即可驱动整个面板。

  • TsgcGaugeFeedSource_MQTT、TsgcGaugeFeedSource_WebSocket、TsgcGaugeFeedSource_SSE
  • TsgcGaugeFeedBinding 的 Bindings:Gauge、PointerIndex、Topic、ValuePath
  • FilterPath 和 FilterValue 用于选择消息
  • 数据源上的 OnValue 和 OnError 事件

该桥接需要 sgcWebSockets。在社区版中,请通过自己的代码设置 Value;在后台线程中调用是安全的。

阅读帮助主题

输出与外观

同一个仪表可用于服务器,也适用于任何主题。

输出与外观

无需窗口,将仪表输出为 PNG 或 SVG

仪表在屏幕之外也有需求:交班报告、状态邮件或由您的后端提供的网页。每个仪表模型和每个控件都能在没有窗体的情况下将自己保存为 PNG 或 SVG,因此控制台程序、Windows 服务或 Linux64 服务器可以渲染操作员所见的同一个仪表。宽度、高度和缩放比例都是参数,所以一次调用可为列表生成缩略图,另一次调用则为报告生成清晰的 2 倍图像。

  • 每个模型和控件上的 SaveToPNG 和 SaveToSVG
  • 框架无关的模型,例如 TsgcRadialGauge 和 TsgcLinearGauge
  • 自 Delphi 10.2 起支持 Linux64 无界面;Headless 演示可在 Win32、Win64 和 Linux64 上写出 PNG 和 SVG
  • 在 .NET 中,ConsoleRender 演示可完成同样的工作
阅读帮助主题
适用于白班和夜班的主题

输出与外观

适用于白班和夜班的主题

控制室在夜间会调暗屏幕,办公室则偏好明亮的外观。一个属性即可在浅色和深色主题之间切换仪表,表盘、刻度、标签和数值的颜色随之变化。仪表与每个 sgcUI 产品使用相同的主题类型,因此会与仪表盘、图表和表格一起切换。区间在两种主题中保持各自的颜色,所以绿色在夜间仍然表示正常。FormatSettings 属性可固定读数的小数分隔符,不受用户区域设置影响。

  • Theme := utDark 或 utLight
  • FaceColor、BackgroundColor 和字体仍可按仪表分别设置
  • 用于读数的 Title、Units 和 ValueFormat
  • OnFormatValue 用于自行格式化数值文本
  • 支持阿拉伯语和希伯来语的从右到左:标题和单位文本遵循方向,而表盘、时钟、指南针和进度条保持原有方向
阅读帮助主题

无障碍

面向屏幕阅读器的 UI Automation 和高对比度,无需任何设置。

无障碍

向 UI Automation 公开其值的仪表

每种仪表都向 Microsoft UI Automation 公开其标题、值和量程,阈值则作为通知发出。仪表会用写入无障碍 PDF 的同一段替代文本来描述自己。

  • 仪表只显示值,因此默认不是 Tab 停靠点,但仍然会向 UI Automation 公开
  • 当希望键盘用户停留在仪表上时,将 TabStop 设置为 True
  • 数字、LED、时钟和罗盘仪表以文本形式公开其值,其他类型则作为范围值公开
  • 在 Windows 高对比度主题下,仪表使用系统颜色绘制

无障碍功能在每个版本中默认开启,包括免费的社区版,可用于 VCL(Delphi 和 C++Builder 从 Delphi 7 到 Delphi 13 的每个版本)、Windows 上的 FireMonkey,以及 WinForms、WPF 和 Avalonia。在 Delphi 和 C++Builder 中,AccessibleName 和 AccessibleDescription 设置向 UI Automation 公开的名称和说明,在 .NET 中,各框架标准的无障碍名称和帮助文本起同样的作用。请参见无障碍符合性报告。

阅读帮助主题

查看 sgcGauges 的实际效果

sgcUI 套件演示中的 sgcGauges:使用内置模拟数据、可离线运行的完整应用程序。

谁在用 sgcGauges 构建应用

SCADA 和 HMI 界面

工厂 HMI 显示两个带液位仪表的储罐、水泵 LED、带红色区间的压力表盘,以及用于报警的报警指示盘。带滞后的阈值使每个报警只触发一次,报警指示盘会一直闪烁直到操作员确认,夜班则切换为深色主题。

  • 区间与阈值
  • 报警指示盘
  • LED
  • 深色主题
运行 HMIPanel 演示

IoT 与遥测控制台

遥测控制台订阅消息代理,并显示来自现场设备的六个实时读数。绑定把每个主题和 JSON 字段映射到一个指针,指针平滑移动到每个新值,无需手写任何消息处理代码。同样的仪表还可渲染为 PNG,用于每日状态邮件。

  • MQTT 绑定
  • 动画
  • 无界面 PNG
运行 MQTTLive 演示

带仪表的 KPI 仪表盘

管理仪表盘把仪表放入磁贴,与 KPI 卡片和图表并排:用进度环显示利用率,用与目标对比的子弹图显示交付时间,用带彩色区间的表盘显示服务水平。一切都遵循同一个主题属性,仪表会自动适应其磁贴的大小。

  • 进度环
  • 子弹图
  • sgcDashboard 磁贴
运行 Gallery 演示

几行代码构建压力与液位面板

Delphi、C++ Builder 和 C# 中使用相同的 API:带红色区间和报警阈值的径向压力表、子弹式液位仪表和闪烁的报警 LED。

VCL 窗体上带红色区间和报警阈值的径向压力表、子弹式液位仪表和闪烁的报警 LED。

uses
  SysUtils, Classes, Controls, Forms, sgcUICore_Theme,
  sgcGauges_Types, sgcGauges_Model, sgcGauges_VCL;

type
  TTankPanel = class(TComponent)
  public
    Pressure: TsgcVCLRadialGauge;
    Level: TsgcVCLLinearGauge;
    Alarm: TsgcVCLLEDGauge;
    procedure PressureThreshold(Sender: TObject; aThreshold: TsgcGaugeThreshold;
      aValue: Double; aRising: Boolean);
  end;

procedure TTankPanel.PressureThreshold(Sender: TObject;
  aThreshold: TsgcGaugeThreshold; aValue: Double; aRising: Boolean);
begin
  // runs in the main thread, whatever thread wrote the value
  Alarm.Active := aRising;
end;

function CreateTankPanel(aForm: TForm): TTankPanel;
begin
  Result := TTankPanel.Create(aForm);
  Result.Pressure := TsgcVCLRadialGauge.Create(aForm);
  Result.Pressure.Parent := aForm;
  Result.Pressure.SetBounds(16, 16, 240, 240);
  Result.Pressure.Title := 'Pressure';
  Result.Pressure.Units := 'bar';
  Result.Pressure.Theme := utDark;
  Result.Pressure.Scales[0].Maximum := 10;
  Result.Pressure.Scales[0].MajorInterval := 2;
  with Result.Pressure.Scales[0].Ranges.Add do
  begin
    StartValue := 8;
    EndValue := 10;
    Color := $FFE34948;
  end;
  with Result.Pressure.Thresholds.Add do
  begin
    Value := 8;
    Hysteresis := 0.5;
    Direction := gtdBoth;
  end;
  Result.Pressure.Animation.Easing := geCubicOut;
  Result.Pressure.OnThreshold := Result.PressureThreshold;
  Result.Level := TsgcVCLLinearGauge.Create(aForm);
  Result.Level.Parent := aForm;
  Result.Level.SetBounds(272, 16, 320, 110);
  Result.Level.Title := 'Tank level';
  Result.Level.Units := '%';
  Result.Level.LinearStyle := glsBullet;
  Result.Level.Target := 80;
  Result.Alarm := TsgcVCLLEDGauge.Create(aForm);
  Result.Alarm.Parent := aForm;
  Result.Alarm.SetBounds(272, 140, 64, 64);
  Result.Alarm.OnColor := $FFE34948;
  Result.Alarm.Blink := True;
  Result.Level.Value := 62;
  Result.Pressure.Value := 6.5;
  // the same drawing code exports the gauge to PNG at twice its size
  Result.Pressure.SaveToPNG(ExtractFilePath(ParamStr(0)) + 'pressure.png', 2);
end;

阅读帮助主题 →

C++ Builder 中使用生成头文件的同一个面板。

#include <vcl.h>
#include "sgcUICore_Theme.hpp"
#include "sgcGauges_Types.hpp"
#include "sgcGauges_Model.hpp"
#include "sgcGauges_VCL.hpp"

class TTankPanel : public TObject
{
public:
  TsgcVCLRadialGauge *Pressure;
  TsgcVCLLinearGauge *Level;
  TsgcVCLLEDGauge *Alarm;
  void __fastcall PressureThreshold(TObject *Sender,
    TsgcGaugeThreshold *aThreshold, double aValue, bool aRising);
};

void __fastcall TTankPanel::PressureThreshold(TObject *Sender,
  TsgcGaugeThreshold *aThreshold, double aValue, bool aRising)
{
  // runs in the main thread, whatever thread wrote the value
  Alarm->Active = aRising;
}

TTankPanel * __fastcall CreateTankPanel(TForm *Form)
{
  TTankPanel *P = new TTankPanel();
  P->Pressure = new TsgcVCLRadialGauge(Form);
  P->Pressure->Parent = Form;
  P->Pressure->SetBounds(16, 16, 240, 240);
  P->Pressure->Title = "Pressure";
  P->Pressure->Units = "bar";
  P->Pressure->Theme = utDark;
  P->Pressure->Scales->Items[0]->Maximum = 10;
  P->Pressure->Scales->Items[0]->MajorInterval = 2;
  TsgcGaugeRange *R = P->Pressure->Scales->Items[0]->Ranges->Add();
  R->StartValue = 8;
  R->EndValue = 10;
  R->Color = 0xFFE34948;
  TsgcGaugeThreshold *T = P->Pressure->Thresholds->Add();
  T->Value = 8;
  T->Hysteresis = 0.5;
  T->Direction = gtdBoth;
  P->Pressure->Animation->Easing = geCubicOut;
  P->Pressure->OnThreshold = P->PressureThreshold;
  P->Level = new TsgcVCLLinearGauge(Form);
  P->Level->Parent = Form;
  P->Level->SetBounds(272, 16, 320, 110);
  P->Level->Title = "Tank level";
  P->Level->Units = "%";
  P->Level->LinearStyle = glsBullet;
  P->Level->Target = 80;
  P->Alarm = new TsgcVCLLEDGauge(Form);
  P->Alarm->Parent = Form;
  P->Alarm->SetBounds(272, 140, 64, 64);
  P->Alarm->OnColor = 0xFFE34948;
  P->Alarm->Blink = true;
  P->Level->Value = 62;
  P->Pressure->Value = 6.5;
  // the same drawing code exports the gauge to PNG at twice its size
  P->Pressure->SaveToPNG(ExtractFilePath(ParamStr(0)) + "pressure.png", 2);
  return P;
}

阅读帮助主题 →

C# 中的 WinForms 版本,类名与 Delphi 相同。

using System;
using System.Drawing;
using System.Windows.Forms;
using esegece.sgcGauges;
using esegece.sgcUICore;

public class TankForm : Form
{
    private readonly TsgcWinFormsRadialGauge pressure;
    private readonly TsgcWinFormsLinearGauge level;
    private readonly TsgcWinFormsLEDGauge alarm;

    public TankForm()
    {
        ClientSize = new Size(610, 270);
        pressure = new TsgcWinFormsRadialGauge { Bounds = new Rectangle(10, 10, 240, 240) };
        pressure.Title = "Pressure";
        pressure.Units = "bar";
        pressure.Theme = TsgcUITheme.utDark;
        pressure.Scales[0].Maximum = 10;
        pressure.Scales[0].MajorInterval = 2;
        TsgcGaugeRange red = pressure.Scales[0].Ranges.Add();
        red.StartValue = 8;
        red.EndValue = 10;
        red.Color = 0xFFE34948;
        TsgcGaugeThreshold limit = pressure.Thresholds.Add();
        limit.Value = 8;
        limit.Hysteresis = 0.5;
        limit.Direction = TsgcGaugeThresholdDirection.gtdBoth;
        pressure.Animation.Easing = TsgcGaugeEasing.geCubicOut;

        level = new TsgcWinFormsLinearGauge { Bounds = new Rectangle(260, 10, 340, 110) };
        level.Title = "Tank level";
        level.Units = "%";
        level.LinearStyle = TsgcGaugeLinearStyle.glsBullet;
        level.Target = 80;

        alarm = new TsgcWinFormsLEDGauge { Bounds = new Rectangle(260, 130, 64, 64) };
        alarm.OnColor = 0xFFE34948;
        alarm.Blink = true;

        // OnThreshold runs in the UI thread, whatever thread wrote the value
        pressure.OnThreshold = (sender, threshold, value, rising) => alarm.Active = rising;
        Controls.AddRange(new Control[] { pressure, level, alarm });
        level.Value = 62;
        pressure.Value = 6.5;
    }
}
dotnet add package esegece.sgcGauges.WinForms

阅读帮助主题 →

运行 sgcGauges 演示

Delphi 和 C++ Builder 提供 Gallery、GalleryFMX、Headless、HMIPanel、DashboardGauges 和 MQTTLive。.NET 演示为 Gallery(WinForms)、GalleryWpf、GalleryAvalonia、ConsoleRender、HMIPanel 和 MQTTLive。

HMIPanel

HMIPanel

两个带水泵、液位、压力和报警指示盘报警的储罐,典型工艺界面的布局。

DashboardGauges

sgcDashboard 磁贴中的六个仪表,遵循仪表盘主题。可使用社区版构建。

Headless

在 Win32、Win64 和 Linux64 上写出 PNG 和 SVG 的控制台程序。

GalleryFMX

FireMonkey 上的图库,适用于 Windows 和 Android。

仅限注册版 MQTTLive

通过 sgcGaugesWS 桥接由 MQTT 提供数据的六个仪表。需要 sgcWebSockets 和消息代理。

预编译演示

每款 sgcUI 产品的可直接运行的可执行文件,无需安装。

下载 sgcUI_bin.zip →

sgcGauges 包含在哪些版本中

sgcGauges 包含在 sgcUI Professional 和 Enterprise 版本中,也可单独购买。sgcGauges 还包含在 All-Access 套餐中。

sgcGauges 单品包

€199 / 开发者,含完整源代码,1 年更新。

购买 sgcGauges → 查看价格 →

sgcUI Professional

Standard 加 sgcGauges、sgcCharts和sgcDashboard,起价 €529。

查看 Professional →

sgcUI Enterprise

全部 14 款 sgcUI 产品,起价 €699。

查看 Enterprise →

免费的社区版(NuGet 上的 esegece.sgcGauges.Community)包含径向、线性、7 段数字、LED、LED 条和进度环仪表,支持区间、阈值、动画、主题和无界面输出。它不含 VU 表、时钟、罗盘或报警指示盘,没有额外的刻度或指针,也没有 sgcGaugesWS 桥接。

功能社区版(免费)注册版
径向、线性、7 段数字、LED、LED 条和进度环✓✓
区间、阈值、动画和主题✓✓
无界面 PNG 和 SVG 输出✓✓
VU 表、时钟、罗盘和报警指示盘−✓
每个仪表有多个刻度和指针−✓
14 段和点阵显示−✓
sgcGaugesWS 桥接(MQTT、WebSocket、SSE)−✓

支持的框架与平台

sgcGauges 中的组件

每个仪表都有一个用于无界面渲染的框架无关模型、一个 VCL 控件(C++ Builder 也使用它)、一个 FireMonkey 控件,以及 WinForms、WPF 和 Avalonia 控件。

仪表VCL 和 C++ BuilderFireMonkey.NET
径向TsgcVCLRadialGaugeTsgcFMXRadialGaugeTsgcWinFormsRadialGauge
线性(条形、温度计、子弹图)TsgcVCLLinearGaugeTsgcFMXLinearGaugeTsgcWpfLinearGauge
数字(7 段、14 段、点阵)TsgcVCLDigitalGaugeTsgcFMXDigitalGaugeTsgcWinFormsDigitalGauge
LEDTsgcVCLLEDGaugeTsgcFMXLEDGaugeTsgcWinFormsLEDGauge
LED 条TsgcVCLLEDBarGaugeTsgcFMXLEDBarGaugeTsgcWinFormsLEDBarGauge
进度环TsgcVCLProgressRingGaugeTsgcFMXProgressRingGaugeTsgcWinFormsProgressRingGauge
VU 表TsgcVCLVUMeterGaugeTsgcFMXVUMeterGaugeTsgcWinFormsVUMeterGauge
时钟TsgcVCLClockGaugeTsgcFMXClockGaugeTsgcWinFormsClockGauge
罗盘TsgcVCLCompassGaugeTsgcFMXCompassGaugeTsgcWpfCompassGauge
报警指示盘TsgcVCLAnnunciatorGaugeTsgcFMXAnnunciatorGaugeTsgcAvaloniaAnnunciatorGauge

.NET 列为每个仪表列出一个示例,每个仪表都有 TsgcWinForms、TsgcWpf 和 TsgcAvalonia 版本。所有仪表共用基类 TsgcCustomGauge,包含 Scales、Pointers、Thresholds 和 Ranges 集合。框架无关的模型(TsgcRadialGauge、TsgcLinearGauge 等)无需窗口即可渲染。

目标组件平台
Delphi 7 到 13,VCLTsgcVCL 仪表Win32,自 XE2 起支持 Win64
Delphi XE6 到 13,FireMonkeyTsgcFMX 仪表Windows、macOS、iOS 和 Android
C++ Builder 2007 到 13TsgcVCL 仪表生成的 .hpp 头文件和静态库
Delphi 10.2 到 13,框架无关仪表模型和无界面 PNG 与 SVG 输出Linux64(无 Linux 控件)
.NET Framework 4.7.2、.NET 8、9 和 10WinForms、WPF 和 Avalonia 仪表Windows 桌面、Avalonia 目标平台、无界面渲染

常见问题解答

可以。在接收数据的线程中设置 Value。阈值会自动评估,OnThreshold 始终在主线程中触发,因此处理程序无需额外同步即可更新控件。当 sgcGaugesWS 桥接通过 MQTT、WebSocket 或 SSE 为指针提供数据时,也是这样工作的。

径向、线性、7 段数字、LED、LED 条和进度环仪表,支持区间、阈值、动画、主题和无界面输出。VU 表、时钟、罗盘、报警指示盘、额外的刻度和指针、14 段和点阵数字以及桥接属于注册版。请参阅版本。

可以,需要注册版和 sgcWebSockets。放置一个 TsgcGaugeFeedSource_MQTT,关联您的 MQTT 客户端,并为每个仪表添加一个带 Topic 和 JSON ValuePath 的绑定。支持带 + 和 # 的主题过滤器,FilterPath 可从共享主题中挑出某个设备。

FireMonkey 控件自 Delphi XE6 起可用,GalleryFMX 演示可在 Windows 和 Android 上运行。在 Linux64 上,sgcGauges 仅支持无界面:自 Delphi 10.2 起,模型可编译并渲染 PNG 和 SVG,但没有 Linux 控件。

可以。每个刻度都有自己的 Minimum、Maximum、MajorInterval 和次刻度,以及任意数量的彩色区间,可设置起点、终点、颜色、粗细和标题。径向仪表还可选择圆弧的起始角度和扫过角度。

可以。SaveToPNG 和 SaveToSVG 适用于每个控件和每个模型,无需窗口,因此服务或 Linux64 服务器可以把当前读数放入 PDF 或邮件。Gallery 演示还可导出 2 倍 PNG。

数字仪表根据刻度确定自身大小:当 Digits 为 0 时,它会预留刻度最大值所需的位数,而默认刻度范围是 0 到 100。请把 Scales[0].Maximum 设为您预期的最大值,或显式设置 Digits。

sgcGauges 帮助

3,000+开发者
20+年
761+组件
30+API 集成
5平台
30 天退款保证不满意?可在购买后 30 天内申请全额退款。 查看退款政策

立即试用 sgcGauges

sgcUI 试用版包含 sgcGauges 和所有其他 sgcUI 产品。