Forms
フォームはデスクトップアプリケーションにおいて、データの入力・修正・印刷をおこなうためのインターフェースとなります。 フォームを使用することで、ユーザーはデータベースのデータをやり取りし、レポートを印刷します。 フォームを使用して、カスタムダイアログボックスやパレット、そのほかのカスタムウィンドウを作成します。

また、以下の機能により、フォームは他のフォームを含むことができます:
フォームを作成する
4Dフォームの追加や変更は、以下の要素を使っておこないます:
- 4D Developer インターフェース: ファイル メニューまたは エクスプローラ ウィンドウから新規フォームを作成できます。
- フォームエディター: フォームの編集は フォームエディター を使っておこないます。
- JSON コード: JSON を使ってフォームを作成・設計し、フォーム ファイルを 適切な場所 に保存します。 例:
{
"windowTitle": "Hello World",
"windowMinWidth": 220,
"windowMinHeight": 80,
"method": "HWexample",
"pages": [
null,
{
"objects": {
"text": {
"type": "text",
"text": "Hello World!",
"textAlign": "center",
"left": 50,
"top": 120,
"width": 120,
"height": 80
},
"image": {
"type": "picture",
"pictureFormat": "scaled",
"picture": "/RESOURCES/Images/HW.png",
"alignment":"center",
"left": 70,
"top": 20,
"width":75,
"height":75
},
"button": {
"type": "button",
"text": "OK",
"action": "Cancel",
"left": 60,
"top": 160,
"width": 100,
"height": 20
}
}
}
]
}
プロジェクトフォームとテーブルフォーム
2つのカテゴリーのフォームが存在します:
-
プロジェクトフォーム - テーブルに属さない独立したフォームです。 このタイプのフォームは、おもにインターフェースダイアログボックスやコンポーネントを作成するのに使用されます。 プロジェクトフォームを使用してより簡単に OS標準に準拠するインターフェースを作成できます。
-
テーブルフォーム - 特定のテーブルに属していて、それによりデータベースに基づくアプリケーションの開発に便利な自動機能の恩恵を得ることができます。 通常、テーブルには入力フォームと出力フォームが別々に存在します。
フォームを作成する際にフォームカテゴリーを選択しますが、後から変更することも可能です。
フォームのページ
各フォームは、少なくとも 2つのページで構成されています:
- ページ1: デフォルトで表示されるメインページ
- ページ0: 背景ページ。このページ上に置かれたオブジェクトはすべてのページで表示されます
1つの入力フォームに複数のページを作成することができます。 一画面に納まりきらない数のフィールドや変数がある場合は、これらを表示するためにページを追加することができます。 複数のページを作成すると、以下のようなことが可能になります:
- もっとも重要な情報を最初のページに配置し、他の情報を後ろのページに配置する。
- トピックごとに、専用ページにまとめる。
- 入力順を設定して、データ入力中のスクロール動作を少なくしたり、または不要にする。
- フォーム要素の周りの空間を広げ、洗練された画面をデザインする。
複数ページは入力フォームとして使用する場合にのみ役立ちます。 印刷出力には向きません。 マルチページフォームを印刷すると、最初のページしか印刷されません。
フォームのページ数には制限がありません。 フォーム内の複数ページ上に同じフィールドを何度でも表示することができます。 しかし、フォームのページ数が多くなるほど、フォームの表示に要する時間が長くなります。
マルチページフォームには、1つの背景ページと複数の表示ページが存在します。 背景ページ上に置かれたオブジェクトはすべての表示ページに現れますが、それらのオブジェクトの選択や編集は背景ページでのみ可能です。 複数ページフォームでは、ボタンパレットを背景ページに置くべきです。 また、ページ移動ツールオブジェクトを背景ページに配置し、ユーザーに提供する必要があります。
Fluent UIレンダリング(デベロッパープレビュー)
Windows では、4D は Fluent UI フォームレンダリングをサポートしています。これは WinUI 3 テクノロジーに基づいた、Microsoft のモダンなグラフィカルユーザーインターフェースデザインです。 WinUI 3 はWindows App SDK の基礎であり、今後のWindows グラフィカルインターフェースを象徴するものです。
Fluent UI レンダリングは現代的かつ魅力的なコントロールを提供するだけでなく、ダーク/ライトシステムテーマのサポート、高解像度ディスプレイのために最適化されたよりスムーズなレンダリング、そして最近のMicrosoft アプリケーションに沿った、一貫したユーザーエクスペリエンスを提供します。
| ライトテーマ | ダークテーマ |
|---|---|
![]() | ![]() |
Fluent UI のサポートは現在デベロッパープレビューのフェーズです。 本番環境で使用すべきではありません。
この機能は、Windows の4D プロジェクト内 で使用可能です。 macOS や、Windows のバイナリー4D データベースなどではご利用いただけません。
要件
Fluent UI レンダリングには、Windows App SDK version 1.7.3 がインストールされている必要があります。 フォームを表示するためには、この SDK をWindows マシンにインストールする必要があります。
Windows App SDK が適切にインストールされていない場合、4D はフォームを全てクラシックモードで、エラーなしに表示します。
Fluent UI レンダリングを有効化する
Fluent UI レンダリングモードは、アプリケーションレベルまたはフォームレベルで有効化することができます。 フォームでの設定の方がアプリケーションの設定より優先されます。
アプリケーション設定
ストラクチャー設定ダイアログボックスの"インターフェース" ページ内にある Windows で Fluent UI を使用する オプションをチェックします。

この場合、Windows 上ではデフォルトで全てのフォームにおいてFluent UI レンダリングモードが使用されます。
フォーム設定
それぞれのフォームは、 Widget appearance プロパティによって独自のレンダリング設定を定義することができます。 次のオプションから選択することができます:
- 継承: グローバルなアプリケーション設定を継承します(デフォルト)
- クラシック: クラシック Windows スタイルを使用します
- Fluent UI: Fluent UI に基づいたモダンなレンダリングを有効化します。

対応するJSON フォームプロパティ は fluentUI で、値は未定義(つまり継承、デフォルト値)、 "true" または "false"です。
特定の振る舞い
Fluent UI で4D フォームを使用する場合、以下の点に注意を払う必要があります:
- 新しい
FORM Windows themeコマンドはカレントのフォームの実際の表示テーマを返します。 取り得る値: "Classic" あるいは "FluentUI"。 カレントフォームがない場合、あるいはコマンドがmacOS 上で呼ばれた場合、空の文字列が返されます。 GET STYLE SHEET INFOがフォームのコンテキストで呼び出された場合、返された情報はフォームのカレントのアピアランス(クラシックあるいはFluent UI)に関連したものです。 コマンドがフォームのコンテキスト外から呼ばれた場合、返された情報はグローバルプロジェクト設定 に関連したものです。SET MENU ITEM STYLEのitemStyle 引数でのUnderlineはポップアップメニューではサポートされていません(無視されます)。- ステッパー フォームオブジェクトはダブルクリックイベント サポートしません。
- サークルボタン はサポートされています(macOS と同様)。
WA ZOOM IN/WA ZOOM OUTコマンドは、システムレンダリングエンジンを使用したWeb エリアではサポートされません。- フォーカスの四角はピクチャーおよびテキストの入力 に追加することができます。
この デベロッパープレビュー にはいくつかの制約があり、それらはこちらのblog 記事にまとめられています。
継承フォーム
4D では "継承フォーム" を使用することができます。これはつまり、フォームA の全オブジェクトが フォームB で使用可能であるということです。 この場合、フォームB は フォームA からオブジェクトを "継承" します。
継承フォームへの参照は常にアクティブです。そのため、継承フォームの要素が変更されると (たとえば、ボタンスタイル)、この要素を使用する全フォームが自動的に変更されます。
テーブルフォームおよびプロジェクトフォームの両方を継承フォームとして使用できます。 ただし、継承フォームに含まれる要素は、異なるデータベーステーブルでの使用に対応していなければなりません。
フォームが実行されると、オブジェクトがロードされ、次の順序で組み立てられます:
- 継承フォームの 0ページ
- 継承フォームの 1ページ
- 開かれたフォームの 0ページ
- 開かれたフォームのカレントページ
この順番はフォーム内でのオブジェクトのデフォルトの入力順 を決定します。
継承フォームの 0ページと 1ページだけが他のフォームに表示可能です。
継承フォームとして使用される場合、継承フォームのプロパティとフォームメソッドは使用されません。 他方、継承フォームに含まれるオブジェクトのメソッドは呼び出されます。
継承フォームを設定するには、他のフォームを継承するフォームにおいて、継承されたフォーム名 および 継承されたフォームテーブル (テーブルフォームの場合) プロパティを設定しなければなりません。
プロジェクトフォームを継承するには 継承されたフォームテーブル プロパティで \<なし> を選択します (JSON の場合は " ")。
フォームの継承をやめるには、プロパティリストの 継承されたフォーム名 プロパティで \<なし> オプション (JSONの場合は " ") を選択します。
任意のフォームで継承フォームを設定し、そのフォームを第3のフォームの継承フォームとして使用することができます。 再帰的な方法で各オブジェクトが連結されます。 4Dは、再帰的ループを見つけ出し (たとえば、[テーブル1]フォーム1 が [テーブル1]フォーム1 を継承フォームとして定義している、つまり自分自身を継承している場合)、フォームの連鎖を中断します。
プロパティ一覧
フォームタイプ - フォーム名 - 継承されたフォームテーブル - 継承されたフォーム名 - ウィンドウタイトル - 配置を記憶 - サブフォームとして公開 - 固定幅 - 最小幅 - 最大幅 - 固定高さ - 最小高さ - 最大高さ - 印刷設定 - 連結メニューバー - フォームヘッダー - フォーム詳細 - フォームブレーク - フォームフッター - メソッド - Pages

