Delphi、C++ Builder、.NET sgcUI の一部

sgcPlanner:Delphi、C++ Builder、.NET 向けスケジューラ、ガントチャート、カンバン

同じ計画を 3 つのビューで表示します。チーム向けにはカレンダー、プロジェクトマネージャー向けにはガントチャート、実作業を担当する人向けにはカンバンボードとして見せられ、すべて 1 つのデータオブジェクトにバインドされます。カードを「完了」にドラッグすると、ガントのバーとカレンダーの色もすぐに変わります。

VCL、FireMonkey、WinForms、WPF、AvaloniaWin64 で 10,000 件のタスクを 11 ミリ秒で自動スケジューリング無料の .NET Community 版sgcUI Enterprise に含まれます
ProjectPlanner デモ:同じタスクをカンバンボード、ガントチャート、スケジューラで表示

1 つの計画、3 つのビュー

チーム、プロジェクトマネージャー、実作業を担当する人のための 13 の機能です。登録版と記載された機能は、無料の .NET Community 版には含まれません。

1 つのデータモデル

すべてのビューが、同じ TsgcPlannerData を読み書きします。

1 つのデータモデル

3 つのビュー、1 つのデータオブジェクト、常に同期

カレンダー、プロジェクトチャート、タスクボードの内容が食い違うことは許されません。sgcPlanner は、任意の数のビューを 1 つのデータオブジェクトにバインドします。ボードで「完了」にドラッグしたカードは、ガントチャートとスケジューラでも「完了」の色ですぐに描画され、ガントで動かしたバーはカレンダーの予定を動かし、スケジューラで作成した予定はカードになります。編集は 1 回の更新として扱われるため、ドロップのたびに各ビューの再描画は 1 回だけです。

  • TsgcPlannerData が計画を保持し、各ビューは Data を通じてそれを参照します
  • BarColorMode の pbcStatus を使うと、ボードと同じようにガントのバーをステータスで色分けします
  • SyncSelection は、SelectedId を通じて選択中の項目を共有します
  • 同じモデルは、ビューなしでも、サービスやユニットテストの中で動作します
  • アラビア語とヘブライ語の右から左対応:スケジューラとカンバンの列は右から並び、ガントのタスクグリッドは右に移動し、MirrorTimeline はガントの時間軸も右から並べます
ヘルプのトピックを読む
DataSetPlanner デモ:データセットの行と、それにバインドされた計画ビュー

1 つのデータモデル

TDataSet のバインド、JSON の保存、PNG の描画

計画はすでにデータベースにある。sgcPlanner はそこに接続します。データセットソースは、データオブジェクトを FireDAC、TClientDataSet、dbExpress などの任意の TDataSet にバインドし、項目、リソース、依存関係を読み込み、データセットの変更に追従し、ビューで行った編集を書き戻します。JSON の保存は全エディション、全プラットフォームで動作し、ヘッドレスレンダラーは Linux64 を含むサーバー上で、任意のビューを PNG または SVG に描画します。

  • TsgcPlannerSource_DataSet は、ItemFields でフィールド名をマッピングします
  • SaveToFile と LoadFromFile で、仕様が公開されている JSON 形式を保存および読み込みます
  • TsgcPlannerRenderer は、ウィンドウなしでスケジューラ、ガントチャート、カンバンを描画します
  • DB ユニットだけを使うため、VCL、FireMonkey、コンソールアプリケーションで動作します
ヘルプのトピックを読む

1 つのデータモデル

計画へのすべての変更を元に戻す、やり直す

誤ったドロップのせいで、担当者が午後を丸ごと失うべきではありません。データオブジェクトは、項目、リソース、ステータス、依存関係の追加、削除、プロパティ変更、移動をすべて記録します。誰が変更しても同じです。ビューでのドラッグ、その場での編集、スマート貼り付け、スケジューリングエンジン、お客様自身のコードのいずれも対象です。データにバインドされたすべてのビューが 1 つの履歴を共有し、再スケジューリング全体のような変更のグループは、1 回の操作で元に戻せます。

  • Data.Undo の Undo、Redo、CanUndo、CanRedo
  • BeginGroup と EndGroup で、多数の変更を 1 つの操作にまとめます
  • UndoCaption と RedoCaption が、次の操作の名前をメニュー項目やヒントに提供します
  • Limit で履歴の上限を設定し、OnChange でボタンを更新します
ヘルプのトピックを読む

1 つのデータモデル

ビュー上で直接タイトルを入力

項目の名前を変えるたびにダイアログを開くと、作業が遅くなります。その場での編集では、F2 キーで選択中の項目のタイトルを、その上に置かれた小さなエディタで編集できます。スケジューラの空き領域をドラッグして作成した予定は、すぐにタイトルエディタが開くため、ドラッグして入力するだけです。スケジューラ、ガントチャート、カンバンボードのどれでも同じように動作し、すべての編集は元に戻す履歴に記録されます。

  • InplaceEdit で有効になります。既定ではオフです
  • F2 で選択中の項目を編集し、Enter で確定、Escape でキャンセルします
  • BeginEdit で、独自のメニュー項目からエディタを開けます
  • IsEditing により、Ctrl+Z などのフォームのキーは、ユーザーの入力中は待機します
ヘルプのトピックを読む

スケジューラ:会議、人、会議室

TsgcVCLScheduler と TsgcFMXScheduler、そして .NET でも同じビューを使えます。

TsgcVCLScheduler の日ビュー
TsgcVCLScheduler の稼働週ビュー
TsgcVCLScheduler の週ビュー
TsgcVCLScheduler の月ビュー
TsgcVCLScheduler のアジェンダビュー
TsgcVCLScheduler のリソースタイムラインビュー

スケジューラ:会議、人、会議室

7 つのカレンダービュー、人と会議室を並べて表示

カレンダーはこう動くものだと、ユーザーはすでに知っています。そこでスケジューラは、期待どおりのビューを用意しました。日、稼働週、週、月、年、アジェンダ、リソースのタイムラインです。年ビューは 12 か月分のミニカレンダーを表示し、各日は予定の混み具合に応じて色の濃さが変わり、ダブルクリックでその日を開きます。人、会議室、機械をそれぞれ専用の色を持つリソースとして追加し、日や週をリソース別にグループ化できます。クリニックなら医師ごとの列、作業場なら作業スペースごとの列で見られます。勤務時間、表示する時間帯、ナビゲーションは、プロパティと 1 行の呼び出しで設定できます。

  • View:psvDay、psvWorkWeek、psvWeek、psvMonth、psvYear、psvAgenda、psvTimeline
  • 色を指定した AddResource と、リソースごとに 1 列にする Options.GroupByResource
  • DayStartHour、DayEndHour、SlotMinutes で時間グリッドを調整します
  • GoToday、Prior、Next、ScrollToTime で移動します

リソースのタイムラインビューは登録版の機能です。Community 版では、このビューに通知が表示されます。

ヘルプのトピックを読む

スケジューラ:会議、人、会議室

ドラッグで作成、移動、サイズ変更

会議の予約は、絵を描くような感覚であるべきです。空いている時間枠をドラッグするとスケジューラが予定を作成し、OnItemCreate ハンドラーでタイトルを設定したり、その枠を拒否したりできます。予定を別の時刻、日、リソース列へドラッグしたり、端を引いて長さを変えたりでき、すべての操作は時間枠の大きさにスナップします。同じ操作は他のビューでも使え、ガントではバーを移動やサイズ変更でき、ボードではカードを列の間で移動できます。

  • OnItemCreate で、新しい予定に名前を付けたり拒否したりします
  • 移動とサイズ変更は Options.SlotMinutes にスナップします
  • プレビューがポインターに追従し、端に近づくとビューがスクロールし、Escape でキャンセルできます
  • マウス、ペン、タッチに対応し、OnCardMoving でボード上の移動を拒否できます
ヘルプのトピックを読む
毎週火曜日のスタンドアップが、すべての火曜日に表示される月ビュー

スケジューラ:会議、人、会議室 登録版のみ

標準ルールによる繰り返しの会議

毎週のスタンドアップや毎月のレビューは、一度入力すれば十分なはずです。項目に iCalendar の RRULE を設定すると、スケジューラはあらゆるビューと期間ですべての繰り返しを表示します。このルールは Google カレンダー、Outlook、Apple カレンダーが使う RFC 5545 形式なので、.ics ファイルのインポートやエクスポートを経ても繰り返しの予定はルールを保持します。コードからデータオブジェクトに任意の期間の繰り返しを問い合わせて、たとえば会議室の競合を確認することもできます。

  • RecurrenceRule := 'FREQ=WEEKLY;BYDAY=TU' で毎週火曜日に繰り返します
  • 項目の Start と Finish が最初の繰り返しになります
  • GetOccurrences は、任意の期間の繰り返しを返します
  • iCalendar ファイルでインポートおよびエクスポートします

Community 版では、繰り返しの項目を 1 回だけ表示し、ルールは保持します。

ヘルプのトピックを読む
祝日カレンダーをスケジューラに統合した ICalSubscription デモ

スケジューラ:会議、人、会議室 登録版のみ

Google カレンダー、Outlook、CalDAV、.ics の入出力

ユーザーの予定は、すでに他のカレンダーにあります。TsgcPlannerICalendar は、Google カレンダー、Outlook、Apple カレンダーの形式である .ics ファイルをインポートおよびエクスポートします。sgcPlannerWS ブリッジを使うと、祝日リストや共有カレンダーなどの読み取り専用の .ics URL を購読でき、3 つの同期コンポーネントが、計画を 1 つの Google カレンダー、Microsoft Graph 経由の Microsoft 365 または Outlook.com の 1 つの Outlook カレンダー、あるいは Nextcloud、iCloud、Fastmail、Radicale などの CalDAV サーバーの 1 つの CalDAV カレンダーと、双方向に同期します。いずれも前回の同期以降の変更だけを読み取り、明確な競合ルールを持ちます。

  • TsgcPlannerICalendar の ImportFromFile と ExportToFile
  • TsgcPlannerICalSubscription の URL と RefreshInterval。ETag と If-Modified-Since を使います
  • TsgcPlannerGoogleSync の CalendarId、Direction、AutoSyncInterval
  • TsgcPlannerGraphSync の CalendarId と OAuth2 の AccessToken。Graph の差分クエリを使います
  • TsgcPlannerCalDAVSync の CalendarURL、UserName、Password。同期トークンと ETag を使います
  • 競合では後の変更が優先され、OnConflict で別の判断もできます

登録版の機能です。ブリッジコンポーネントには、登録版の sgcWebSockets も必要です。.NET では esegece.sgcPlanner.sgcWebSockets に含まれます。

ヘルプのトピックを読む

スケジューラ:会議、人、会議室

スヌーズと却下に対応したリマインダー

誰も覚えていない会議には、誰も出席しません。項目に開始の何分前かでリマインダーを設定すると、TsgcPlannerReminders が期限になったリマインダーを見つけ、1 件ごとにイベントを発生させます。アプリケーションは自身のタイマーから呼び出し、ポップアップ、トースト、サウンドなど、リマインダーの表示方法を決めます。繰り返しの項目は、発生のたびに再びリマインドし、リマインダーはスヌーズも却下もできます。

  • 項目の ReminderMinutes:-1 はなし、0 は開始時
  • Check は、期限のリマインダーごとに OnReminder を発生させます
  • 現在または次の発生に対する Snooze と Dismiss
  • JSON に保存され、元に戻す履歴に記録されます
ヘルプのトピックを読む

スケジューラ:会議、人、会議室

項目ごとのタイムゾーン

複数のオフィスに分かれたチームは、それぞれの現地時間で会議を予約します。各項目は固有のタイムゾーンを持てるため、ニューヨークの 10:00 に設定した通話は、ニューヨーク時間の 10:00 のままです。一方、ビューはすべての項目を 1 つの表示ゾーンで表示します。表示ゾーンを変更すると、項目は新しいゾーンの壁時計時刻に移動しますが、フローティングの項目と終日の項目はそのままです。

  • Item.TimeZone は Start と Finish のゾーンで、フローティングの項目では空です
  • Data.DisplayTimeZone はビューが表示するゾーンで、空ならローカルゾーンです
  • 変換は、項目を表示するときにのみ行われます
  • リマインダーも表示ゾーンで実行されます
ヘルプのトピックを読む

ガントチャート:プロジェクトを計画し、クリティカルパスを追う

TsgcVCLGantt と TsgcFMXGantt:タスク、リンク、時間スケール、スケジューリングエンジン。

ProjectGantt デモ:終了開始リンクと開始開始リンクを持つ WBS ツリー

ガントチャート:プロジェクトを計画し、クリティカルパスを追う 登録版のみ

依存関係とラグを持つガントチャート

ガントチャートは、サマリー行を持つ作業分解ツリー、マイルストーン、各バー上の進捗を表示し、タスク間のリンクを矢印で描画します。タスクはコードで、またはあるバーの終端から別のバーへドラッグしてリンクでき、終了開始、開始開始、終了終了、開始終了から選択し、稼働時間でラグを追加できます。時間スケールは 5 分単位から年単位までズームできます。

  • ParentId による作業分解を、UpdateSummaries で集計します
  • AddDependency と TsgcPlannerDependencyKind:pdkFS、pdkSS、pdkFF、pdkSF
  • Lag は稼働カレンダー上で数えます
  • すべての項目に Milestone と Progress、ズームには TimeScale を使います

Community 版はリンクを保存しますが描画はせず、ドラッグによるリンクは登録版の機能です。

ヘルプのトピックを読む
クリティカルパスを強調し、稼働カレンダーに基づく祝日を網掛けにしたガントチャート

ガントチャート:プロジェクトを計画し、クリティカルパスを追う 登録版のみ

自動スケジューリングとクリティカルパスの表示

1 つのタスクが遅れたとき、プロジェクトマネージャーに必要なのは、午後いっぱいバーを動かした後ではなく、今すぐ新しい完了日です。スケジューリングエンジンは、稼働カレンダー上で非稼働日や祝日を飛ばしながら、先行タスクの後のできるだけ早い時点にすべてのタスクを配置し、各タスクのスラックを計算して、プロジェクトの終了を決めるタスクの連なりであるクリティカルパスを示します。必要なときに実行することも、編集のたびに実行することも、ビューのないデータオブジェクトで実行することもできます。

  • Schedule でエンジンを実行し、AutoSchedule で編集のたびに実行します
  • ShowCriticalPath は、完了日を左右するタスクを強調表示します
  • TotalSlack は、タスクが遅れても許される稼働分数を返します
  • 稼働カレンダーは WorkDays、WorkTime、Holidays を設定します

Community 版では、Schedule は EsgcPlannerError を発生させ、ShowCriticalPath は効果がありません。

ヘルプのトピックを読む
現在のバーの下に灰色のベースラインバーを表示し、2 つのタスクが遅れているガントチャート

ガントチャート:プロジェクトを計画し、クリティカルパスを追う 登録版のみ

ベースラインで遅れが一目でわかります

ステークホルダーが知りたいのは、計画が何であるかではなく、どれだけずれたかです。計画の承認時にベースラインを保存すると、ガントチャートは各バーの下にそれを細いバーとして描画するので、日付を 1 つも読まなくても遅れたタスクがわかります。ベースラインの日付は項目と一緒に保存され、JSON に書き出され、Microsoft Project XML でやり取りされます。コードから読み取って、独自の差異レポートを作成することもできます。

  • SetBaseline は、すべての項目の Start と Finish を 1 回の更新でコピーします
  • ShowBaseline は、ベースラインのバーを描画します
  • すべての項目に BaselineStart と BaselineFinish があります
  • JSON に保存し、Microsoft Project XML から読み込みます

Community 版はベースラインの日付を保存しますが描画はせず、SetBaseline は EsgcPlannerError を発生させます。

ヘルプのトピックを読む

ガントチャート:プロジェクトを計画し、クリティカルパスを追う 登録版のみ

Microsoft Project と計画をやり取りする

プロジェクト管理部門は、Microsoft Project から計画を受け取り、それを返送します。TsgcPlannerMSProject は、Project が開いて保存する XML 形式である Microsoft Project XML(MSPDI)をインポートおよびエクスポートし、タスク、リンク、カレンダー、リソース、割り当て、ベースラインを扱います。インポートでは計画を置き換えることも統合することもでき、整形式でないドキュメントは行番号付きでエラーになります。15,000 件のリンクを持つ 10,000 件のタスクのインポートは、Win64 の開発時の測定で 264 ミリ秒でした。リソースと割り当ては、タスクと一緒に取り込まれます。

  • ImportFromFile、ImportFromStream、ImportFromString
  • ExportToFile は、Microsoft Project で開ける XML を書き出します
  • ImportMode:pmiReplace(既定)または pmiMerge
  • 不正な形式の XML は、行番号付きで EsgcPlannerError を発生させます

Community 版には含まれません。Community 版のファイル形式は JSON です。

ヘルプのトピックを読む

ガントチャート:プロジェクトを計画し、クリティカルパスを追う

3 段のタイムスケールとリソースヒストグラム

長い計画は、ヘッダーに文脈が多いほど読みやすく、過剰に割り当てられた担当者は、計画を公開する前に見えるべきです。ガントのタイムスケールは、たとえば日の上に週、その上に月という 3 段目を表示できます。チャート下部のヒストグラムペインは、目盛りごとに各リソースの稼働時間に対する作業量を描画し、100% を超える部分はクリティカルの色で塗られます。

  • TimeScale.TierCount を 3 にすると上段が追加され、ラベルは TopFormat で指定します
  • ShowHistogram と HistogramHeight でペインを表示します
  • HistogramResourceId で 1 つのリソース、または各リソースを固有の色で積み上げて表示します
  • ペインはチャートのスクロールとズームに追従します
ヘルプのトピックを読む

カンバン:計画に追従するボード

TsgcVCLKanban と TsgcFMXKanban:ガントチャートと同じデータで、ステータスごとに 1 つの列を表示します。

5 つのステータス列、タグ、担当者のイニシャル、期限、進捗バーを表示したカンバンボード

カンバン:計画に追従するボード

チームが実際に作業に使えるタスクボード

実作業を担当する人が求めているのは、チャートではなくボードです。カンバンビューはステータスごとに 1 つの列を作り、件数バッジと折りたたみ矢印を付け、各カードにタイトル、タグ、リソースのイニシャル、期限、進捗を表示します。カードを別の列にドロップすると、共有データ内のステータスと順位が変わり、ガントチャートとスケジューラがすぐに更新されます。コードから、移動が起こる前に拒否することもできます。ボードも、他のビューと同じライトテーマまたはダークテーマに従います。

  • ColumnSource は、ステータスから、または独自の Columns から列を作ります
  • CardOptions で、カードに表示する内容を選びます
  • OnCardMoving で、ドロップを受け入れるか拒否するかを決めます
  • 列幅と折りたたみは、全エディションで動作します
ヘルプのトピックを読む
TaskBoard デモ:5 つの列、リソース別の 3 つのスイムレーン、制限を超えた 1 つの列

カンバン:計画に追従するボード 登録版のみ

スイムレーンと WIP 制限で作業を滞らせない

スイムレーンは、ボードをリソース、親タスク、タグごとの横帯に分けるので、担当者やエピックごとに 1 行が割り当てられます。仕掛かり作業の制限は、全レーンを通して数えて各列の上限を決めます。警告モードでは上限を超えた列に印が付き、ブロックモードでは上限を超えるカードはドロップできません。8 列 6 レーンに 5,000 枚のカードを配置するのに、Win64 で 5 ミリ秒かかりました。

  • SwimlaneBy:pslResource、pslParent、pslTag
  • 列の定義ごとに WIPLimit を設定し、0 は制限なしです
  • WIPMode:pwmWarn は列に印を付け、pwmBlock はドロップを拒否します
  • レーンと制限は、他のビューと同じデータで動作します

Community 版では、SwimlaneBy と WIP 制限は無視されます。列、列幅、折りたたみは動作します。

ヘルプのトピックを読む

アクセシビリティ

スクリーンリーダー、キーボード、ハイコントラスト向けの UI Automation を、設定なしで使えます。

アクセシビリティ

プランナーのすべてのビューを、マウスなしで読み取り、操作できます

sgcPlanner は、Scheduler、Timeline、Gantt、Kanban の各ビューを Microsoft UI Automation に公開します。日、レーン、列、時刻付きのアイテム、Gantt の依存関係が対象です。マウスでドラッグする操作はすべて、キーボードでも行えます。

  • Scheduler と Timeline: Ins でフォーカスされたスロットにアイテムを追加し、Del で削除し、Ctrl+矢印キーでアイテムを移動し、Ctrl+Shift+矢印キーで終了時刻を変更します
  • Gantt: Ctrl+Left と Ctrl+Right でタスクを 1 目盛り移動し、Ctrl+K で依存関係を開始し、Ctrl+Shift+K でフォーカスされたタスクの依存関係を順に切り替えます
  • Kanban: Ctrl+Left と Ctrl+Right でカードを隣の列へ移動し、Ctrl+Up と Ctrl+Down で並べ替えます
  • Windows のハイコントラストテーマでは、アプリケーションのアイテムの色がアウトライン付きのシステムカラーに置き換えられるため、色だけに頼る情報はありません

アクセシビリティは、無料の Community 版を含むすべてのエディションで既定で有効です。VCL では Delphi 7 から Delphi 13 までのすべての Delphi と C++Builder のバージョンで、FireMonkey では Windows で、そして WinForms、WPF、Avalonia で使えます。 Delphi と C++Builder では、AccessibleName と AccessibleDescription が UI Automation に公開される名前と説明を設定し、.NET では各フレームワーク標準のアクセシブルな名前とヘルプテキストが同じ役割を果たします。アクセシビリティ適合レポートを参照してください。

ヘルプのトピックを読む

sgcPlanner の動作を見る

sgcUI スイートのデモに含まれる sgcPlanner:組み込みのシミュレーションデータでオフラインで動作する完全なアプリケーションです。

実際のワークロードでの実測値

1920 x 1080 での Win64 リリースビルドの開発時の測定値です。Win32 は約 1.5 倍から 1.7 倍遅くなります。

測定項目結果条件
15,000 件のリンクと 30 の祝日を持つ 10,000 件のタスク(サマリー 1,000 件、3 階層)の自動スケジューリング。クリティカルパスを含みます11 msWin64 リリースビルド
15,000 件のリンクを持つ 10,000 件のタスクをスクロールしたときのガントのフレーム11 msWin64 リリースビルド、1920 x 1080
8 列 6 レーンでの 5,000 枚のカードのカンバンレイアウト5 msWin64 リリースビルド
2,000 件の時刻付き項目を持つスケジューラの週ビューのレイアウト1 msWin64 リリースビルド
MS Project XML から、15,000 件のリンクを持つ 10,000 件のタスクをインポート264 msWin64 リリースビルド

出典: これらの数値を解説しているヘルプのトピック。

sgcPlanner の主な利用シーン

プロジェクト管理およびエンジニアリング向けソフトウェア

プロジェクト管理部門とエンジニアリング会社

プロジェクトを作業分解として計画し、タスクをリンクして、会社のカレンダー上でエンジンにスケジューリングさせ、クリティカルパスで完了日を左右するものを確認できます。承認時にベースラインを保存すれば、すべてのバーの下に遅れが表示されます。計画は Microsoft Project から取り込み、XML として戻すことができ、同じタスクがチーム向けのボードにも表示されます。

  • 依存関係を持つガントチャート
  • 自動スケジューリングとクリティカルパス
  • ベースライン
  • MS Project XML
ProjectGantt デモを実行する

予約・アポイントシステム

クリニック、作業場、会議室予約

医師、作業スペース、会議室をそれぞれ 1 つの列として表示し、スタッフは空き枠をドラッグして予約できます。繰り返しの予約は標準ルールで作成し、祝日は .ics 購読で取り込み、Google カレンダーブリッジで担当者個人のカレンダーとも同期を保てます。データセットソースは、すべての予約をそのままテーブルに書き戻します。スタッフはどのビューでも同じ予約を見られます。

  • スケジューラのビューとリソース
  • 繰り返し
  • DataSet バインド
  • Google カレンダー同期
TeamScheduler デモを実行する

タスク管理とヘルプデスクのツール

アジャイルチームとサービスデスク

チームには担当者ごとのスイムレーンと列ごとの仕掛かり作業制限を持つカンバンボードを、マネージャーには同じチケットのガントチャートを提供できます。カードを「完了」に移すと、3 つのビューが 1 つのデータオブジェクトを共有しているため、バーとカレンダーの予定の色がすぐに変わります。夜間メール用のステータス画像は、サーバー上でヘッドレスに描画できます。

  • カンバン
  • スイムレーンと WIP 制限
  • 同期するビュー
  • ヘッドレスレンダリング
TaskBoard デモを実行する

数行でチームスケジューラを作る

Delphi、C++ Builder、C# で同じ API を使えます。2 人のメンバー、繰り返しルールによる毎日のスタンドアップ、ユーザーが新しい会議をドラッグして作成できる週ビューです。

VCL の週スケジューラ:2 人をリソースとし、繰り返しルールによる毎日のスタンドアップ、ドラッグで作成。

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

ヘルプのトピックを読む →

Delphi でのガントチャート

3 つのタスク、2 つのリンク、ベースライン、クリティカルパス、スケジューリングエンジンの例です(ここで使うガントの機能は登録版の機能です)。

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 の呼び出しは、登録版の機能です。無料の Community 版では、繰り返しの項目は 1 回だけ表示されます。

sgcPlanner のデモを実行する

コンパイル済みのデモ実行ファイルは sgcUI_bin.zip に入っており、インストールは不要です。すべてのデモのソースは、Delphi、C++ Builder、.NET 向けにパッケージに含まれます。

ProjectPlanner

ProjectPlanner

ガントチャート、カンバン、スケジューラを 1 つのデータオブジェクトで常に同期。

TeamScheduler

TeamScheduler

年ビューを含む 7 つのビュー、リソースグループ、繰り返しの会議、リマインダー、タイムゾーン、元に戻す/やり直し、その場での編集。

登録版のみ ProjectGantt

リンク、自動スケジューリング、クリティカルパス、ベースライン、Microsoft Project XML、3 段のタイムスケール、リソースヒストグラム。

登録版のみ TaskBoard

カンバンボードのステータス列、リソース別スイムレーン、WIP 制限。

DataSetPlanner

DataSetPlanner

項目、リソース、依存関係を TDataSet にバインドし、編集を書き戻します。

登録版のみ ICalendarSync

.ics ファイルのインポートとエクスポート。

ICalSubscription

登録版のみ ICalSubscription

祝日リストなど、読み取り専用の .ics URL を購読します。

登録版のみ GoogleCalendarSync

sgcWebSockets を通じて、1 つの Google カレンダーと双方向に同期します。

登録版のみ OutlookCalendarSync

Microsoft Graph を通じて、Microsoft 365 または Outlook.com の 1 つの Outlook カレンダーと双方向に同期します。

登録版のみ CalDAVSync

Nextcloud、iCloud、Fastmail、Radicale などの 1 つの CalDAV カレンダーと双方向に同期します。

HeadlessReport

ウィンドウなしでビューを画像ファイルに描画します。

PlannerFMX

FireMonkey アプリケーションでの 3 つのビュー。

コンパイル済みデモ

sgcUI 全製品のすぐに実行できる実行ファイルです。インストールは不要です。

sgcUI_bin.zip をダウンロード →

sgcPlanner が含まれるエディション

sgcPlanner は sgcUI Enterprise に含まれ、単体でも販売しています。All-Access バンドルにも含まれます。

sgcPlanner 単体パッケージ

€249 / 開発者、ソースコード一式、1 年間のアップデート付き。

sgcPlanner を購入 → 価格を見る →

sgcUI Enterprise

sgcUI 全 14 製品、€699 から。

Enterprise を見る →

.NET

.NET 版も同じ価格です。無料の Community 版は、NuGet に esegece.sgcPlanner.Community として公開しています。

価格を見る →

無料の Community 版は、NuGet の esegece.sgcPlanner.Community です。含まれる内容は表をご覧ください。

機能Community(無料)登録版
スケジューラの日、稼働週、週、月、アジェンダのビュー✓✓
ガントのタスクツリー、サマリー、マイルストーン、進捗✓✓
カンバンの列、折りたたみ、カードオプション✓✓
すべてのビューでのドラッグ&ドロップ✓✓
DataSet バインド、JSON、テーマ、ヘッドレスの PNG と SVG✓✓
スケジューラの年ビュー✓✓
リマインダーと項目ごとのタイムゾーン✓✓
元に戻す/やり直し、その場での編集✓✓
ガントの 3 段タイムスケールとリソースヒストグラム✓✓
繰り返し−✓
スケジューラのリソースタイムラインビュー−✓
依存関係の矢印とドラッグによるリンク−✓
自動スケジューリング、クリティカルパス、ベースライン−✓
スイムレーンと WIP 制限−✓
iCalendar と Microsoft Project XML−✓
Google カレンダー、Outlook、CalDAV の同期と iCal 購読(sgcPlannerWS)−✓

対応フレームワークとプラットフォーム

sgcPlanner のコンポーネント

コンポーネント機能
TsgcPlannerData共有モデル。項目、リソース、ステータス、依存関係、稼働カレンダーを保持します。
TsgcVCLScheduler, TsgcFMXScheduler日、稼働週、週、月、年、アジェンダ、タイムラインのビュー。
TsgcVCLGantt, TsgcFMXGanttタスクツリー、バー、リンク、スケジューリングエンジン、クリティカルパス、ベースライン。
TsgcVCLKanban, TsgcFMXKanbanステータス列、カード、スイムレーン、WIP 制限。
TsgcPlannerSource_DataSetTDataSet から計画を作成します。
TsgcPlannerICalendar, TsgcPlannerMSProjectiCalendar の .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、FireMonkeyTsgcFMXScheduler、TsgcFMXGantt、TsgcFMXKanbanWindows、macOS、iOS、Android
C++ Builder 2007 から 13VCL と FMX のビュー生成された .hpp ヘッダーと静的ライブラリ
Delphi 10.2 から 13、フレームワーク非依存データ、エンジン、JSON、iCalendar、Microsoft Project、レンダラーLinux64。たとえばサーバー上での計画の描画に使えます
.NET Framework 4.7.2、.NET 8、9 と 10TsgcWinFormsScheduler、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 で同期し、Nextcloud、iCloud、Fastmail、Radicale などの CalDAV カレンダーは TsgcPlannerCalDAVSync で同期します。その他の .ics の URL を公開しているカレンダーは、TsgcPlannerICalSubscription で読み取り専用として追従でき、.ics ファイルは TsgcPlannerICalendar でインポートおよびエクスポートできます。ブリッジには、登録版と sgcWebSockets が必要です。

ヘルプには、Win64 リリースビルドの開発時の測定値を掲載しています。15,000 件のリンクを持つ 10,000 件のタスクの自動スケジューリングは 11 ミリ秒、同じ 10,000 件のタスクをスクロールしたときの 1 フレームも 11 ミリ秒でした。5,000 枚のカードのカンバンレイアウトは 5 ミリ秒でした。Win32 は約 1.5 倍から 1.7 倍遅くなります。

ドラッグ&ドロップに対応した 3 つのビュー、サマリー、マイルストーン、進捗、稼働カレンダー、DataSet バインド、JSON、ヘッドレス出力です。繰り返し、自動スケジューリング、描画される依存関係、クリティカルパス、ベースライン、タイムラインビュー、スイムレーン、WIP 制限、iCalendar、Microsoft Project XML、ブリッジは登録版の機能です。

はい。TsgcPlannerSource_DataSet は、データオブジェクトを FireDAC、TClientDataSet、dbExpress などの任意の TDataSet にバインドします。フィールドマップを通じて項目、リソース、依存関係を読み込み、データセットの変更に追従し、ビューで行った編集を書き戻します。

はい、FireMonkey を通じて動作します。TsgcFMXScheduler、TsgcFMXGantt、TsgcFMXKanban は、Delphi XE6 以降の Windows、macOS、iOS、Android で動作します。Linux64 では、データモデル、エンジン、JSON、iCalendar、Microsoft Project XML、レンダラーが Delphi 10.2 からコンパイルできます。

はい。TsgcPlannerRenderer は、データオブジェクトのスケジューラ、ガントチャート、カンバンを、Windows または Linux64 上でウィンドウなしに、ライトまたはダークテーマの PNG や SVG として描画します。

sgcPlanner のヘルプ

3,000+開発者
20+年
761+コンポーネント
30+API 連携
5プラットフォーム
30日間返金保証ご満足いただけない場合は、ご購入から30日以内に全額返金をリクエストできます。 返金ポリシーを見る

今すぐ sgcPlanner をお試しください

sgcUI 体験版には、sgcPlanner と他のすべての sgcUI 製品が含まれます。