Presence 组件 — sgcHTML | eSeGeCe

Presence

TsgcHTMLComponent_Presence — 一个“谁在线”名单,渲染为重叠的头像堆叠或列表,带状态圆点和实时 WebSocket 更新,适用于 Delphi、C++ Builder 和 .NET。

TsgcHTMLComponent_Presence

使用 AddUser 添加用户,用 MaxVisible 限制显示数量,然后读取 HTML 属性,或使用 GetUserFragmentHTML 将状态变更推送给已打开的客户端。

组件类

TsgcHTMLComponent_Presence

渲染为

头像堆叠或列表,加上作用域 CSS

家族

聊天与 AI

语言

Delphi, C++ Builder, .NET

添加用户、渲染它、推送状态变更

为每个用户调用 AddUser,读取 HTML 进行初始渲染,当有人状态变更时调用 SetUserStatus 并推送 GetUserFragmentHTML

uses
  sgcHTML_Component_Presence;

var
  oPresence: TsgcHTMLComponent_Presence;
begin
  oPresence := TsgcHTMLComponent_Presence.Create(nil);
  try
    oPresence.PresenceID := 'roster';
    oPresence.Layout := plAvatars;
    oPresence.MaxVisible := 5;
    oPresence.Title := 'Online';

    oPresence.AddUser('u1', 'Ana Torres', psOnline);
    oPresence.AddUser('u2', 'Marc Bell', psAway, '', 'Back at 3pm');
    oPresence.AddUser('u3', 'Kenji Ito', psBusy);

    WebModule.Response := oPresence.HTML;   // avatar stack + scoped CSS
  finally
    oPresence.Free;
  end;
end;

// Push a status change to every connected client, no full re-render:
oPresence.SetUserStatus('u2', psOnline);
TsgcHTMX_Engine_Server.BroadcastFragment(oPresence.GetUserFragmentHTML('u2'));
// includes: sgcHTML_Component_Presence.hpp

TsgcHTMLComponent_Presence *oPresence = new TsgcHTMLComponent_Presence(NULL);
try
{
  oPresence->PresenceID = "roster";
  oPresence->Layout = plAvatars;
  oPresence->MaxVisible = 5;
  oPresence->Title = "Online";

  oPresence->AddUser("u1", "Ana Torres", psOnline);
  oPresence->AddUser("u2", "Marc Bell", psAway, "", "Back at 3pm");
  oPresence->AddUser("u3", "Kenji Ito", psBusy);

  String html = oPresence->HTML;   // avatar stack + scoped CSS

  // Push a status change to every connected client:
  oPresence->SetUserStatus("u2", psOnline);
  TsgcHTMX_Engine_Server::BroadcastFragment(oPresence->GetUserFragmentHTML("u2"));
}
__finally
{
  delete oPresence;
}
using esegece.sgcWebSockets;

var presence = new TsgcHTMLComponent_Presence();
presence.PresenceID = "roster";
presence.Layout = TsgcHTMLPresenceLayout.plAvatars;
presence.MaxVisible = 5;
presence.Title = "Online";

presence.AddUser("u1", "Ana Torres", TsgcHTMLPresenceStatus.psOnline);
presence.AddUser("u2", "Marc Bell", TsgcHTMLPresenceStatus.psAway, "", "Back at 3pm");
presence.AddUser("u3", "Kenji Ito", TsgcHTMLPresenceStatus.psBusy);

string html = presence.HTML;   // avatar stack + scoped CSS

// Push a status change to every connected client, no full re-render:
presence.SetUserStatus("u2", TsgcHTMLPresenceStatus.psOnline);
TsgcHTMX_Engine_Server.BroadcastFragment(presence.GetUserFragmentHTML("u2"));

关键属性与方法

您最常使用的成员。

添加用户

AddUser(aId, aDisplayName, aStatus, aAvatarURL, aStatusText) 插入或更新一条名单条目:已存在的 Id 会原地更新。

状态

TsgcHTMLPresenceStatuspsOnlinepsAwaypsBusypsOfflineSetUserStatus(aId, aStatus, aStatusText) 仅更新状态圆点和文本。

布局

Layout 选择 plAvatars(重叠头像堆叠)或 plList(姓名 + 状态行);AvatarSize 以像素为单位设置头像直径。

溢出上限

MaxVisible(默认 5)限制显示的用户数量,超出后显示一个“+N”标签;所有用户都保留在标记中,因此后续推送仍能找到它们。

头部

TitleShowCount 渲染带在线人数徽章的头部;GetOnlineCount 不计入 psOffline 用户。

流式更新

GetUserFragmentHTML(aId)(在调用 RemoveUser 后也会生成一个删除片段)、GetCountFragmentHTMLGetMoreFragmentHTML 均可供 TsgcHTMX_Engine_Server.PushFragment / BroadcastFragment 使用。

继续探索

在线帮助此组件的完整 API 参考和使用指南。
所有 sgcHTML 组件浏览 80 多个组件的完整功能矩阵。
下载免费试用版30 天试用版附带 60.HTML 演示项目。
价格Single、Team 和 Site 授权,均含完整源代码。

准备好开始了吗?

下载免费试用版,为您的 Delphi、C++ Builder 或 .NET Web 应用添加实时在线状态名单。