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

sgcDiagram,适用于 Delphi、C++ Builder & .NET 的流程图与图表编辑器

在您自己的应用程序中为用户提供真正的图表编辑器。他们从面板拖出形状,把形状连接起来,就地输入文字,并可撤销任何操作。您只需一次调用就能排列整个图表,把它保存为 JSON,并导出为 PNG 或 SVG,即使在没有窗口的服务器上也可以。

VCL、FireMonkey、WinForms、WPF、Avalonia14 种形状和 3 种连接线类型无界面 PNG 和 SVG,包括 Linux64包含在 sgcUI Enterprise 中
FlowchartEditor 演示:形状面板中的流程图和基本形状,旁边是订单流程图

图表编辑器所需的一切

十三项功能,把真正的图表编辑器放进您的应用程序。

用户用得上的编辑器

用户对图表工具的所有期望,由您放到窗体上的两个组件提供。

用户用得上的编辑器

让用户绘制自己的图表

业务应用程序经常需要由用户自己维护的图表:审批流程、流程图、生产线布局。与其让用户去使用单独的绘图工具,不如把编辑器放进您自己的窗体。放置一个 TsgcVCLDiagramPalette 和一个 TsgcVCLDiagramView,通过面板的 View 属性把它们关联起来,用户就可以把形状拖到画布上,从端口绘制连接线,并就地输入节点文字。FireMonkey、WinForms、WPF 和 Avalonia 也有同样的一对组件。

  • TsgcVCLDiagramPalette 可通过拖动放置形状,也可以先单击项目再单击视图
  • 双击、F2 或直接输入即可就地编辑节点文字
  • Tool 在 dgtSelect、dgtPan、dgtConnector 和 dgtShape 之间切换
  • 用 Shift、Ctrl 或框选进行选择,然后移动、调整大小、旋转、分组、复制和粘贴
  • 支持阿拉伯语和希伯来语的从右到左:调色板、标尺、缩略图和工具栏已镜像,而画布保持您的几何形状,自动布局的 dglRightToLeft 方向会让图表从右侧开始排列
阅读帮助主题
适用于流程图、组织结构图和草图的 14 种形状

用户用得上的编辑器

适用于流程图、组织结构图和草图的 14 种形状

商业软件中的大多数图表只用一小套熟悉的图形,sgcDiagram 已经为您准备好。您会得到流程图符号:处理、判断、终止、数据、文档、预定义处理和连接圆,还有基本的矩形、圆角矩形和椭圆、自由文本、图像、可容纳其他节点的容器,以及由 SVG 路径数据生成的自定义轮廓。每种形状都知道自己的轮廓、文字区域、默认端口和主题颜色,因此判断形状无需任何代码就会把端口放在各个角上。用 Left、Top、Width 和 Height 放置节点,用 Angle 旋转节点。

  • Shape 接受 TsgcDiagramShape 值,例如 dgsDecision
  • dgsPath 根据 SVG 路径语法的 PathData 绘制任意轮廓
  • dgsContainer 通过 ContainerId 容纳子节点并带着它们一起移动
  • TextAlign 和 TextVAlign 决定自动换行的文字在形状中的位置
阅读帮助主题
直线、正交和曲线连接线

用户用得上的编辑器

直线、正交和曲线连接线

图表的可读性取决于它的线条。每条连接线都可选择类型:直线或经过路点的折线、由水平和垂直线段组成的正交路径,或用于节点图的平滑曲线。AddConnector 会按文档的 DefaultConnectorKind 创建连接线。两端的箭头、虚线或点线,以及任意数量的标签(可沿线放置,用户也可拖动),能把一条普通的线变成清晰的“是”或“否”分支。在注册版中,正交路由器会绕开节点并把平行线段分开。

  • Kind 为 dgcStraight、dgcOrthogonal 或 dgcCurved
  • StartArrow 和 EndArrow 接受 TsgcDiagramArrow,例如 dgaTriangle 或 dgaDiamond
  • Labels 保存任意数量的标签,用 Position 和 Offset 定位
  • Waypoints 让直线和曲线连接线在您想要的位置转折

社区版把正交连接线路由为简单的折角,不会绕开节点。

阅读帮助主题

用户用得上的编辑器

端口和粘附让连线始终连接

最让用户沮丧的,莫过于移动一个方框后图表就散架了。每条连接线的端点都是粘附的:粘附到命名端口、节点的轮廓,或者自由地停在某个点上。移动、调整大小或旋转节点时,它的连接线会跟随并重新路由。形状在各边中点自带端口,您也可以添加自己的端口,指定位置、边、流向和标题,节点编辑器中带类型的输入和输出就是这样构建的。ShowPorts 决定端口是始终显示、悬停时显示还是从不显示。

  • TsgcDiagramPort 具有 Id、X、Y、Side、Flow 和 Caption
  • Flow 用 dgfIn 把端口设为输入,用 dgfOut 设为输出
  • SourcePortId 和 TargetPortId 把连接线端点粘附到端口
  • ShowPorts 默认为 dgvHover,也可以是 dgvAlways 和 dgvNever
阅读帮助主题

自动生成的图表

让代码完成整理工作:排列图、根据表格构建图表,或用规则连接模块。

自动生成的图表 仅限注册版

一次调用排列整个图表

由代码生成或由用户快速绘制的图表很少整齐。TsgcDiagramLayeredLayout 采用 Sugiyama 方法把有向图按层排列,因此流程图、业务流程图、状态机和依赖图会从左到右或从上到下排列,连接线交叉很少,长连接线保持笔直。TsgcDiagramTreeLayout 把父节点居中放在其子节点之上,适用于组织结构图和分类树。两者都作为一个撤销步骤运行,因此用户可以尝试一种布局,再用 Ctrl+Z 撤回。SelectionOnly 只排列选中的部分。

  • Direction 为 dglTopToBottom、dglLeftToRight、dglBottomToTop 或 dglRightToLeft
  • LayerSpacing 和 NodeSpacing 设置间距,默认分别为 60 和 30 个世界单位
  • Execute 之后,Crossings 报告连接线交叉数
  • TreeStyle 设为 dgoCompactLeaves 时,会把一位经理的下属堆叠在同一列

在社区版中,节点保持在用户或代码放置的位置。

阅读帮助主题
直接由表格生成组织结构图

自动生成的图表 仅限注册版

直接由表格生成组织结构图

您的员工、成本中心或产品类别本来就保存在带有键和父级列的表中。TsgcDiagramDataBinding 把这些行变成图表:每一行成为一个节点,每个父键成为一条连接线,再由树形或分层布局排列结果。设置 DataSource、KeyField、ParentField 和 LabelField,把 Target 指向视图,并设置 Active。启用 LiveUpdates 后,提交的编辑、插入或删除会在消息循环的下一轮重建图表,而在行之间移动不会改变选择。

  • DataSource、KeyField、ParentField 和 LabelField 映射各列
  • OnCreateNode 根据行的任意字段设置每个节点的样式
  • dgbAuto 为树选择树形布局,为有多个父节点的图选择分层布局
  • ParentSeparator 在一个字段中列出多个父节点

社区版没有数据绑定:请用 AddNode 和 AddConnector 在代码中构建节点。

阅读帮助主题
用于工作流和管道的节点编辑器

自动生成的图表

用于工作流和管道的节点编辑器

自动化规则、数据管道和物联网流程最容易理解的方式,就是把模块连接在一起。为每个节点在左侧提供带类型的输入端口,在右侧提供输出端口,把 DefaultConnectorKind 切换为曲线连接线,并在 OnDrawNode 中用标题条和彩色端口点自行绘制模块。OnConnecting 让您在建立连接之前拒绝它,因此数字输出永远不会连到文本输入。NodeEditor 演示正是这样构建的,模块在一个撤销步骤中添加,图连同端口和标题一起保存为 JSON。

  • OnConnecting 否决连接,例如类型不同的端口之间的连接
  • OnDrawNode 绘制节点,或在默认绘制的基础上追加内容
  • DefaultConnectorKind 设为 dgcCurved 可得到经典的节点图外观
  • 端口的 Caption 绘制在端口旁边的节点内部
阅读帮助主题

撤销、文件和导出

为用户提供安全的编辑,为应用程序提供可靠的文档格式和图像输出。

撤销一切,吸附到参考线

撤销、文件和导出

撤销一切,吸附到参考线

用户知道可以回退时才敢尝试。文档保留撤销栈和重做栈,用户在视图中的每个操作就是一步。在代码中,BeginTransaction 和 EndTransaction 把任意数量的更改归为一个命名步骤,Rollback 则丢弃它们。复制和粘贴在应用程序内部有效,重复粘贴会有偏移,不会叠在一起。节点移动或调整大小时,它的边缘和中心线会吸附到网格和周围的节点,并显示参考线指示对齐。

  • BeginTransaction、EndTransaction 和 Rollback 把代码中所做的更改归为一组
  • UndoLimit 默认保留 100 步,UndoCaption 给下一次撤销命名
  • 视图上的 CopyToClipboard、CutToClipboard 和 PasteFromClipboard
  • SnapToGrid、SnapToGuides 和 GridSize 控制对齐辅助
阅读帮助主题
保存为 JSON,随处打开

撤销、文件和导出

保存为 JSON,随处打开

图表是您的应用程序存储、发送和做版本管理的数据。文档可以按字符串、文件或流保存为 JSON,格式在所有平台和所有版本中都相同:由 Delphi 桌面应用程序保存的文件,可以在 C++ Builder 工具、.NET 服务或社区版构建中打开。输出是规范化的,键顺序固定,默认值省略,因此同一个图表总是得到同样的文本,在源代码管理中比较起来很干净。图像以 PNG 数据的形式包含在文件中。

  • SaveToFile 和 LoadFromFile,SaveToStream 和 LoadFromStream
  • SaveToJSON 和 LoadFromJSON,适用于数据库字段或网络请求
  • 视图在窗体文件中以 DiagramJSON 的形式保存其图表
  • 文件中保存的连接线路由在加载时会保留
阅读帮助主题
导出 PNG 和 SVG,即使在服务器上

撤销、文件和导出

导出 PNG 和 SVG,即使在服务器上

图表最终会出现在报告、电子邮件、维基页面和幻灯片中。视图把所显示的内容保存为 PNG 或 SVG,可设置缩放系数以获得清晰的图像,并应用其自定义绘制和主题,因此深色图表导出的也是深色。TsgcDiagramRenderer 无需任何视图就能做同样的事:控制台程序、Windows 服务或 Linux64 守护进程可以构建图表、完成布局并写出文件。Headless 演示正是用一张支持工单流程图做到这一点,用 Delphi 13 构建时,它在 Win32、Win64 和 Linux64 上写出相同的字节。

  • 视图上的 SaveToPNG 和 SaveToSVG,带有每世界单位像素数的缩放
  • TsgcDiagramRenderer 上的 SaveToPNGFile 和 SaveToSVGFile,无需窗口
  • RenderTo 把文档的一部分绘制到任意 sgcUICore 画布上
  • PDF 导出和打印不属于 1.0 版
阅读帮助主题

查看与样式

让不应编辑图表的人也能看到它,并保持您应用程序的外观。

用于仪表板和门户的只读查看器

查看与样式

用于仪表板和门户的只读查看器

并非每个用户都应该编辑流程图。设置 ReadOnly 后,同一个视图就变成了查看器:用户可以选择,用 Ctrl 和滚轮缩放,用鼠标中键或空格键平移,但不会移动、连接或删除任何内容,面板也无法放置形状。指针在项目上方变成手形,OnItemClick 报告点击的是哪一项,因此单击节点可以打开对应的记录。ZoomToFit 可在代码中让整个图表适应视图。如果只想保护图表的一部分,请改为锁定单个项目或整个图层。

  • ReadOnly 保留选择、缩放和平移,并阻止所有编辑
  • OnItemClick、OnItemDblClick 和 OnHover 报告指针下方的项目
  • ZoomToFit、ZoomToSelection 和 CenterOn 在代码中移动视图
  • Locked 保护单个项目或整个图层
阅读帮助主题

查看与样式

浅色、深色和您自己的绘制

图表应该看起来是您应用程序的一部分,而不是粘贴进来的图片。视图、面板和导出都使用 sgcUICore 主题,因此一个 Theme 属性即可在浅色和深色之间切换,并与同一窗体上的 sgcUI 网格、图表和仪表板保持一致。每个节点和连接线都有自己的 Style,包含填充、描边、虚线、圆角半径和文字设置,NodeStyle 和 ConnectorStyle 是新项目的模板。如需完全控制,OnDrawNode 让您自行绘制节点,FontFile 则用您选择的 TrueType 字体绘制文字。

  • Theme 接受 utDefault(跟随应用程序主题)、utLight、utDark 或 utCustom
  • Style 设置 Fill、Stroke、StrokeWidth、Dash 和 CornerRadius
  • NodeStyle 和 ConnectorStyle 为每个新项目设置样式
  • sgcUIARGB 构建颜色,例如企业青色
阅读帮助主题

无障碍

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

无障碍

用键盘绘制图表并向 UI Automation 公开

sgcDiagram 将带文字的节点、节点之间的连接线以及形状面板向 Microsoft UI Automation 公开,图表还会用写入无障碍 PDF 的同一段替代文本来描述自己。

  • 方向键移动所选内容,Alt+方向键将其微调一个像素,Alt+Shift+方向键调整所选节点的大小
  • Ctrl+K 从所选节点开始一条连接线:Tab 和 Shift+Tab 选择目标,Enter 连接,Esc 取消
  • 在面板中,方向键、Home 和 End 在形状之间移动,Enter 或 Space 添加焦点形状
  • Ctrl+Tab 和 Ctrl+Shift+Tab 把焦点移到下一个或上一个控件,在 Windows 高对比度主题下,图表使用系统颜色绘制

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

阅读帮助主题

查看 sgcDiagram 的实际效果

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

谁在用 sgcDiagram 构建应用

工作流和审批设计器

采购审批、工单升级和入职清单经常变化,而负责这些流程的人并不是程序员。嵌入编辑器后,流程负责人可以绘制带有判断和“是”或“否”标签的流程,把它作为 JSON 保存在您的数据库中,您的应用程序读取同一份文档来驱动真实流程。ReadOnly 把已保存的流程变成供其他所有人查看的流程图。可以从 FlowchartEditor 开始。

  • 面板和就地编辑
  • 连接线标签
  • JSON 文件
运行 FlowchartEditor 演示

来自人事数据的组织结构图

人事和 ERP 系统本来就知道谁向谁汇报。用 TsgcDiagramDataBinding 绑定员工表,让紧凑叶节点的树形布局排列经理和员工,并在 OnCreateNode 中按部门为每个方框着色。当人事部门在网格中提交更改时,图表会自动重建,单击节点会选中对应的员工。OrgChart 演示就以这种方式绑定了 60 名员工。

  • 数据绑定
  • 树形布局
  • 查看器模式
运行 OrgChart 演示

用于管道和自动化的节点编辑器

让客户构建数据管道、自动化规则或物联网流程的产品,需要一块把模块连接在一起的画布。带类型的端口、曲线连接线和 OnConnecting 为您提供规则,OnDrawNode 让模块拥有您自己的外观,图则保存为您的引擎可以执行的 JSON。由于文档不依赖用户界面,服务器也可以加载并检查同一个图。

  • 带类型的端口
  • 连接规则
  • 自定义绘制
运行 NodeEditor 演示

几行代码实现订单流程

Delphi、C++ Builder 和 C# 中的同一套 API:添加面板和视图,在一个撤销步骤中创建形状和连接线,然后排列它们。布局调用需要注册版或试用版。

uses
  Classes, SysUtils, Forms, Controls,
  sgcUICore_Theme, sgcDiagram_Types, sgcDiagram_Model, sgcDiagram_Layout,
  sgcDiagram_VCL;

type
  TFormOrders = class(TForm)
  private
    FPalette: TsgcVCLDiagramPalette;
    FView: TsgcVCLDiagramView;
    procedure DoSelectionChange(Sender: TObject);
  public
    constructor CreateNew(aOwner: TComponent; Dummy: Integer = 0); override;
    procedure BuildFlow;
  end;

constructor TFormOrders.CreateNew(aOwner: TComponent; Dummy: Integer);
begin
  inherited;
  FPalette := TsgcVCLDiagramPalette.Create(Self);
  FPalette.Parent := Self;
  FPalette.Align := alLeft;
  FView := TsgcVCLDiagramView.Create(Self);
  FView.Parent := Self;
  FView.Align := alClient;
  FView.ShowPorts := dgvHover;
  FView.Theme := utDark;
  FView.OnSelectionChange := DoSelectionChange;
  FPalette.View := FView;
end;

procedure TFormOrders.DoSelectionChange(Sender: TObject);
begin
  Caption := Format('Orders, %d selected', [FView.Diagram.Selection.Count]);
end;

procedure TFormOrders.BuildFlow;
var
  oDoc: TsgcDiagramDocument;
  oStart, oStock, oPay, oShip: TsgcDiagramNode;
  oLayout: TsgcDiagramLayeredLayout;
begin
  oDoc := FView.Diagram;
  oDoc.BeginTransaction('Order flow');
  try
    oStart := oDoc.AddNode(dgsTerminator, 0, 0, 140, 50, 'Order received');
    oStock := oDoc.AddNode(dgsDecision, 0, 0, 160, 90, 'In stock?');
    oPay := oDoc.AddNode(dgsProcess, 0, 0, 140, 60, 'Charge card');
    oShip := oDoc.AddNode(dgsPredefinedProcess, 0, 0, 140, 60, 'Ship order');
    oPay.Style.Fill := sgcUIARGB($FF, $00, $96, $88);
    oDoc.AddConnector(oStart, oStock);
    oDoc.AddConnector(oStock, oPay).Labels.Add.Text := 'Yes';
    oDoc.AddConnector(oPay, oShip);
    oDoc.AddConnector(oStock, oDoc.AddNode(dgsDocument, 0, 0, 140, 60,
      'Backorder note')).Labels.Add.Text := 'No';
  finally
    oDoc.EndTransaction;
  end;
  // arrange left to right, one undo step
  oLayout := TsgcDiagramLayeredLayout.Create(oDoc);
  try
    oLayout.Direction := dglLeftToRight;
    oLayout.Execute;
  finally
    oLayout.Free;
  end;
  FView.ZoomToFit;
  FView.SaveToPNG(ExtractFilePath(ParamStr(0)) + 'orders.png', 2);
end;
#include <vcl.h>
#include "sgcUICore_Theme.hpp"
#include "sgcDiagram_Types.hpp"
#include "sgcDiagram_Model.hpp"
#include "sgcDiagram_Layout.hpp"
#include "sgcDiagram_VCL.hpp"

void BuildOrderFlow(TForm *Form)
{
  TsgcVCLDiagramPalette *Palette = new TsgcVCLDiagramPalette(Form);
  Palette->Parent = Form;
  Palette->Align = alLeft;
  TsgcVCLDiagramView *View = new TsgcVCLDiagramView(Form);
  View->Parent = Form;
  View->Align = alClient;
  View->ShowPorts = dgvHover;
  View->Theme = utDark;
  Palette->View = View;

  TsgcDiagramDocument *Doc = View->Diagram;
  Doc->BeginTransaction("Order flow");
  try
  {
    TsgcDiagramNode *Start = Doc->AddNode(dgsTerminator, 0, 0, 140, 50, "Order received");
    TsgcDiagramNode *Stock = Doc->AddNode(dgsDecision, 0, 0, 160, 90, "In stock?");
    TsgcDiagramNode *Pay = Doc->AddNode(dgsProcess, 0, 0, 140, 60, "Charge card");
    TsgcDiagramNode *Ship = Doc->AddNode(dgsPredefinedProcess, 0, 0, 140, 60, "Ship order");
    TsgcDiagramNode *Note = Doc->AddNode(dgsDocument, 0, 0, 140, 60, "Backorder note");
    Pay->Style->Fill = sgcUIARGB(0xFF, 0x00, 0x96, 0x88);
    Doc->AddConnector(Start, Stock, "", "");
    Doc->AddConnector(Stock, Pay, "", "")->Labels->Add()->Text = "Yes";
    Doc->AddConnector(Pay, Ship, "", "");
    Doc->AddConnector(Stock, Note, "", "")->Labels->Add()->Text = "No";
  }
  __finally
  {
    Doc->EndTransaction();
  }
  // arrange left to right, one undo step
  TsgcDiagramLayeredLayout *Layout = new TsgcDiagramLayeredLayout(Doc);
  try
  {
    Layout->Direction = dglLeftToRight;
    Layout->Execute();
  }
  __finally
  {
    delete Layout;
  }
  View->ZoomToFit();
  View->SaveToPNG(ExtractFilePath(ParamStr(0)) + "orders.png", 2);
}
using System;
using System.IO;
using System.Windows.Forms;
using esegece.sgcDiagram;
using esegece.sgcUICore;

public class OrdersForm : Form
{
    readonly TsgcWinFormsDiagramView View;

    public OrdersForm()
    {
        View = new TsgcWinFormsDiagramView { Dock = DockStyle.Fill };
        View.ShowPorts = TsgcDiagramShowPorts.dgvHover;
        View.Theme = TsgcUITheme.utDark;
        View.OnSelectionChange += Sender =>
            Text = "Orders, " + View.Diagram.Selection.Count + " selected";
        Controls.Add(View);
        Controls.Add(new TsgcWinFormsDiagramPalette { Dock = DockStyle.Left, View = View });
        BuildFlow();
    }

    void BuildFlow()
    {
        TsgcDiagramDocument oDoc = View.Diagram;
        oDoc.BeginTransaction("Order flow");
        try
        {
            TsgcDiagramNode oStart = oDoc.AddNode(TsgcDiagramShape.dgsTerminator, 0, 0, 140, 50, "Order received");
            TsgcDiagramNode oStock = oDoc.AddNode(TsgcDiagramShape.dgsDecision, 0, 0, 160, 90, "In stock?");
            TsgcDiagramNode oPay = oDoc.AddNode(TsgcDiagramShape.dgsProcess, 0, 0, 140, 60, "Charge card");
            TsgcDiagramNode oShip = oDoc.AddNode(TsgcDiagramShape.dgsPredefinedProcess, 0, 0, 140, 60, "Ship order");
            TsgcDiagramNode oNote = oDoc.AddNode(TsgcDiagramShape.dgsDocument, 0, 0, 140, 60, "Backorder note");
            oPay.Style.Fill = sgcUICore_Theme.sgcUIARGB(0xFF, 0x00, 0x96, 0x88);
            oDoc.AddConnector(oStart, oStock);
            oDoc.AddConnector(oStock, oPay).Labels.Add().Text = "Yes";
            oDoc.AddConnector(oPay, oShip);
            oDoc.AddConnector(oStock, oNote).Labels.Add().Text = "No";
        }
        finally
        {
            oDoc.EndTransaction();
        }
        // arrange left to right, one undo step
        TsgcDiagramLayeredLayout oLayout = new TsgcDiagramLayeredLayout(oDoc);
        oLayout.Direction = TsgcDiagramDirection.dglLeftToRight;
        oLayout.Execute();
        View.ZoomToFit();
        View.SaveToPNG(Path.Combine(AppContext.BaseDirectory, "orders.png"), 2);
    }
}
dotnet add package esegece.sgcDiagram.WinForms

运行 sgcDiagram 演示

每个演示都有同名的 Delphi 和 C++ Builder 版本。.NET 版本包含 FlowchartEditor(WinForms)、FlowchartWpf、FlowchartAvalonia、NodeEditor、OrgChart 和 ConsoleRender。

FlowchartEditor

仅限注册版 FlowchartEditor

在代码中构建的订单流程:拖动形状,从端口绘制连接线,切换连接线类型,撤销,运行分层布局,打开和保存 JSON,导出 PNG 和 SVG,切换主题和只读模式。

OrgChart

仅限注册版 OrgChart

TDBGrid 中的 60 名员工,绑定到只读的图表视图。提交一次编辑,图表就会重建,含紧凑叶节点、部门颜色、单击选择以及 PNG 和 SVG 导出。

NodeEditor

NodeEditor

带类型的输入和输出端口,OnConnecting 中的连接规则,曲线连接线,以及在 OnDrawNode 中绘制的模块,连同端口和标题一起保存为 JSON。

仅限注册版 FlowchartEditorFMX

基于 FireMonkey 视图和面板的流程图编辑器,适用于 Windows 和 Android,点按放置形状,双指缩放。

Headless

仅限注册版 Headless

不含 VCL 或 FireMonkey 单元的控制台程序,构建流程图,用分层布局排列,并写出 PNG、SVG 和 JSON,也适用于 Linux64。

预编译演示

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

下载 sgcUI_bin.zip →

sgcDiagram 包含在哪些版本中

sgcDiagram 包含在 sgcUI Enterprise 中,也可单独购买。sgcDiagram 同样包含在 All-Access 中。

sgcDiagram 单品包

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

购买 sgcDiagram → 查看价格 →

sgcUI Enterprise

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

查看 Enterprise →

免费社区版(NuGet 上的 esegece.sgcDiagram.Community)不含自动布局、绕开障碍的路由、数据绑定和多图层。sgcDiagram 没有 sgcWebSockets 桥接。

功能社区版(免费)注册版
面板、视图和就地编辑✓✓
14 种形状、端口、分组和容器✓✓
直线、正交和曲线连接线✓✓
撤销、剪贴板、吸附和参考线✓✓
JSON 文件、PNG 和 SVG 导出✓✓
浅色和深色主题、查看器模式✓✓
分层和树形布局−✓
绕开障碍的正交路由−✓
数据绑定−✓
多个图层−✓

支持的框架与平台

sgcDiagram 中的组件

视图和面板

VCL 使用 TsgcVCLDiagramView 和 TsgcVCLDiagramPalette,FireMonkey 使用 TsgcFMXDiagramView 和 TsgcFMXDiagramPalette。

模型和控制器

TsgcDiagramDocument、TsgcDiagramNode、TsgcDiagramConnector 和 TsgcDiagramController,不依赖用户界面。

渲染器和布局

TsgcDiagramRenderer 无需窗口即可写出 PNG 和 SVG。TsgcDiagramLayeredLayout 和 TsgcDiagramTreeLayout 负责排列图表。注册版

.NET 视图

TsgcWinFormsDiagramView、TsgcWpfDiagramView 和 TsgcAvaloniaDiagramView,各自带有面板,位于命名空间 esegece.sgcDiagram。

目标组件平台
Delphi 7 至 13,VCLTsgcVCLDiagramView, TsgcVCLDiagramPaletteWin32 和 Win64
Delphi XE6 至 13,FireMonkeyTsgcFMXDiagramView, TsgcFMXDiagramPaletteWindows、macOS、iOS 和 Android
C++ Builder 2007 至 13相同的组件生成的 .hpp 头文件和静态库
Delphi 10.2 至 13,无界面文档、JSON、路由、布局、PNG 和 SVG 渲染器Linux64,例如在服务器上渲染图表
.NET Framework 4.7.2、.NET 8、9 和 10WinForms、WPF 和 Avalonia 视图Windows、Linux 和 macOS,无界面 JSON、PNG 和 SVG

常见问题解答

可以,视图和面板正是为此而设。用户可以拖动形状,从端口绘制连接线,就地编辑文字,分组,复制和粘贴,并对每个操作进行撤销或重做。当用户只应查看时请设置 ReadOnly,或锁定单个项目和图层来保护图表的一部分,其余部分仍可编辑。

可以,有两种方式。在代码中,在 BeginTransaction 和 EndTransaction 之间使用 AddNode 和 AddConnector 可以把任意图表作为一个撤销步骤构建出来。在注册版中,TsgcDiagramDataBinding 根据带有键和父级列的数据集构建图表,并在数据变化时重建。在 .NET 中,它读取 DataTable。

两种,在注册版和试用版中提供。TsgcDiagramLayeredLayout 把流程图、状态机和依赖图等有向图按层排列,交叉很少。TsgcDiagramTreeLayout 排列组织结构图和分类树等层次结构,并带有紧凑叶节点样式。两者都支持四个方向,并作为一个撤销步骤运行。

1.0 版不支持。图表可以导出为 PNG 和 SVG,可从视图导出,也可以用 TsgcDiagramRenderer 在没有窗口的情况下导出。SVG 缩放无损,因此适合印刷和文档,以 2 倍缩放保存的 PNG 在幻灯片上也保持清晰。打印同样不属于 1.0 版。

四项高级功能:自动布局、绕开障碍的正交路由(社区版绘制简单折角)、数据绑定,以及第一个图层以外的图层。其他一切都有:所有形状、三种连接线类型、端口、容器、撤销、剪贴板、JSON、PNG 和 SVG、主题、吸附和参考线。注册版和试用版拥有全部功能。

可以。JSON 格式在所有平台和所有版本中都相同,因此由 Delphi 或 C++ Builder 应用程序保存的图表可以在 WinForms、WPF 或 Avalonia 应用程序中打开,反之亦然。由注册版保存的文件也可以在社区版构建中打开,并保留其图层名称。

可以。FireMonkey 视图和面板自 Delphi XE6 起可在 Windows、macOS、iOS 和 Android 上运行,FlowchartEditorFMX 演示展示了在 Android 上的触摸编辑。在 .NET 中,Avalonia 视图可在 Windows、Linux 和 macOS 上运行。

sgcDiagram 帮助

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

立即试用 sgcDiagram

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