ダイナミックフォームの機能は、4D v16 R6で導入され、オブジェクト内でフォームを構築したり、テキストファイルからフォームをロードしたりすることで、その場でフォームを構築できます。これは、アプリケーションのニーズに合わせてフォームが頻繁に変更される世界ではとても便利です。
4Dでは、バイナリーフォームでもダイナミックフォームでも、入力順は典型的なz順に従います。4D v17 R6を使うと、z順に関連づけることなく入力順を定義できるようになりました。
フォーム定義の各ページには、z順に従って配置されたフォーム要素のリストを含む”object”属性があります。新しい”entryOrder”属性が追加され、独自のカスタマイズした入力順を指定できるようになりました。もしこの属性が未定義の場合は、4Dはz順(”objects”属性で定義された順序)を使います。
以下は、二つの入力フィールドとボタンを使ったダイナミックフォームの例です:
// Create inputs and button
$text1:=New object("type";"input"; "top";20; "left";140; "width";100; "height";18)
$text2:=New object("type";"input"; "top";20; "left";20; "width";100; "height";18)
$button:=New object("type";"button"; "text";"OK"; "top";60; "left";140; "width";100; "height";20)
// Create entry order collection
$entryOrder:=New Collection("text2";"text1")
// Create page with form objects and entry order
$page:=New object("objects";New object("text1";$text1; "text2";$text2; "button";$button); "entryOrder";$entryOrder)
// Create form
$form:=New object("pages"; New collection(Null;$page); "windowTitle";"My form"; "rightMargin";20; "bottomMargin";20)
// Load the form
$w:=Open form window($form)
DIALOG($form)
これは次のように表すことができます:
{ "pages": [ null, { "objects": { "text1": { "type": "input", "top": 20, "left": 140, "width": 100, "height": 18, "events": ["onClick"] }, "text2": { "type": "input", "top": 20, "left": 20, "width": 20, "height": 18, "events": ["onClick"] }, "button": { "type": "button", "text": "OK", "top": 60, "left": 140, "width": 20, "height": 20, "events": ["onClick"] } }, "entryOrder": [ "text2", "text1" ] } ] }