Delphi、C++Builder & .NET ライブ画面

sgcUI リアルタイム UI パック

稼働中のシステムに追従する画面に必要なものすべてを、すでにお使いの sgcUI 製品に組み込みました。誰がオンラインか、トーストと未読バッジ付きの通知受信トレイ、監査証跡付きのアクティビティフィード、ライブログビューアーです。サーバーが WebSocket、MQTT、Server-Sent Events で値を届けることも、自分のコードから直接操作することもできます。

VCLFireMonkeyWinFormsWPFAvalonia
sgcUI の Realtime デモ:プレゼンスインジケーター付きのチームの名簿、アクティビティフィード、通知設定の上に置かれた通知受信トレイ、未読件数付きのベル、チームのアバター、ライブログのグリッド

5 つの製品で 1 つのライブ画面

リアルタイム UI パックは独立した製品ではありません。各要素は、それが属する sgcUI 製品の中にあり、すでにお使いのユニット、パッケージ、NuGet パッケージに含まれ、その製品のエディションに従います。どの要素も必要なのは sgcUICore とそれを含む製品だけで、sgcHTML は不要です。

プレゼンスとアバター

誰がオンライン、退席中、取り込み中、オフラインかを、アバター、アバターグループ、プレゼンスインジケーターで示します。

製品:sgcUICore

プレゼンス →

通知

トースト、受信トレイ、カテゴリとチャンネルごとの設定、ツールバーの未読バッジを備えた通知モデルです。

製品:sgcNavigation と sgcToolbar

通知 →

アクティビティフィードと監査証跡

誰がどのオブジェクトに何をしたかを、フィード、監査テーブル、ダッシュボードのタイルとして表示します。

製品:sgcDashboard

アクティビティ →

ライブログビューアー

最新のログ行に追従するグリッドで、一時停止、フィルター、エクスポートに対応します。

製品:sgcGrid

ライブログ →

ライブソース

すべてのモデルに値を届ける、sgcWebSockets の WebSocket、MQTT、Server-Sent Events 接続です。

製品:sgcUICore、sgcUICoreWS ブリッジ

ライブデータ →

Delphi 7 から Delphi 13 の VCL、Delphi XE6 以降の FireMonkey、C++Builder、そして .NET の WinForms、WPF、Avalonia に対応します。リアルタイム UI パックのヘルプトピックを読む。

プレゼンスとアバター

誰がオンラインかを、すべての sgcUI 製品で表示します。

TsgcUIPresenceModel は、ユーザーとそのステータス (オンライン、退席中、取り込み中、オフライン) を、ステータステキストとともに保持します。アバターのコントロールはモデルに追従するので、ステータスが変わると、そのユーザーのすべてのアバターとインジケーターが一度に再描画されます。

  • プレゼンスモデルは、コードから AddOrUpdate と SetStatus で、または変更ごとに 1 つのライブメッセージで更新されます。
  • アバター、収まらないユーザーを「+N」チップで示すアバターグループ、ステータスの点とステータステキストを表示するプレゼンスインジケーター。
  • sgcDashboard のアクティビティフィードは同じモデルを読むので、すべてのアクターにアバターとステータスが表示されます。
製品
sgcUICore。すべての sgcUI 製品で共有されます
Delphi と C++Builder
TsgcVCLAvatar、TsgcVCLAvatarGroup、TsgcVCLPresenceIndicator と、それぞれの TsgcFMX の対応コントロール
エディション
Community を含むすべてのエディション。ライブのプレゼンスメッセージも同様です

ヘルプ:プレゼンス と アバターとプレゼンスインジケーター。

トースト、受信トレイ、設定、バッジ

デスクトップアプリケーション向けの通知センターです。

TsgcNotificationModel は、通知をタイトル、重大度、カテゴリ、既読状態とともに保持し、未読件数を管理します。トーストマネージャー、受信トレイ、設定、バッジリンクは、すべてこのモデルに追従します。

  • トースト:新しい未読通知ごとにトーストが表示され、ポインターが上にある間は一時停止します。
  • 通知受信トレイ:通知を日付ごとにグループ化し、すべてまたは未読のみを表示でき、「すべて既読にする」を備えます。
  • 通知設定:カテゴリごとに 1 行、チャンネルごとに 1 列で、エディターも付属します。カテゴリのポップアップチャンネルをオフにするとトーストは止まりますが、受信トレイには引き続き一覧表示されます。
  • 未読バッジ:sgcToolbar の TsgcToolbarBadgeLink が、未読件数をツールバー項目または Ribbon 項目に表示します。99 を超えると 99+ になります。
製品
sgcNavigation (モデル、トースト、受信トレイ、設定) と sgcToolbar (バッジリンク)
Delphi と C++Builder
TsgcVCLToastManager、TsgcVCLNotificationInbox、TsgcVCLNotificationPrefsEditor と、それぞれの TsgcFMX の対応コントロール
エディション
Community を含むすべてのエディション。ライブ通知メッセージと、バッジの対象としての Ribbon は登録版です。

ヘルプ:通知、トースト、通知受信トレイ、通知設定、通知のライブメッセージ、TsgcToolbarBadgeLink。

アクティビティフィードと監査証跡

誰が何をしたか、そして何が変わったか。

TsgcDashboardActivityModel は、各アクティビティを、アクター、動詞、オブジェクトと、変更されたフィールドとして記録します。アクティビティフィードと監査証跡は、同じモデルの 2 つのビューです。

  • アクティビティフィード:最新のアクティビティを先頭に、相対時刻と、プレゼンスモデルから取得した各アクターのアバターを表示します。
  • 監査証跡:行を展開すると、変更されたフィールドが分かるテーブルです。
  • どちらも単独のコントロールとして使えるほか、ダッシュボード用のアクティビティタイルと監査タイルとしても使えます。
製品
sgcDashboard
Delphi と C++Builder
TsgcVCLActivityFeed、TsgcVCLAuditTrail、TsgcVCLDashboardActivityTile、TsgcVCLDashboardAuditTile と、それぞれの TsgcFMX の対応コントロール
エディション
Community を含むすべてのエディション。ライブアクティビティメッセージは登録版です。

ヘルプ:アクティビティフィード、ライブアクティビティメッセージ、アクティビティタイル、監査タイル。

sgcGrid のライブログビューアー

画面を固まらせることなく、何千ものログ行に追従します。

TsgcGridLogModel は、時刻、trace から fatal までのレベル、ソース、メッセージを持つログ行を保持し、TsgcGridLogLink はそれらを仮想モードの sgcGrid に表示します。ログモデルはスレッドセーフなので、ワーカースレッドから直接行を追加できます。

  • 末尾追従:上へスクロールすると追従が止まり、末尾まで戻すと再開します。一時停止を押すと、ユーザーが読んでいる間ビューが止まります。
  • レベルで色分けした行、レベル、ソース、テキストによるフィルター、強調ルール、エクスポート。
  • ソケットスレッドからのログ行のバーストでも、メインスレッドへの切り替えは 1 回で済みます。
製品
sgcGrid
Delphi と C++Builder
TsgcGridLogModel と TsgcGridLogLink。TsgcVCLGrid または TsgcFMXGrid と組み合わせます
エディション
Community を含むすべてのエディション。ライブログメッセージは登録版です。

ヘルプ:ログビューアー、TsgcGridLogModel、TsgcGridLogLink。

WebSocket、MQTT、SSE のライブソース

sgcUICoreWS ブリッジのライブソースは、サーバーが sgcWebSockets の接続で送る JSON メッセージを受け取り、モデルに渡します。コントロールは、コードを書かなくてもすぐに追従します。

ソースsgcWebSockets クライアント読み取るイベントメッセージの選択方法
TsgcUILiveSource_WebSocketTsgcWebSocketClientOnMessage、すべてのテキストメッセージメッセージのメンバーに対するフィルター
TsgcUILiveSource_MQTTTsgcWSPClient_MQTTOnMQTTPublish、すべてのパブリッシュMQTT のトピックフィルター
TsgcUILiveSource_SSETsgcHTTP1ClientOnSSEMessage、イベントストリームSSE のイベントタイプ
  • ソースは、接続も、サブスクライブも、送信もしません。URL、資格情報、TLS、再接続はクライアントの役目で、フックは WatchDog による再接続の後も維持されます。
  • 1 つのソースがバインディングを通じて複数のモデルに値を届けるので、1 つの接続で画面全体を動かせます。バインディングはアプリケーションのエンベロープを取り出すことができ、クライアントイベントの独自ハンドラーも引き続き呼び出されます。
  • モデルは常にメインスレッドで呼び出されます。ソケットスレッドに届いたメッセージはキューに入り、到着順に、メインスレッドへの 1 回の切り替えで適用されます。
  • ブリッジは受信専用です。ユーザーが通知を読んだり非表示にしたりしたときは、アプリケーションが同じクライアントを通じて独自のフレームを送ります。

4 つのメッセージ形式

新しいプロトコルはありません。各モデルは、自分のフィードのライブメッセージを読みます。変更ごとに 1 つの JSON オブジェクトで、フィードを示す type メンバーと op メンバーを持ちます。

フィードtypeopモデル
プレゼンスpresence、省略可upsert、remove、snapshot、clearTsgcUIPresenceModel
通知notification、必須add、update、remove、read、unread、snapshotTsgcNotificationModel
アクティビティactivity、必須add、update、remove、snapshotTsgcDashboardActivityModel
ログlog、省略可append、batch、clearTsgcGridLogModel
messages.json
{"type":"presence","op":"upsert","user":{"id":"u7","presence":"away","statusText":"Lunch"}}
{"type":"notification","op":"add","notification":{"id":"n2","title":"Build 812 passed","severity":"success"}}
{"type":"activity","op":"add","item":{"id":"a20","actorId":"u7","verb":"updated","objectName":"Invoice INV-17"}}
{"type":"log","op":"append","entry":{"level":"warning","source":"api","message":"Slow query"}}
Delphi、フィードごとに 1 つの MQTT トピック
oSource := TsgcUILiveSource_MQTT.Create(Self);
oSource.Client := MQTT;
// モデルごとに 1 つのバインディング。トピックで選択します
oBinding := oSource.Bindings.Add;
oBinding.Target := PresenceModel;
oBinding.Topic := 'ops/presence';
oBinding := oSource.Bindings.Add;
oBinding.Target := NotificationModel;
oBinding.Topic := 'ops/notifications';
oBinding := oSource.Bindings.Add;
oBinding.Target := ActivityModel;
oBinding.Topic := 'ops/activity';
oBinding := oSource.Bindings.Add;
oBinding.Target := LogModel;
oBinding.Topic := 'ops/log/+';
// ソースはサブスクライブしません。クライアントの OnMQTTConnect でサブスクライブします
MQTT.Subscribe('ops/#');

ライブソースは登録版のみで、sgcUI のすべての sgcWebSockets ブリッジと同様に sgcWebSockets が必要です。サーバーがない場合や Community のビルドでは、アプリケーションが各モデルの API を呼び出します。プレゼンスモデルの AddOrUpdate と SetStatus、通知モデルの Add または Post、アクティビティモデルの Add、ログモデルの Append です。

ライブソースのヘルプトピックを読む

Realtime デモ

シミュレーターで動く、12 人のチームのオペレーションコンソール

ダークテーマの Delphi VCL 向け Realtime デモ:チームの名簿、アクティビティフィード、通知受信トレイと通知設定、ベルのバッジ、アバターグループ、ライブログのグリッド

Suite デモの Realtime は、このパックでオペレーションコンソールを組み立てます。ツールバーには、バッジが未読件数を示すベル、現在のユーザーのアバター、チームのアバターグループが並びます。名簿はすべてのメンバーをプレゼンスインジケーター付きで一覧表示し、1 つのタブにアクティビティフィード、もう 1 つに監査証跡があり、通知受信トレイは設定エディターの上にあり、ログのグリッドは最新の行に追従し、トーストは右下に現れます。

  • 実行中に、ライト、ダーク、ハイコントラストを切り替えたり、ウィンドウを右から左に反転したりできます
  • 決定論的なシミュレーターが、すべての変更を各モデルのライブメッセージとして組み立てるので、デモにサーバーも sgcWebSockets も不要です
  • --test result.txt を付けて実行すると自己チェックが走り、番号付きの PASS または FAIL が 1 行ずつ出力されます
プラットフォーム
Delphi VCL (Delphi 7 から 13) と FireMonkey (Delphi 13)、C++Builder、.NET WinForms、WPF、Avalonia
必要なエディション
sgcUI Professional、Enterprise、All-Access または試用版。sgcDashboard を含むエディションです。登録版のビルドは各変更をライブメッセージとして適用し、Community のビルドはモデル API を通じて適用します。
ソース
Demos\Suite\Delphi\Realtime (sgcUIRealtime.dpr)、Demos\Suite\Delphi\RealtimeFMX (sgcUIRealtimeFMX.dpr)、Demos\Suite\CBuilder\Realtime、.NET フォルダーの demos\Suite\Realtime

含まれる sgcUI 製品

他の sgcUI スイートデモもご覧ください。

ライトテーマの Delphi FireMonkey 向け Realtime デモ
FireMonkey、ライトテーマ
ダークテーマの Delphi FireMonkey 向け Realtime デモ
FireMonkey、ダークテーマ

WinForms、WPF、Avalonia でも同じパック

モデル、コントロール、ライブソースは、.NET でも各製品の NuGet パッケージの中で同じ名前を持ち、同じ JSON メッセージを読みます。

  • モデル:TsgcUIPresenceModel (名前空間 esegece.sgcUICore)、TsgcNotificationModel と TsgcNotificationPreferences (esegece.sgcNavigation)、TsgcToolbarBadgeLink (esegece.sgcToolbar)、TsgcDashboardActivityModel (esegece.sgcDashboard)、TsgcGridLogModel と TsgcGridLogLink (esegece.sgcGrid)。
  • コントロール:TsgcWinFormsAvatar、TsgcWinFormsToastManager、TsgcWinFormsNotificationInbox、TsgcWinFormsActivityFeed、TsgcWinFormsAuditTrail などで、それぞれに TsgcWpf と TsgcAvalonia の対応コントロールがあります。
  • ライブソース:パッケージ esegece.sgcUICore.sgcWebSockets の TsgcUILiveSource_WebSocket、TsgcUILiveSource_MQTT、TsgcUILiveSource_SSE。登録版のみです。
  • esegece.sgcNavigation.Community や esegece.sgcGrid.Community など、NuGet の無償の Community パッケージは、Delphi の Community ビルドと同じ部分を省いています。
  • .NET のデモには、モデル、シミュレーター、自己チェックを収めた 1 つの共有プロジェクトの上に、WinForms、WPF、Avalonia のホストがあります。

ヘルプ:.NET パッケージ と リアルタイム UI パック。

Community と登録版

各要素は、その製品のエディションに従います。.NET の Community パッケージは、Delphi の Community ビルドと同じ部分を省いています。

要素製品Community登録版
プレゼンスモデルとそのライブメッセージ、アバター、アバターグループ、プレゼンスインジケーターsgcUICore
通知モデル、トースト、受信トレイ、設定sgcNavigation
ライブ通知メッセージsgcNavigation—
ツールバーでのバッジリンクsgcToolbar
Ribbon でのバッジリンクsgcToolbar—
アクティビティモデル、アクティビティフィード、監査証跡、両方のタイルsgcDashboard
ライブアクティビティメッセージsgcDashboard—
ログモデルとログリンクsgcGrid
ライブログメッセージsgcGrid—
WebSocket、MQTT、SSE のライブソース (sgcUICoreWS ブリッジ、sgcWebSockets が必要)sgcUICore—

sgcUI スイートでは、sgcNavigation、sgcToolbar、sgcGrid がすべてのエディションに、sgcDashboard が Professional 以上に含まれます。sgcUICore はすべての製品に付属し、すべての製品は Delphi 向けと .NET 向けに単体でも販売しています。機能マトリクス、ヘルプトピックのエディション、そして価格をご覧ください。

よくある質問

いいえ。各要素は、それが属する sgcUI 製品の中にあります。プレゼンスとアバターは sgcUICore、通知は sgcNavigation、未読バッジは sgcToolbar、アクティビティフィードと監査証跡は sgcDashboard、ログビューアーは sgcGrid です。それらの製品と一緒に、同じユニット、パッケージ、NuGet パッケージで入手できます。

sgcUICoreWS ブリッジのライブソースにのみ必要です。モデルとコントロールに必要なのは sgcUICore と各自の製品だけで、サーバーのないアプリケーションはコードから操作します。どの要素にも sgcHTML は不要です。

変更ごとに 1 つの JSON オブジェクトを、WebSocket、MQTT ブローカー、または Server-Sent Events で送るサーバーなら、どれでも使えます。4 つのメッセージ形式は文書化されており、ソースは独自のプロトコルを定義しません。バインディングで、既存のアプリケーションプロトコルのエンベロープを取り出すこともできます。

ブリッジは受信専用です。ユーザーが通知を読んだり非表示にしたりしたときは、アプリケーションが同じ sgcWebSockets クライアントを通じて独自のフレームを送ります。ライブソースのヘルプトピックに例があります。

固まりません。ソケットスレッドに届いたメッセージはキューに入り、メインスレッドへの 1 回の切り替えで適用されるので、1,000 行のログのバーストでも切り替えは 1 回です。ログモデルはスレッドセーフなので、ワーカースレッドから直接行を追加することもできます。Delphi 7 から 2009 では、メインスレッドで通知するクライアントの既定の通知方法を維持してください。

すべての要素のモデルとコントロール、そしてライブのプレゼンスメッセージです。通知、アクティビティ、ログの各モデルのライブメッセージ、バッジの対象としての Ribbon、ライブソースは、登録版のみです。

製品ページ:sgcNavigation、sgcToolbar、sgcDashboard、sgcGrid、sgcWebSockets、sgcUI スイート。

最もお得な選択: All-AccesseSeGeCe の全製品にプレミアムサポートが付いて、年間 €1,059 からご利用いただけます。
All-Access の価格を見る

sgcUI でライブ画面を作りましょう

All-Access 試用版にはすべての sgcUI 製品が含まれるので、パックのすべての要素をお試しいただけます。