项目与工程软件
项目办公室和工程公司
把项目规划为工作分解,链接任务,让引擎按公司日历排程,同时关键路径显示决定完成日期的因素。在批准时保存基线,延期情况就会显示在每个条形下方。计划来自 Microsoft Project,也以 XML 形式返回给它,同样的任务还会显示在团队的看板上。
- 带依赖关系的甘特图
- 自动排程和关键路径
- 基线
- MS Project XML
同一份计划,三种视图。为团队显示为日历,为项目经理显示为甘特图,为执行任务的人显示为看板,全部绑定到同一个数据对象。把卡片拖到“已完成”,甘特图条形和日历颜色会立即随之更新。
十三项功能,服务于团队、项目经理和执行任务的人。标有“注册版”的功能不包含在免费的 .NET 社区版中。
每个视图都读写同一个 TsgcPlannerData。
一个数据模型
日历、项目图表和任务看板不应该互相矛盾。sgcPlanner 可以把任意数量的视图绑定到一个数据对象,因此在看板上拖到“已完成”的卡片会立即在甘特图和日程表中以“已完成”颜色显示,在甘特图中移动的条形会移动日历中的事件,在日程表中创建的事件会变成一张卡片。每次编辑只是一次更新,所以每次放置后各视图只重绘一次。
TsgcPlannerData 保存计划,每个视图通过 Data 指向它BarColorMode 设为 pbcStatus 时,甘特图条形按状态着色,与看板一致SyncSelection 通过 SelectedId 共享选中的项目MirrorTimeline 还能让甘特图时间轴从右侧开始
一个数据模型
您的计划本来就保存在数据库里,sgcPlanner 可以直接对接。数据集源把数据对象绑定到任意 TDataSet,例如 FireDAC、TClientDataSet 或 dbExpress,加载项目、资源和依赖关系,跟随数据集的变化,并把在视图中所做的编辑写回。JSON 持久化在所有版本和所有平台上都可用,无界面渲染器可在服务器上把任意视图绘制为 PNG 或 SVG,包括 Linux64。
TsgcPlannerSource_DataSet 通过 ItemFields 映射您的字段名SaveToFile 和 LoadFromFile 写入和读取文档化的 JSON 格式TsgcPlannerRenderer 无需窗口即可绘制日程表、甘特图或看板一个数据模型
一次错误的拖放不应该让规划人员白费一下午。数据对象会记录对项目、资源、状态或依赖关系的每一次添加、删除、属性更改和移动,无论由谁发起:视图中的拖动、就地编辑、智能粘贴、排程引擎,还是您自己的代码。绑定到该数据的所有视图共享同一份历史记录,一组更改(例如一次完整的重新排程)可以一步撤销。
Data.Undo 提供 Undo、Redo、CanUndo 和 CanRedoBeginGroup 和 EndGroup 把多项更改合并为一步UndoCaption 和 RedoCaption 为菜单项或提示命名下一步操作Limit 限制历史记录的数量,OnChange 用于更新按钮一个数据模型
为了重命名一个项目而打开对话框会拖慢用户。使用就地编辑,按 F2 即可在所选项目上方的小编辑框中修改其标题,在日程表的空白处拖动创建约会后会立即打开标题编辑框,用户拖动后即可输入。日程表、甘特图和看板的工作方式完全相同,每次编辑都会被撤销历史记录下来。
InplaceEdit 用于启用它,默认关闭BeginEdit 可从您自己的菜单项打开编辑框IsEditing 告诉窗体快捷键(例如 Ctrl+Z)在用户输入时等待TsgcVCLScheduler 和 TsgcFMXScheduler,以及 .NET 中相同的视图。
日程表:会议、人员和会议室
用户早已熟悉日历应有的行为,因此日程表提供他们期望的视图:日、工作周、周、月、年、议程和资源时间线。年视图显示十二个小月历,每一天按繁忙程度着色,双击即可打开当天。可以把人员、会议室或机器添加为资源,并为每个资源设置颜色,再按资源对日或周分组,这样诊所可以按列查看每位医生,车间可以查看每个工位。工作时间、可见的日范围和导航都是属性和一行调用。
View:psvDay、psvWorkWeek、psvWeek、psvMonth、psvYear、psvAgenda、psvTimelineAddResource 可指定颜色,Options.GroupByResource 让每个资源独占一列DayStartHour、DayEndHour 和 SlotMinutes 决定时间网格GoToday、Prior、Next 和 ScrollToTime 用于浏览资源时间线视图为注册版功能,在社区版中该视图会显示提示。
阅读帮助主题日程表:会议、人员和会议室
预订会议应该像画出来一样简单。在空闲时段上拖动,日程表就会创建一个事件,您的 OnItemCreate 处理程序可以设置标题或拒绝该时段。把事件拖到另一个时间、日期或资源列,或拖动边缘改变时长,每次移动都会对齐到时段大小。其他视图中的手势相同:甘特图中的条形可以移动和调整大小,看板中的卡片可以在列之间移动。
OnItemCreate 为新事件命名或拒绝新事件Options.SlotMinutesOnCardMoving 可以否决看板上的移动
日程表:会议、人员和会议室 仅限注册版
每周站会或每月评审只应输入一次。为项目设置 iCalendar RRULE 后,日程表会在任何视图和任何时间段中显示每一次发生。该规则采用 Google 日历、Outlook 和 Apple 日历使用的 RFC 5545 格式,因此重复事件在导入或导出 .ics 文件时会保留其规则,您的代码也可以向数据对象查询任意日期范围内的发生情况,例如检查会议室是否冲突。
RecurrenceRule := 'FREQ=WEEKLY;BYDAY=TU' 每周二重复GetOccurrences 返回任意时间段内的发生情况社区版只显示一次重复项目,并保留其规则。
阅读帮助主题
日程表:会议、人员和会议室 仅限注册版
您的用户的日程早已存在于其他日历中。TsgcPlannerICalendar 可导入和导出 .ics 文件,这是 Google 日历、Outlook 和 Apple 日历使用的格式。借助 sgcPlannerWS 桥接,订阅可以跟随任何只读的 .ics URL,例如公共假日列表或共享日历,三个同步组件则让计划与一个 Google 日历、一个通过 Microsoft Graph 访问的 Microsoft 365 或 Outlook.com 的 Outlook 日历,或一个 Nextcloud、iCloud、Fastmail、Radicale 或任何其他 CalDAV 服务器的 CalDAV 日历双向保持一致。每个组件只读取上次同步以来的更改,并有清晰的冲突规则。
TsgcPlannerICalendar,使用 ImportFromFile 和 ExportToFileTsgcPlannerICalSubscription,使用 URL 和 RefreshInterval,采用 ETag 和 If-Modified-SinceTsgcPlannerGoogleSync,使用 CalendarId、Direction 和 AutoSyncIntervalTsgcPlannerGraphSync,使用 CalendarId 和 OAuth2 AccessToken,采用 Graph 增量查询TsgcPlannerCalDAVSync,使用 CalendarURL、UserName 和 Password,采用同步令牌和 ETagOnConflict 可以另作决定注册版。这些桥接组件还需要注册版 sgcWebSockets;在 .NET 中它们位于 esegece.sgcPlanner.sgcWebSockets。
阅读帮助主题日程表:会议、人员和会议室
没有人记得的会议,就没有人会参加。为项目设置开始前若干分钟的提醒后,TsgcPlannerReminders 会找出到期的提醒,并为每一个触发事件。您的应用程序通过自己的定时器调用它,并决定如何显示提醒,是弹出窗口、通知还是声音。重复项目在每次出现时都会再次提醒,提醒可以稍后提醒或忽略。
ReminderMinutes(项目属性):-1 表示无,0 表示开始时Check 为每个到期的提醒触发 OnReminderSnooze 和 Dismiss 作用于当前或下一次出现日程表:会议、人员和会议室
分布在多个办公室的团队按各自的当地时间预订会议。每个项目都可以带有自己的时区,因此纽约时间 10:00 安排的通话始终是纽约时间 10:00,而视图会在同一个显示时区中展示所有项目。更改显示时区后,项目会移动到新时区中的墙上时间,而浮动项目和全天项目保持原位。
Item.TimeZone 是 Start 和 Finish 的时区,浮动项目为空Data.DisplayTimeZone 是视图显示的时区,为空表示本地时区TsgcVCLGantt 和 TsgcFMXGantt:任务、链接、时间刻度和排程引擎。
甘特图:规划项目并跟踪关键路径 仅限注册版
甘特图显示带有摘要行、里程碑的工作分解树,每个条形上都显示进度,并用箭头绘制任务之间的链接。可以用代码链接任务,也可以从一个条形末端拖到另一个条形,可选择完成到开始、开始到开始、完成到完成或开始到完成,并以工作时间添加延迟。时间刻度可以从 5 分钟缩放到数年。
ParentId 实现工作分解,用 UpdateSummaries 汇总AddDependency 配合 TsgcPlannerDependencyKind:pdkFS、pdkSS、pdkFF、pdkSFLag 按工作日历计算Milestone 和 Progress,TimeScale 用于缩放社区版会存储和保存链接,但不绘制它们,拖动创建链接为注册版功能。
阅读帮助主题
甘特图:规划项目并跟踪关键路径 仅限注册版
一个任务延期时,项目经理现在就需要新的完成日期,而不是花一下午去移动条形。排程引擎会按工作日历把每个任务尽早安排在其前置任务之后,跳过非工作日和假日,计算每个任务的浮动时间,并标出关键路径,即决定项目结束时间的任务链。可以按需运行,也可以在每次编辑后运行,还可以在没有任何视图的数据对象上运行。
Schedule 运行引擎,AutoSchedule 在每次编辑后运行ShowCriticalPath 高亮显示决定完成日期的任务TotalSlack 给出任务可延期的工作分钟数WorkDays、WorkTime 和 Holidays在社区版中,Schedule 会引发 EsgcPlannerError,ShowCriticalPath 不起作用。
阅读帮助主题
甘特图:规划项目并跟踪关键路径 仅限注册版
干系人很少问计划是什么,他们问的是计划偏离了多少。计划获批时保存一个基线,甘特图会在每个当前条形下方绘制一条细条,这样无需阅读任何日期就能看出延期的任务。基线日期随项目一起存储,保存在 JSON 中,并可通过 Microsoft Project XML 交换,您的代码也可以读取它们来生成自己的偏差报告。
SetBaseline 一次更新即可复制每个项目的 Start 和 FinishShowBaseline 绘制基线条形BaselineStart 和 BaselineFinish社区版会存储和保存基线日期,但不绘制它们;SetBaseline 会引发 EsgcPlannerError。
阅读帮助主题甘特图:规划项目并跟踪关键路径 仅限注册版
项目办公室会收到来自 Microsoft Project 的计划,也会把计划发回去。TsgcPlannerMSProject 可导入和导出 Microsoft Project XML(MSPDI),这是 Project 打开和保存的 XML 格式,包含任务、链接、日历、资源、分配和基线。导入可以替换计划,也可以合并到计划中,格式不正确的文档会引发带行号的错误。在 Win64 开发测量中,导入 10,000 个任务和 15,000 条链接用时 264 毫秒。资源和分配会随任务一起导入。
ImportFromFile、ImportFromStream 和 ImportFromStringExportToFile 写入 Microsoft Project 可以打开的 XMLImportMode:pmiReplace(默认)或 pmiMergeEsgcPlannerError不包含在社区版中,社区版的文件格式为 JSON。
阅读帮助主题甘特图:规划项目并跟踪关键路径
较长的计划在表头上有更多上下文会更易读,人员超负荷也应该在计划发布之前就能看到。甘特图的时间刻度可以显示第三层,例如月份在周之上、周在天之上。图表底部的直方图窗格会为每个刻度绘制每个资源相对其工作时间的工作量,超过 100% 的部分以关键路径颜色绘制。
TimeScale.TierCount 设为 3 会增加顶层,TopFormat 设置其标签ShowHistogram 和 HistogramHeight 显示该窗格HistogramResourceId 显示一个资源,或以各自的颜色堆叠显示所有资源TsgcVCLKanban 和 TsgcFMXKanban:每个状态一列,与甘特图使用相同的数据。
看板:跟随计划的看板
执行任务的人想要的是看板,而不是图表。看板视图为每个状态构建一列,带有数量徽章和折叠箭头,每张卡片显示标题、标签、资源首字母、截止日期和进度。把卡片放到另一列会改变其在共享数据中的状态和排序,因此甘特图和日程表会立即更新,您的代码也可以在移动发生之前否决任何移动。看板与其他视图一样遵循浅色或深色主题。
ColumnSource 根据状态构建列,也可以使用您自己的 ColumnsCardOptions 选择卡片显示的内容OnCardMoving 接受或拒绝放置
看板:跟随计划的看板 仅限注册版
泳道按资源、父任务或标签把看板分成水平条带,使每个人或每个史诗都有一行,在制品限制则为每一列设置上限,并跨所有泳道计数。在警告模式下,超过限制的列会被标记;在阻止模式下,会突破限制的卡片无法放下。在 Win64 上,布局 8 列 6 条泳道共 5,000 张卡片用时 5 毫秒。
SwimlaneBy:pslResource、pslParent 或 pslTagWIPLimit,0 表示无限制WIPMode:pwmWarn 标记该列,pwmBlock 拒绝放置社区版会忽略 SwimlaneBy 和 WIP 限制;列、列宽和折叠可用。
阅读帮助主题预览显示的内容与打印机和 PDF 得到的完全一致。
打印、预览和 PDF
每种视图的打印方式各不相同。日程把视图的整个范围放在一页上,包括一天中的所有小时。甘特图按视图的时间刻度打印,沿时间轴和行方向分块,每一页都带任务列表和时间标题。看板缩小到页宽,卡片不会被切在两页上。
Print 显示打印对话框或直接打印到默认打印机,ShowPrintPreview 打开带有翻页、缩放、页面设置、打印和 PDF 导出的预览PrintSettings 保存纸张、方向、页边距、缩放以及页眉和页脚文字,打印机、预览和 PDF 都使用它ExportToPDF 写出带真正文本的矢量页面,默认是带标签的 PDF/UA,并附上说明视图、日期范围和页面上项目的替代文本TsgcUIPDFOptions 的 PDFALevel 可为归档加上 PDF/A-2a 或 PDF/A-3a,可单独使用,也可与 PDF/UA 同时使用打印和预览包含在每个版本中,包括免费的社区版,可用于 VCL、FireMonkey、WinForms、WPF 和 Avalonia。在 FireMonkey 中,打印在 Windows 和 macOS 上可用,预览和 PDF 导出则适用于所有平台。PDF 导出需要 sgcUIPDF 桥接和已获许可的 sgcPDF(在 .NET 中为 NuGet 包 esegece.sgcUICore.sgcPDF),因此不包含在社区版中。
面向屏幕阅读器的 UI Automation、键盘和高对比度,无需任何设置。
无障碍
sgcPlanner 将日程表、时间线、甘特图和看板视图向 Microsoft UI Automation 公开:日期、泳道和列、带时间的项目,以及甘特图依赖关系。所有用鼠标拖动完成的操作也都可以用键盘完成。
无障碍功能在每个版本中默认开启,包括免费的社区版,可用于 VCL(Delphi 和 C++Builder 从 Delphi 7 到 Delphi 13 的每个版本)、Windows 上的 FireMonkey,以及 WinForms、WPF 和 Avalonia。在 Delphi 和 C++Builder 中,AccessibleName 和 AccessibleDescription 设置向 UI Automation 公开的名称和说明,在 .NET 中,各框架标准的无障碍名称和帮助文本起同样的作用。请参见无障碍符合性报告。
sgcUI 套件演示中的 sgcPlanner:使用内置模拟数据、可离线运行的完整应用程序。
520 个任务的自动排程:供应商延误 +15 天后,甘特图随之移动。
Altamira PMO →
带汇总行、依赖关系、关键路径和今日线的项目甘特图。
Altamira ERP →
调度时间线:每辆卡车一行,未分配的订单在顶部。
Altamira Fleet →
带 WIP 限制的冲刺看板,与甘特图保持同步。
Altamira PMO →Win64 发布版本在 1920 x 1080 下的开发测量。Win32 大约慢 1.5 到 1.7 倍。
| 测量项 | 结果 | 条件 |
|---|---|---|
| 自动排程 10,000 个任务(1,000 个摘要,3 层),含 15,000 条链接和 30 个假日,包括关键路径 | 11 毫秒 | Win64 发布版本 |
| 滚动含 15,000 条链接的 10,000 个任务时的甘特图帧 | 11 毫秒 | Win64 发布版本,1920 x 1080 |
| 8 列 6 条泳道共 5,000 张卡片的看板布局 | 5 毫秒 | Win64 发布版本 |
| 含 2,000 个定时项目的日程表周视图,布局 | 1 毫秒 | Win64 发布版本 |
| 从 MS Project XML 导入 10,000 个任务和 15,000 条链接 | 264 毫秒 | Win64 发布版本 |
来源:记录这些数据的帮助主题。
项目与工程软件
把项目规划为工作分解,链接任务,让引擎按公司日历排程,同时关键路径显示决定完成日期的因素。在批准时保存基线,延期情况就会显示在每个条形下方。计划来自 Microsoft Project,也以 XML 形式返回给它,同样的任务还会显示在团队的看板上。
预订和预约系统
把每位医生、每个工位或每个会议室显示为单独的一列,让员工通过在空闲时段上拖动来预订。重复预约来自标准规则,公共假日通过 .ics 订阅获取,Google 日历桥接让从业人员自己的日历保持同步。数据集源把每次预订直接写回您的表。员工在每个视图中看到的预订都相同。
任务跟踪和服务台工具
为团队提供一个按人员划分泳道、按列设置在制品限制的看板,并为经理提供同一批工单的甘特图。把卡片移到“已完成”会立即改变条形和日历事件的颜色,因为三个视图共享同一个数据对象。用于夜间邮件的状态图片可以在服务器上无界面渲染。
Delphi、C++ Builder 和 C# 中的同一套 API:两个人、由重复规则生成的每日站会,以及允许用户拖动创建新会议的周视图。
VCL 周日程表:两个人作为资源,由重复规则生成每日站会,拖动创建。
unit frmTeam;
interface
uses
Classes, Controls, Forms, SysUtils,
sgcUICore_Theme, sgcPlanner_Data, sgcPlanner_Scheduler,
sgcPlanner_Scheduler_VCL;
type
TFormTeam = class(TForm)
procedure FormCreate(Sender: TObject);
private
FData: TsgcPlannerData;
FScheduler: TsgcVCLScheduler;
procedure DoItemCreate(Sender: TObject; const aStart, aFinish: TDateTime;
const aResourceId: string; var aTitle: string; var aAccept: Boolean);
end;
implementation
procedure TFormTeam.FormCreate(Sender: TObject);
var
vItem: TsgcPlannerItem;
vMonday: TDateTime;
begin
vMonday := Date - DayOfWeek(Date) + 2;
FData := TsgcPlannerData.Create(Self);
FData.Resources.AddResource('ana', 'Ana').Color := $FF2563EB;
FData.Resources.AddResource('luis', 'Luis').Color := $FF0F766E;
// a daily stand-up from an iCalendar recurrence rule
vItem := FData.AddItem('standup');
vItem.Title := 'Daily stand-up';
vItem.Start := vMonday + EncodeTime(9, 0, 0, 0);
vItem.Finish := vMonday + EncodeTime(9, 15, 0, 0);
vItem.RecurrenceRule := 'FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR';
vItem.Resources := 'ana,luis';
vItem := FData.AddItem('review');
vItem.Title := 'Design review';
vItem.Start := vMonday + 1 + EncodeTime(14, 0, 0, 0);
vItem.Finish := vMonday + 1 + EncodeTime(15, 30, 0, 0);
vItem.Resources := 'ana';
FScheduler := TsgcVCLScheduler.Create(Self);
FScheduler.Parent := Self;
FScheduler.Align := alClient;
FScheduler.Data := FData;
FScheduler.Theme := utDark;
FScheduler.View := psvWeek;
FScheduler.Options.DayStartHour := 8;
FScheduler.Options.DayEndHour := 18;
FScheduler.Options.GroupByResource := True;
FScheduler.OnItemCreate := DoItemCreate;
FScheduler.ScrollToTime(vMonday + EncodeTime(8, 0, 0, 0));
end;
procedure TFormTeam.DoItemCreate(Sender: TObject; const aStart,
aFinish: TDateTime; const aResourceId: string; var aTitle: string;
var aAccept: Boolean);
begin
// the user dragged an empty slot: name the new meeting
aTitle := 'New meeting';
aAccept := True;
end;
end.C++ Builder 中的同一个日程表。
#include <vcl.h>
#pragma hdrstop
#include <System.DateUtils.hpp>
#include "sgcUICore_Theme.hpp"
#include "sgcPlanner_Data.hpp"
#include "sgcPlanner_Scheduler.hpp"
#include "sgcPlanner_Scheduler_VCL.hpp"
class TTeamHandlers : public TObject
{
public:
// the user dragged an empty slot: name the new meeting
void __fastcall ItemCreate(TObject *Sender, const TDateTime aStart,
const TDateTime aFinish, const UnicodeString aResourceId,
UnicodeString &aTitle, bool &aAccept)
{
aTitle = "New meeting";
aAccept = true;
}
};
void __fastcall BuildTeamScheduler(TForm *Form)
{
static TTeamHandlers *vHandlers = new TTeamHandlers();
TDateTime vMonday = Date() - DayOfWeek(Date()) + 2;
TsgcPlannerData *vData = new TsgcPlannerData(Form);
vData->Resources->AddResource("ana", "Ana")->Color = 0xFF2563EB;
vData->Resources->AddResource("luis", "Luis")->Color = 0xFF0F766E;
// a daily stand-up from an iCalendar recurrence rule
TsgcPlannerItem *vItem = vData->AddItem("standup");
vItem->Title = "Daily stand-up";
vItem->Start = vMonday + EncodeTime(9, 0, 0, 0);
vItem->Finish = vMonday + EncodeTime(9, 15, 0, 0);
vItem->RecurrenceRule = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR";
vItem->Resources = "ana,luis";
vItem = vData->AddItem("review");
vItem->Title = "Design review";
vItem->Start = vMonday + 1 + EncodeTime(14, 0, 0, 0);
vItem->Finish = vMonday + 1 + EncodeTime(15, 30, 0, 0);
vItem->Resources = "ana";
TsgcVCLScheduler *vScheduler = new TsgcVCLScheduler(Form);
vScheduler->Parent = Form;
vScheduler->Align = alClient;
vScheduler->Data = vData;
vScheduler->Theme = utDark;
vScheduler->View = psvWeek;
vScheduler->Options->DayStartHour = 8;
vScheduler->Options->DayEndHour = 18;
vScheduler->Options->GroupByResource = true;
vScheduler->OnItemCreate = vHandlers->ItemCreate;
vScheduler->ScrollToTime(vMonday + EncodeTime(8, 0, 0, 0));
}适用于 WinForms 的 C# 版本。
using System;
using System.Windows.Forms;
using esegece.sgcPlanner;
using esegece.sgcUICore;
namespace TeamPlanner
{
internal class MainForm : Form
{
public MainForm()
{
Text = "Team scheduler";
DateTime monday = DateTime.Today.AddDays(-(((int)DateTime.Today.DayOfWeek + 6) % 7));
var data = new TsgcPlannerData();
data.Resources.AddResource("ana", "Ana").Color = 0xFF2563EB;
data.Resources.AddResource("luis", "Luis").Color = 0xFF0F766E;
// a daily stand-up from an iCalendar recurrence rule
var item = data.AddItem("standup");
item.Title = "Daily stand-up";
item.Start = monday.AddHours(9);
item.Finish = monday.AddHours(9).AddMinutes(15);
item.RecurrenceRule = "FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR";
item.Resources = "ana,luis";
item = data.AddItem("review");
item.Title = "Design review";
item.Start = monday.AddDays(1).AddHours(14);
item.Finish = monday.AddDays(1).AddHours(15.5);
item.Resources = "ana";
var scheduler = new TsgcWinFormsScheduler { Dock = DockStyle.Fill, Data = data, Theme = TsgcUITheme.utDark };
scheduler.View = TsgcPlannerSchedulerViewKind.psvWeek;
scheduler.Options.DayStartHour = 8;
scheduler.Options.DayEndHour = 18;
scheduler.Options.GroupByResource = true;
// the user dragged an empty slot: name the new meeting
scheduler.OnItemCreate = (object sender, DateTime start, DateTime finish, string resourceId,
ref string title, ref bool accept) => { title = "New meeting"; accept = true; };
Controls.Add(scheduler);
scheduler.ScrollToTime(monday.AddHours(8));
}
[STAThread]
static void Main() { Application.EnableVisualStyles(); Application.Run(new MainForm()); }
}
}dotnet add package esegece.sgcPlanner.WinForms三个任务、两条链接、一个基线、关键路径和排程引擎(此处的甘特图功能均为注册版功能)。
unit frmGantt;
interface
uses
Classes, Controls, Forms, SysUtils,
sgcUICore_Theme, sgcPlanner_Data, sgcPlanner_Gantt, sgcPlanner_Gantt_VCL;
type
TFormGantt = class(TForm)
procedure FormCreate(Sender: TObject);
end;
implementation
procedure TFormGantt.FormCreate(Sender: TObject);
var
vData: TsgcPlannerData;
vGantt: TsgcVCLGantt;
vItem: TsgcPlannerItem;
vStart: TDateTime;
begin
vStart := Date + EncodeTime(8, 0, 0, 0);
vData := TsgcPlannerData.Create(Self);
vData.ProjectStart := vStart;
vItem := vData.AddItem('1');
vItem.Title := 'Design';
vItem.Start := vStart;
vItem.Finish := vStart + 3 + EncodeTime(9, 0, 0, 0);
vItem.Progress := 100;
vItem := vData.AddItem('2');
vItem.Title := 'Build';
vItem.Start := vStart;
vItem.Finish := vStart + 6 + EncodeTime(9, 0, 0, 0);
vItem.Progress := 40;
vItem := vData.AddItem('3');
vItem.Title := 'Release';
vItem.Start := vStart;
vItem.Finish := vStart;
vItem.Milestone := True;
// Build starts when Design finishes, Release when Build finishes
vData.Dependencies.AddDependency('1', '2');
vData.Dependencies.AddDependency('2', '3');
vGantt := TsgcVCLGantt.Create(Self);
vGantt.Parent := Self;
vGantt.Align := alClient;
vGantt.Data := vData;
vGantt.Theme := utDark;
vGantt.ShowCriticalPath := True;
vGantt.SetBaseline;
// the schedule engine moves the tasks to honour the links
vGantt.Schedule;
end;
end.
重复规则以及甘特图的 Schedule 和 SetBaseline 调用为注册版功能。免费社区版只显示一次重复项目。
甘特图、看板和日程表基于同一个数据对象,始终同步。
含年视图的七种视图、资源分组、重复会议、提醒、时区、撤销和重做以及就地编辑。
链接、自动排程、关键路径、基线、Microsoft Project XML、三层时间刻度和资源直方图。
看板上的状态列、按资源划分的泳道和 WIP 限制。
项目、资源和依赖关系绑定到 TDataSet,编辑写回。
导入和导出 .ics 文件。
跟随只读 .ics URL,例如假日列表。
通过 sgcWebSockets 与一个 Google 日历双向同步。
通过 Microsoft Graph 与一个 Microsoft 365 或 Outlook.com 的 Outlook 日历双向同步。
与一个 CalDAV 日历双向同步,例如 Nextcloud、iCloud、Fastmail 或 Radicale。
无需窗口即可把视图渲染为图像文件。
FireMonkey 应用程序中的三种视图。
免费社区版是 NuGet 上的 esegece.sgcPlanner.Community。下表列出了其包含的内容。
| 功能 | 社区版(免费) | 注册版 |
|---|---|---|
| 日程表的日、工作周、周、月和议程视图 | ✓ | ✓ |
| 甘特图任务树、摘要、里程碑和进度 | ✓ | ✓ |
| 看板的列、折叠和卡片选项 | ✓ | ✓ |
| 每个视图都支持拖放 | ✓ | ✓ |
| DataSet 绑定、JSON、主题以及无界面 PNG 和 SVG | ✓ | ✓ |
| 日程表年视图 | ✓ | ✓ |
| 提醒和每个项目的时区 | ✓ | ✓ |
| 撤销和重做、就地编辑 | ✓ | ✓ |
| 三层甘特图时间刻度和资源直方图 | ✓ | ✓ |
| 重复 | − | ✓ |
| 日程表资源时间线视图 | − | ✓ |
| 依赖关系箭头和拖动创建链接 | − | ✓ |
| 自动排程、关键路径和基线 | − | ✓ |
| 泳道和 WIP 限制 | − | ✓ |
| iCalendar 和 Microsoft Project XML | − | ✓ |
| Google 日历、Outlook 和 CalDAV 同步以及 iCal 订阅(sgcPlannerWS) | − | ✓ |
| 组件 | 功能 |
|---|---|
| TsgcPlannerData | 共享模型:项目、资源、状态、依赖关系和工作日历。 |
| TsgcVCLScheduler, TsgcFMXScheduler | 日、工作周、周、月、年、议程和时间线视图。 |
| TsgcVCLGantt, TsgcFMXGantt | 任务树、条形、链接、排程引擎、关键路径和基线。 |
| TsgcVCLKanban, TsgcFMXKanban | 状态列、卡片、泳道和 WIP 限制。 |
| TsgcPlannerSource_DataSet | 来自 TDataSet 的计划。 |
| TsgcPlannerICalendar, TsgcPlannerMSProject | 读写 iCalendar .ics 文件和 Microsoft Project XML(注册版)。 |
| TsgcPlannerRenderer | 无界面 PNG 和 SVG 输出。 |
| TsgcPlannerGoogleSync, TsgcPlannerGraphSync, TsgcPlannerCalDAVSync, TsgcPlannerICalSubscription (sgcPlannerWS) | 通过 sgcWebSockets 实现与 Google 日历、通过 Microsoft Graph 与 Outlook 和 Microsoft 365、与 CalDAV 服务器的双向同步,以及 iCal 订阅。仅限注册版。 |
| 目标 | 组件 | 平台 |
|---|---|---|
| Delphi 7 至 13,VCL | 日程表、甘特图、看板 | Win32 和 Win64 |
| Delphi XE6 至 13,FireMonkey | TsgcFMXScheduler, TsgcFMXGantt, TsgcFMXKanban | Windows、macOS、iOS 和 Android |
| C++ Builder 2007 至 13 | VCL 和 FMX 视图 | 生成的 .hpp 头文件和静态库 |
| Delphi 10.2 至 13,框架中立 | 数据、引擎、JSON、iCalendar、Microsoft Project、渲染器 | Linux64,例如在服务器上渲染计划 |
| .NET Framework 4.7.2、.NET 8、9 和 10 | TsgcWinFormsScheduler、Gantt 和 Kanban,以及对应的 WPF 和 Avalonia 版本 | WinForms、WPF、Avalonia,无界面 PNG 和 SVG |
可以,在注册版中。TsgcPlannerMSProject 读取和写入 Microsoft Project XML(MSPDI),包含任务、链接、日历、资源、分配和基线。支持的是 XML 格式,因此请在 Project 中把计划另存为 XML。
可以,而且是双向的。Google 日历通过 TsgcPlannerGoogleSync 同步,Microsoft 365 和 Outlook.com 的 Outlook 日历通过 Microsoft Graph 使用 TsgcPlannerGraphSync 同步,CalDAV 日历(例如 Nextcloud、iCloud、Fastmail 或 Radicale)则使用 TsgcPlannerCalDAVSync 同步。任何发布 .ics URL 的其他日历都可以用 TsgcPlannerICalSubscription 以只读方式跟随,.ics 文件则可用 TsgcPlannerICalendar 导入和导出。这些桥接需要注册版和 sgcWebSockets。
帮助中公布了 Win64 发布版本的开发测量:自动排程 10,000 个任务和 15,000 条链接用时 11 毫秒,滚动同样 10,000 个任务时的一帧用时 11 毫秒。5,000 张卡片的看板布局用时 5 毫秒。Win32 大约慢 1.5 到 1.7 倍。
三种视图及其拖放、摘要、里程碑、进度、工作日历、DataSet 绑定、JSON 和无界面输出。重复、自动排程、绘制的依赖关系、关键路径、基线、时间线视图、泳道、WIP 限制、iCalendar、Microsoft Project XML 和桥接为注册版功能。
可以。TsgcPlannerSource_DataSet 把数据对象绑定到任意 TDataSet,例如 FireDAC、TClientDataSet 或 dbExpress。它通过字段映射加载项目、资源和依赖关系,跟随数据集的变化,并把在视图中所做的编辑写回。
可以,通过 FireMonkey:TsgcFMXScheduler、TsgcFMXGantt 和 TsgcFMXKanban 自 Delphi XE6 起可在 Windows、macOS、iOS 和 Android 上运行。在 Linux64 上,数据模型、引擎、JSON、iCalendar、Microsoft Project XML 和渲染器自 Delphi 10.2 起可编译。
可以。TsgcPlannerRenderer 无需窗口即可把数据对象的日程表、甘特图或看板绘制为 PNG 或 SVG,可在 Windows 或 Linux64 上使用浅色或深色主题。
简介, VCL 快速入门, TsgcVCLScheduler, TsgcVCLGantt, TsgcVCLKanban, 重复, Google 日历同步, iCal 订阅.
Delphi、C++ Builder 和 .NET,涵盖每款 sgcUI 产品。