sgcHTML を 5 分で

sgcHTML は Object Pascal を HTML に変換します。ページをコンポーネントツリーとして構築し、文字列プロパティを 1 つ読み取り、その文字列を HTTP レスポンスに書き込みます。このページではまさにそれを行い、その後に必要になるフォーム、グリッド、チャート、htmx へと案内します。

Bootstrap 5 と htmx をサーバーサイドで
JavaScript を書く必要なし
Windows、Linux、macOS

5 分の手順:フォームでページをデザインする

VCL フォームに 4 種類のコンポーネントを置き、オブジェクトインスペクターでプロパティを設定して実行するだけです。ページはフォームから組み立てられるため、書く HTML はなく、コードは 1 行だけです。sgcWebSockets 2026.10 以降が必要です。

コンポーネント 設定する項目
TsgcWebSocketHTTPServer Port(例:8081)。ブラウザーが接続するサーバーです。
TsgcHTMLDesignServer Server は HTTP サーバー、Surface はデザインサーフェスを指し、PagePath はページのアドレス(例:/)です。
TsgcHTMLDesignSurface ページの Title と、ユーザーがクリックまたは送信したときに Delphi コードを実行する Actions。
sgcHTML コンポーネント ページの内容です。例えば、Title と Body を持つ TsgcHTMLComponent_Panel。

コードの 1 行とは、フォームの OnCreate イベントに書く WSServer.Active := True です。

uHelloWorld.pas
procedure TfrmHelloWorld.FormCreate(Sender: TObject);
begin
  { Start listening. From now on http://127.0.0.1:8081/ shows the page. }
  WSServer.Active := True;
end;

DesignServer の役割

フォームからページを組み立て、Bootstrap、htmx、Chart.js を実行ファイルから配信し、サーバースレッド間で安全にレンダリングし、未知のパスには 404 を返します。

クリックと送信で Delphi コードを実行

サーフェスにアクションを追加し、オブジェクトインスペクターで Source と Target を設定して、OnExecute をダブルクリックします。これがサーバー側の OnClick です。Target はページを再読み込みせずにその場で更新されます。

6 つの QuickStart デモ

Demos\60.HTML\00.QuickStart に収録されています。01.HelloWorld、02.Components、03.Events、04.Forms、05.Database、06.Pages です。上のコードは 01.HelloWorld のものです。

コードでページを組み立てたい場合は、このページの残りの部分で、フォームを使わずにコンソールプログラムから同じことを行います。

最初のページに必要なもの

自分自身を文字列にレンダリングするページコンポーネントと、その文字列をブラウザーに渡す HTTP サーバーです。オブジェクトは 2 つだけです。

ページコンポーネント

TsgcHTMLComponent_Site は sgcHTML_Component_Site.pas で宣言され、SGC HTML パレットページに登録されています。ナビゲーション、サイドバー、テーマ、コンテンツを含むシェル全体をレンダリングします。

重要なプロパティ

HTML は TsgcHTMLComponent から継承されます。読み取り専用で、読み取ると現在のコンポーネントツリーが完全な HTML ドキュメントとしてレンダリングされます。

サーバー

HTTP レスポンスに文字列を書き込めるものであれば何でも使えます。同梱のデモは、Professional ビルドが利用できる場合は sgcWebSocket_Server.pas の TsgcWSHTTPServer を使用し、そうでない場合は TIdHTTPServer にフォールバックします。

プラットフォーム

デスクトップとサーバーのみです。SGC_HTML は {$IFNDEF ANDROID} と {$IFNDEF IOS} の内側で定義されるため、モバイルではすべての sgcHTML ユニットが空にコンパイルされます。Windows、macOS、Linux はいずれも問題ありません。

要件とエディション

エディションの列は、コードを制御する define と、それが Source/sgcVer.inc の何行目にあるかを示しています。

項目 内容
IDE Delphi 7 から RAD Studio 13、および C++Builder 2007 から 13。Lazarus にも対応しており、Linux で実行済みの ERP デモが同梱されています。
uses 句 ページシェルには sgcHTML_Component_Site、さらに実際に使用するノードユニットを指定します。たとえば sgcHTML_Nodes、sgcHTML_Nodes_Bootstrap、sgcHTML_Nodes_Table、sgcHTML_Nodes_Forms、sgcHTML_Nodes_Charts です。
パックの define SGC_PACK_HTML は 871 行目、870 行目から 874 行目までの {$IFDEF SGC_EDT_ALL} ブロック内で定義されています。sgcWebSockets のソースツリーでは、All-Access エディションで有効になります。sgcHTML は、独自のインストーラーと独自のライセンスを持つ単独の製品としても販売されています。
機能の define 882 行目から 892 行目の {$IFDEF SGC_PACK_HTML} ブロック内にあります。SGC_HTML は 885 行目、SGC_HTMX は 886 行目で、どちらも 883 行目の {$IFNDEF ANDROID} と 884 行目の {$IFNDEF IOS} の内側です。デザイン時のビジュアルサーフェスである SGC_HTML_CONTROL は、887 行目の {$IFDEF MSWINDOWS} 内の 888 行目にあります。
モバイルでの意味 sgcHTML のすべてのユニットはインターフェースを {$IFDEF SGC_HTML} で囲んでいるため、Android や iOS のビルドでは空のユニットとしてコンパイルされます。これはサーバーサイドのライブラリであり、それが狙いです。スマートフォンが受け取るのは Pascal ではなく HTML です。
登録 パレットページは、SGC_PACK_HTML と SGC_HTML の両方が定義されている場合にのみ登録されます。

どのようなコンポーネントがあるのでしょうか。グリッドやスケジューラーから、チャート、リッチエディター、QR コード、カメラスキャナーまで、約 80 種類あります。機能マトリックスで分野ごとに分類されており、それぞれにコンポーネントの個別ページがあります。

インストールとパレットページの確認

sgcHTML は単独のパッケージとして提供され、sgcWebSockets の All-Access ビルドにも含まれています。インストールの手順は同じです。

1. 展開

ダウンロードしたファイルをフォルダーに展開します。以下ではこのフォルダーを {$DIR} と呼びます。

2. ライブラリパス

ツール、オプション、ライブラリの順に開きます。{$DIR}\source と、お使いの IDE 用の lib フォルダー(たとえば {$DIR}\libD13\$(Platform))を追加します。

3. パッケージのビルド

{$DIR}\Packages\ の下で、お使いの IDE バージョン用のパッケージグループを開きます。最初に実行時の .dpk をコンパイルし、次にデザイン時の dcl をインストールします。Lazarus では代わりに .lpk を使用します。

4. パレットの確認

SGC HTML というページが表示され、約 80 のコンポーネントが含まれています。Android や iOS ターゲットで表示されない場合は想定どおりです。そこでは SGC_HTML が除外されているためです。

5. 最初にデモを実行する

{$DIR}\Demos\60.HTML\01.RunTime\07.Site を開いてビルドし、実行してください。コンソールサーバーで、自身の URL を出力します。以下のコードはここから抜粋したものです。

Pascal で作るページを HTTP で配信

ページを構築し、HTML プロパティを読み取り、レスポンスに書き込みます。1 つ目のタブがページ、2 つ目がサーバー、3 つ目がコンソールプログラム全体です。

sgcSiteDemo_Pages.pas
uses
  SysUtils, Classes,
  // sgc
  sgcHTML_Component_Site;

class function TsgcSiteDemoPages.BuildPage: string;
var
  oSite: TsgcHTMLComponent_Site;
begin
  oSite := TsgcHTMLComponent_Site.Create(nil);
  try
    oSite.Title := 'sgcHTML Site Layouts';
    oSite.Layout := slSidebarLeft;

    oSite.AddMenu('Dashboard', '/');
    oSite.AddMenu('Customers', '/?page=customers');

    oSite.AddSection('Welcome', '<p>Served from Delphi.</p>');

    // reading HTML is what runs the render
    Result := oSite.HTML;
  finally
    oSite.Free;
  end;
end;

Layout には TsgcHTMLSiteLayout を指定します。slSidebarLeft、slSidebarRight、slTopNav、slTopNavSidebarLeft、slIconRail、slOffcanvas のいずれかです。既定値は slTopNavSidebarLeft なので、上の行は切り替え方を示すためだけにあります。

sgcSiteDemo_Server.pas
uses
  SysUtils, Classes,
  // sgc
  sgcWebSocket_Server,
{$IFDEF SGC_INDY}
  sgcIdContext, sgcIdCustomHTTPServer;
{$ELSE}
  IdContext, IdCustomHTTPServer;
{$ENDIF}

constructor TsgcSiteDemoServer.Create;
begin
  inherited Create;
  FPort := 8092;
  FHTTP := TsgcWSHTTPServer.Create(nil);
  FHTTP.Port := FPort;
  FHTTP.OnCommandGet := HandleCommandGet;
end;

procedure TsgcSiteDemoServer.Start;
begin
  FHTTP.Active := True;
end;

procedure TsgcSiteDemoServer.SendHTML(AResponseInfo: TIdHTTPResponseInfo;
  const aHTML: string);
begin
  AResponseInfo.ResponseNo := 200;
  AResponseInfo.ContentType := 'text/html; charset=utf-8';
  AResponseInfo.ContentText := aHTML;
end;

カスタム Indy ライブラリを使用するビルドでは sgcIdContext と sgcIdCustomHTTPServer、標準の Indy を使用するビルドでは IdContext と IdCustomHTTPServer として認識されるため、Indy のユニットは条件付きになっています。同梱のデモにもまったく同じ条件分岐があります。文字列を書き込めるサーバーであれば何でも使えます。同梱のデモは、Professional ビルドが利用できる場合は TsgcWSHTTPServer を選び、そうでない場合は TIdHTTPServer にフォールバックします。デモにはそこに条件分岐があり、この抜粋にはないのはそのためです。

sgcSiteDemoServer.dpr
program sgcSiteDemoServer;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  sgcSiteDemo_Server in 'sgcSiteDemo_Server.pas',
  sgcSiteDemo_Pages in 'sgcSiteDemo_Pages.pas';

var
  oServer: TsgcSiteDemoServer;
begin
  oServer := TsgcSiteDemoServer.Create;
  try
    oServer.Start;
    WriteLn('sgcHTML Site Layouts Demo - http://localhost:' +
      IntToStr(oServer.Port));
    WriteLn('Press Enter to stop.');
    ReadLn;
    oServer.Stop;
  finally
    oServer.Free;
  end;
end.

コンソールアプリケーションなので、フォームも VCL の設定も不要です。これが sgcHTML プログラムとして最短の形であり、同梱のデモの実際の姿でもあります。

3 つのタブはすべて、同梱のデモ Demos\60.HTML\01.RunTime\07.Site から重要な部分だけを抜粋したものです。完全なプロジェクトでは、クエリ文字列からレイアウト、テーマ、配色も切り替えます。最初のページがレンダリングされたら、一度読んでみる価値があります。

ページのレンダリングを確認する

プログラムは待ち受けている URL を出力します。それを開いて、切り替えを試してみてください。

出力される URL

プログラムは起動時にコンソールへ http://localhost:8092 を書き込みます。それを開いてください。ナビゲーション、サイドバー、コンテンツを備えたページが表示されれば、レンダリングとサーバーの両方が動作しています。

Active

FHTTP.Active := True は成功するか例外を発生させます。すでに別のものがポート 8092 を使用している場合は、ここで分かります。

コンテンツタイプ

ブラウザーがページではなく生のマークアップを表示する場合、レスポンスが text/html なしで送信されています。ContentText を代入する前に ContentType を設定してください。

レイアウトの切り替え

同梱のデモはクエリ文字列から layout、theme、mode を読み取るため、?layout=topnav&mode=dark で同じページが別の見た目で再レンダリングされます。コンポーネントの動作を確認する最速の方法です。

初回によくあるつまずき

レンダリングされない最初の試行のほとんどは、6 つの問題のいずれかが原因です。

パレットページが表示されない

登録には SGC_PACK_HTML と SGC_HTML の両方が必要です。1 つ目は All-Access ブロック内の 871 行目、2 つ目はパックブロック内の 885 行目で定義されます。Android や iOS ターゲットでは、2 つ目は意図的に定義されません。

ページが空白になる

ツリーは構築したものの、HTML を一度も読み取っていません。このプロパティがレンダリングを実行します。読み取ることがレンダリング処理のすべてであり、フラグメントではなく完全なドキュメントが返されます。

ページを編集しても何も変わらない

デモはリクエストごとに新しい TsgcHTMLComponent_Site を構築し、その後に解放します。オブジェクトをキャッシュして再利用する場合は、再構築の前に ClearContent で内容をクリアしてください。

ブラウザーに生のマークアップが表示される

レスポンスのコンテンツタイプが設定されていません。デモはボディを書き込む前に ContentType := 'text/html; charset=utf-8' を設定しており、これがないと一部のクライアントは HTML をテキストとして表示します。

HTML 文字列を手作業で書いている

その必要はありません。Bootstrap のレイアウト、テーブル、フォーム、チャート用のノードユニットがあり、マークアップを連結する代わりにそれらを組み合わせることがライブラリの本来の目的です。

ポートがすでに使用されている

デモは 8092 で待ち受けます。別のものがそのポートを使用していると、サーバーは起動しません。より深い問題を探す前に、ポートを変更してみてください。

最初のページの次に作られるもの

4 つの方向があり、いずれも同じパッケージの中にあります。

送信して戻るフォーム

フォームのノードユニットは、入力、選択、検証、レイアウトを構築し、htmx がページをリロードせずに送信します。文字列ではなくノードで構築すれば、エスケープは自動的に処理されます。

フォームコンポーネント

ページ上のデータ

ソート、フィルター、ページングを備えたグリッドに加え、チャート、統計カード、スケジューラー、ガントチャート、ダイアグラムコンポーネントがあります。

機能マトリックス

アプリケーション全体

ERP ダッシュボード、POS、ヘルプデスク、倉庫、フィールドサービスアプリなど、15 個を超える実行時デモが同梱されています。実際の規模でライブラリを確認する最速の方法です。

デモギャラリー

既存の Web 層を活用する

WebBroker と DataSnap 用のコンポーネントがあるため、既存の Delphi Web アプリケーションを書き直すことなく sgcHTML ページをレンダリングできます。

WebBroker と DataSnap

リファレンス、デモ、ドキュメント

カタログにはすべてのコンポーネントがプレビュー付きで掲載されています。デモプロジェクトはダウンロードに含まれており、Demos\60.HTML の下にあります。

TsgcHTMLComponent_Site ページ このクイックスタートで使用しているページシェルを、プロパティごとに説明します。
機能マトリックス レイアウト、フォーム、データ、チャート、認証、チャットなどを分野ごとに分類しています。
デモギャラリー 同梱の実行時デモを、それぞれ短い動画付きで紹介します。
WebBroker と DataSnap 既存の Delphi Web 層から sgcHTML ページをレンダリングします。
体験版のダウンロード 製品版と同じインストーラーで、期間限定です。
オンラインヘルプ 自動生成されたリファレンスで、常に最新リリースに対応しています。
Getting Started ガイド PDF(英語)。6 つの QuickStart デモの考え方を、ひとつながりの文章で解説します。

関連資料:Site コンポーネント、Delphi の Web UI コンポーネント、よりスマートなフォーム、データテーブル。各製品にはそれぞれクイックスタートがあり、はじめにのページに一覧があります。

sgcHTML クイックスタートに関するよくある質問

sgcHTML_Component_Site.pas ユニットの TsgcHTMLComponent_Site です。ページシェル全体をレンダリングするため、ナビゲーション、サイドバー、テーマ、コンテンツ領域を自分で組み立てる必要がありません。構築して、AddMenu と AddContent または AddSection を呼び出し、HTML プロパティを読み取ります。同梱の Site デモがまさにそれを行っています。
HTTP レスポンスに自分で書き込みます。HTML は単なる string プロパティなので、どのサーバーでも使えます。同梱のデモは、Professional ビルドでは TsgcWSHTTPServer、それ以外では TIdHTTPServer にフォールバックして使用し、ResponseNo := 200 と ContentType := 'text/html; charset=utf-8' を設定して、文字列を ContentText に代入します。
ゲートは sgcVer.inc の 871 行目で定義されている SGC_PACK_HTML で、870 行目から 874 行目までの {$IFDEF SGC_EDT_ALL} ブロック内にあります。そのソースツリーでは All-Access エディションがこれを定義します。sgcHTML は独自のインストーラーを持つ単独の製品としても販売されているため、define から推測するのではなく、現在のライセンスについては sgcHTML の価格ページをご確認ください。
いいえ。これは意図的なものです。SGC_HTML は 883 行目の {$IFNDEF ANDROID} と 884 行目の {$IFNDEF IOS} の内側の 885 行目で定義されているため、それらのターゲットではすべての sgcHTML ユニットが空のユニットとしてコンパイルされます。サーバーサイドのライブラリであり、スマートフォンはネットワーク経由で HTML を受け取るため、モバイルターゲットにレンダラーは不要です。Windows、macOS、Linux はすべてサポートされています。
いいえ。ライブラリは Bootstrap 5 のマークアップと htmx の属性を出力し、ボタンがページをリロードせずに送信してページの一部を差し替えられるのは htmx のおかげです。操作を Pascal で記述すれば、属性は自動的に生成されます。必要な場合は、CustomHead と BodyEndHTML を通じて独自のスクリプトを追加することもできます。
はい。Layout には TsgcHTMLSiteLayout を指定し、メンバーは slSidebarLeft、slSidebarRight、slTopNav、slTopNavSidebarLeft、slIconRail、slOffcanvas で、既定値は slTopNavSidebarLeft です。Preset には TsgcHTMLSitePreset を指定し、メンバーには spAdmin、spDashboard、spPortal、spDocs、spLanding、spApp などがあります。配色やライト/ダークモードは Theme オブジェクトにあります。
ページをノードとして構築する場合は安全です。ノードがテキストを書き込み、エスケープするためです。リスクが生じるのは、ノードを使わずに自分でマークアップを連結した場合で、たとえばユーザー入力から作成した文字列を AddContent に渡すような場合です。ユーザーデータを扱うものには、ノードユニットを使用してください。
ダウンロードには、Demos\60.HTML\01.RunTime の下に 15 個を超える実行時デモが同梱されています。ERP ダッシュボード、ヘルプデスク、POS、倉庫、レポートアプリ、フィールドサービスアプリなどです。ギャラリーに、それぞれの短い動画があります。
最もお得な選択: All-AccesseSeGeCe の全製品にプレミアムサポートが付いて、年間 €1,059 からご利用いただけます。
All-Access の価格を見る

Pascal で Web UI を構築する準備はできましたか?

体験版をダウンロードして、マークアップを 1 行も書く前に Site デモを実行してみてください。