4D v16.3

カラム内でのオブジェクト配列の使用(4D View Pro)

ホーム

 
4D v16.3
カラム内でのオブジェクト配列の使用(4D View Pro)

カラム内でのオブジェクト配列の使用(4D View Pro)  


 

 

4D v15以降、リストボックスのカラムはオブジェクト配列を扱えるようになりました。オブジェクト配列は異なる種類のデータを格納できるので、この強力な新機能を使用すれば、単一のカラム内の行ごとに異なる入力タイプを混ぜたり、様々なウィジェットを表示したりといった事ができるようになります。例えば、最初の行にテキスト入力を挿入し、二行目にチェックボックスを、そして産業目にドロップダウンを挿入する、と言ったことが可能になります。また、オブジェクト配列は、ボタンやカラーピッカーと言った新しいウィジェットへのアクセスも可能にします。

以下のリストボックスはオブジェクト配列を使用してデザインされました:

ライセンスについての注意: リストボックス内でのオブジェクト配列の使用は、来る"4D View Pro"ツールへの第一歩です(これは現行の4D View プラグインを置き換えるものです)。この機能を使用するためには、有効な4D Viewライセンスが必要になります。詳細な情報に関しては、4D Webサイトを参照して下さい。

オブジェクト配列をリストボックスのカラムに割り当てるためには、プロパティリスト(の"変数名"フィールド)にオブジェクト配列名を設定するか、配列型のカラムのようにLISTBOX INSERT COLUMN コマンドを使用します。プロパティリスト内では、カラムにおいて"変数タイプ"にオブジェクトが選択できるようになりました:

オブジェクトカラムに対しては、座標、サイズ、スタイルなどに関連した標準のプロパティは使用可能です。プロパティリストを使用して定義することもできますし、オブジェクト型のリストボックスカラムのそれぞれの行に対してスタイル、フォントカラー、背景色、表示状態をプログラムで定義することもできます。これらのタイプのカラムは非表示にすることも可能です。

しかしながら、データソーステーマは、オブジェクト型のリストボックスカラムに対しては選択できません。実際、それぞれのカラムのそれぞれのセルの中身は、それに対応するオブジェクト配列の要素の属性に基づいています。それぞれの配列の要素は、以下をプロパティを定義できます:

  • 値の型(必須):テキスト、カラー、イベント、他
  • 値そのもの(任意):入力/出力に使用
  • セルの中身の表示(任意):ボタン、リスト、他
  • 追加の設定(任意):値の型によります

これらのプロパティを定義するためには、適切な属性をオブジェクト内に設定する必要があります(使用可能な属性は以下に一覧としてまとめてあります)。例えば、以下ような簡単なコードを使用して"Hello World!"とオブジェクトカラム内に書き込むことができます:

 ARRAY OBJECT(obColumn;0) //カラム配列
 C_OBJECT($ob//第一要素
 OB SET($ob;"valueType";"text") //値の型を定義(必須)
 OB SET($ob;"value";"Hello World!") //値を定義
 APPEND TO ARRAY(obColumn;$ob)

注: 表示フォーマットと入力フィルターはオブジェクトカラムに対しては設定できません。これらは値の型に応じて自動的に変わるからです。

リストボックスカラムにオブジェクト配列が割り当てられているとき、セルの表示、入力、編集の方法は、配列の要素のvalueType 属性に基づきます。サポートされるvalueType の値は以下の通りです:

  • "text": テキスト値
  • "real": <space>、<.>、<,>などのセパレータを含む数値
  • "integer": 整数値
  • "boolean": True/False 値
  • "color": 背景色を定義
  • "event": ラベル付きのボタンを表示

4D は"valueType"の値に応じたデフォルトのウィジェットを使用します(つまり、"text"と設定すればテキスト入力ウィジェットが表示され、"boolean"と設定すればチェックボックスが表示されます)。しかしオプションを使用することによって表示方法の選択が可能な場合もあります。以下の一覧はそれぞれの値の型に対してのデフォルトの表示方法と、他に選択可能な表示方の一覧を表しています:

valueTypeデフォルトのウィジェット他に選択可能なウィジェット
textテキスト入力ドロップダウンメニュー(指定リスト)またはコンボボックス(選択リスト)
real管理されたテキスト入力(数字とセパレータ)ドロップダウンメニュー(指定リスト)またはコンボボックス(選択リスト)
integer管理されたテキスト入力(数字のみ)ドロップダウンメニュー(指定リスト)またはコンボボックス(選択リスト)またはスリーステートチェックボックス
booleanチェックボックスドロップダウンメニュー(指定リスト)
color背景色テキスト
eventラベル付きのボタン
全てのウィジェットには、単位切り替えボタン または 省略ボタン を追加でセルに付属させることができます

セルの表示とオプションは、オブジェクト内の特定の属性を使用することによって設定できます(以下を参照して下さい)。

オブジェクト型のリストボックスのカラムにおいては、表示フォーマットと入力フィルターを設定することはできません。これらは値の型に応じて自動的に定義されます。どのように定義されるかについては、以下一覧にまとめてあります:

値の型デフォルトのフォーマット入力コントロール
textオブジェクト内で定義されているものと同じ制限なし
realオブジェクト内で定義されているものと同じ(システムの小数点セパレータを使用)"0-9" と "." と "-"
min>=0 の場合、"0-9" と "."
integerオブジェクト内で定義されているものと同じ"0-9" と "-"
min>=0 の場合、"0-9"
BooleanチェックボックスN/A
colorN/AN/A
eventN/AN/A

属性  

オブジェクト配列のそれぞれの要素は、セルの中身とデータ表示を定義する一つまたは複数の属性を格納するオブジェクトです(上記の例を参照して下さい)。

唯一必須の属性は"valueType"であり、サポートされる値は"text"、"real"、"integer"、"boolean"、"color" そして "event"です。以下の表には、リストボックスオブジェクト配列において"valueType"の値に応じてサポートされる全ての属性がまとめてあります(他の属性は全て無視されます)。表示フォーマットに関しては、その更に下に詳細な説明と例があります。

valueTypetextrealintegerbooleancolorevent
属性詳細
valueセルの値(入力または出力)xxx
min最小値xx
max最大値xx
behavior"スリーステート" の値x
requiredListオブジェクト内で定義されたドロップダウンリストxxx
choiceListオブジェクト内で定義されたコンボボックスxxx
requiredListReference4D リスト参照、"saveAs"の値によるxxx
requiredListName4D リスト名、"saveAs"の値によるxxx
saveAs"reference" または "value"xxx
choiceListReference4D リスト参照、コンボボックスを表示xxx
choiceListName4D リスト名、コンボボックスを表示xxx
unitListX要素の配列xxx
unitReference選択された要素のインデックスxxx
unitsListReference単位の4D リスト参照xxx
unitsListName単位の4D リスト名xxx
alternateButton切り替えボタンを追加xxxxx
value  

セルの値は"value"属性に保存されています。この属性は入力と出力に使用されます。またリストを使用する際のデフォルトの値を定義するのにも使用できます(以下を参照)。

例:

 ARRAY OBJECT(obColumn;0) //カラム配列
 C_OBJECT($ob1)
 $entry:="Hello world!"
 OB SET($ob1;"valueType";"text")
 OB SET($ob1;"value";$entry//ユーザーが新しい値を入力した場合、 編集された値は$entry に格納されます
 C_OBJECT($ob2)
 OB SET($ob2;"valueType";"real")
 OB SET($ob2;"value";2/3)
 C_OBJECT($ob3)
 OB SET($ob3;"valueType";"boolean")
 OB SET($ob3;"value";True)
 
 APPEND TO ARRAY(obColumn;$ob1)
 APPEND TO ARRAY(obColumn;$ob2)
 APPEND TO ARRAY(obColumn;$ob3)

注: ヌル値はサポートされており、空のセルとして表示されます。

"valueType" が"real" または "integer" であるとき、オブジェクトはminmax 属性を受け取ります(値は適切な範囲である必要があり、また、valueTypeと同じ型である必要があります)。

これらの属性を使用すると入力値の範囲を管理する事ができます。セリが評価されたとき(フォーカスを失ったとき)、入力された値がminの値より低い場合、またはmaxの値より大きい場合には、その値は拒否されます。この場合、入力をする前の値が保持され、tipに説明が表示されます。

例:

 C_OBJECT($ob3)
 $entry3:=2015
 OB SET($ob3;"valueType";"integer")
 OB SET($ob3;"value";$entry3)
 OB SET($ob3;"min";2000)
 OB SET($ob3;"max";3000)

behavior 属性は値の通常の表示とは異なる他の表示方法を提供します。4D v15では、一つだけ他の表示方法が用意されています:

属性使用可能な値valueType詳細
behaviorthreeStatesintegerスリーステートチェックボックスを数値として表現します。2=セミチェック、1=チェック、0=チェックされていない、-1=非表示、-2=チェックなしが無効化、-3=チェックが無効化、-4=セミチェックが無効化

例:

 C_OBJECT($ob3)
 OB SET($ob3;"valueType";"integer")
 OB SET($ob3;"value";-3)
 C_OBJECT($ob4)
 OB SET($ob4;"valueType";"integer")
 OB SET($ob4;"value";-3)
 OB SET($ob4;"behavior";"threeStates")

"choiceList" または "requiredList"属性がオブジェクト内に存在しているとき、テキスト入力は以下の属性に応じて、ドロップダウンリストまたはコンボボックスで置き換えられます:

  • 属性が"choiceList" の場合、セルはコンボボックスとして表示されます。これはつまり、ユーザーは値を選択、または入力できるということです。
  • 属性が"requiredList" の場合、セルはドロップダウンリストとして表示されます。これはつまり、ユーザーはリストに提供されている値からどれか一つを選択するしかないという事です。

どちらの場合においても、"value"属性を使用してウィジェット内の値を事前に選択することができます。

注: ウィジェットの値は配列を通して定義されます。既存の4Dリストをウィジェットに割り当てたい場合、"requiredListReference"、"requiredListName"、"choiceListReference"属性を使用するか、"choiceListName" 属性を使用する必要があります。

例:

  • 選択肢が二つ("Open"または"Closed")しかないドロップダウンリストを表示したい場合を考えます。"Closed"が選択された状態にしたいとします:
     ARRAY TEXT($RequiredList;0)
     APPEND TO ARRAY($RequiredList;"Open")
     APPEND TO ARRAY($RequiredList;"Closed")
     C_OBJECT($ob)
     OB SET($ob;"valueType";"text")
     OB SET($ob;"value";"Closed")
     OB SET ARRAY($ob;"requiredList";$RequiredList)

  • 整数値であれば全て受け入れ可能な状態にしておいた上で、もっとも一般的な値を提示するためにコンボボックスを表示したい場合を考えます:
     ARRAY LONGINT($ChoiceList;0)
     APPEND TO ARRAY($ChoiceList;5)
     APPEND TO ARRAY($ChoiceList;10)
     APPEND TO ARRAY($ChoiceList;20)
     APPEND TO ARRAY($ChoiceList;50)
     APPEND TO ARRAY($ChoiceList;100)
     C_OBJECT($ob)
     OB SET($ob;"valueType";"integer")
     OB SET($ob;"value";10) //10 をデフォルト値として使用
     OB SET ARRAY($ob;"choiceList";$ChoiceList)

"requiredListName" and "requiredListReference"属性を使用すると、リストボックスセル内において、デザインモード(ツールボックス内)において、またはプログラミングによって(New list コマンドを使用して)4Dで定義されたリストを使用することが出来るようになります。セルはドロップダウンリストとして表示されるようになります。これはつまり、ユーザーは、リスト内に提供された値のどれか一つのみを選択できるということを意味します。

"requiredListName" または "requiredListReference"は、リストの作成元に応じて使い分けます。リストがツールボックスで作成された場合、リスト名を渡します。そうでない場合、つまりリストがプログラミングによって定義された場合、リストの参照を渡します。どちらの場合においても、"value"属性を使用するとウィジェット内の値を事前に設定することができます。

注: これらの値を単純な配列を通して定義したい場合は、"requiredList" 属性を使用する必要があります。

この場合"saveAs" 属性は、選択された項目が"value"(値)として、または"reference”(参照)として保存されるかを定義します。

  • "saveAs" = "reference" であった場合、項目は参照として保存されます。"valueType" はreal または integerである必要があります。
  • "saveAs" = "value" であった場合、値が保存されます。この場合、"valueType" はリストの値と同じ型である必要があります(通常、"text" または "integer"です)。そうでない場合、4Dはリストの値をオブジェクトの"valuType"へと変換しようとします(以下の例を参照して下さい)。

"save as"オプションについてのより詳細な情報については、Design Reference マニュアルの関連付け(値または参照番号)の章を参照して下さい。

注: リストが実数値を表すテキストを含んでいる場合、小数点はローカル設定に関わらず、ピリオド(".")である必要があります。例:"17.6" "1234.456"

例:

  • ツールボックスで定義された"colors"リスト("blue"、"yellow"、そして "green"の値を格納)に基づいたドロップダウンリストを表示し、値として保存し、デフォルトの表示は"blue"にしたい場合を考えます:

     C_OBJECT($ob)
     OB SET($ob;"valueType";"text")
     OB SET($ob;"saveAs";"value")
     OB SET($ob;"value";"blue")
     OB SET($ob;"requiredListName";"colors")

  • プログラミングによって定位されたリストに基づいたドロップダウンリストを表示し、参照として保存したい場合を考えます:
     <>List:=New list
     APPEND TO LIST(<>List;"Paris";1)
     APPEND TO LIST(<>List;"London";2)
     APPEND TO LIST(<>List;"Berlin";3)
     APPEND TO LIST(<>List;"Madrid";4)
     C_OBJECT($ob)
     OB SET($ob;"valueType";"integer")
     OB SET($ob;"saveAs";"reference")
     OB SET($ob;"value";2) //デフォルトでLondonを表示
     OB SET($ob;"requiredListReference";<>List)

"choiceListName" と "choiceListReference" 属性を使用すると、リストボックスセル内において、デザインモード(ツールボックス内)において、またはプログラミングによって(New list コマンドを使用して)4Dで定義されたリストを使用することが出来るようになります。セルはコンボボックスとして表示されるようになります。これはつまり、ユーザーは値を選択、または入力できるということを意味します。

"choiceListName"または  "choiceListReference" は、リストの作成元に応じて使い分けます。リストがツールボックスで作成された場合、リスト名を渡しま す。そうでない場合、つまりリストがプログラミングによって定義された場合、リストの参照を渡します。どちらの場合においても、"value"属性を使用 するとウィジェット内の値を事前に設定することができます。

注: これらの値を単純な配列を通して定義したい場合は、"choiceList" 属性を使用する必要があります。

この場合、"saveAs" 属性は使用できません。選択された項目は自動的に"value"(値)として保存されるからです(詳細な情報についてはcf. )。

注: リストが実数値を表すテキストを含んでいる場合、小数点はローカル設定に関わらず、ピリオド(".")である必要があります。例:"17.6" "1234.456"

例: ツールボックスで定義された"colors"リスト("blue"、"yellow"、そして "green"の値を格納)に基づいたドロップダウンリストを表示し、値として保存し、デフォルトの表示は"green"にしたい場合を考えます:


 C_OBJECT($ob)
 OB SET($ob;"valueType";"text")
 OB SET($ob;"value";"blue")
 OB SET($ob;"choiceListName";"colors")

特定の値を使用する事で、セルの値に関連した単位を追加することができます(例: "10 cm", "20 pixels"等)。単位リストを定義するためには、以下の属性のどれか一つを使用します:

  • "unitsList": 利用可能な単位(例: "cm"、"inches"、"km"、"miles"、他)を定義するのに使用する x 要素を格納した配列。オブジェクト内で単位を定義するためにはこの属性を使用します。
  • "unitsListReference": 利用可能な単位を含んだ4Dリストへの参照。New list コマンドで作成された4D リストで単位を定義するためにはこの属性を使用します。
  • "unitsListName": 利用可能な単位を含んだデザインモードで作成された4Dリスト名。ツールボックスで作成された4D リストで単位を定義するためにはこの属性を使用します。

単位リストが定義された方法に関わらず、以下の属性を関連付けることができます:

  • "unitReference": "unitList"、"unitsListReference" または "unitsListName" の値リスト内で選択された項目へのインデックス(1から x )を格納する単一の値。

カレントの単位は、ボタンとして表示されます。このボタンは、クリックするたびに"unitList"、"unitsListReference" または "unitsListName" の値を切り替えて行きます(例 "pixels" -> "rows" -> "cm" -> "pixels" -> 等)。

例: 数値の入力と、その後に可能性のある単位("rows" または "pixels")を二つ続けて表示したい場合を考えます。カレントの値は"2" + "lines"と、オブジェクト内で直接定義された値("unitsList" 属性)を使用するものとします:

 ARRAY TEXT($_units;0)
 APPEND TO ARRAY($_units;"lines")
 APPEND TO ARRAY($_units;"pixels")
 C_OBJECT($ob)
 OB SET($ob;"valueType";"integer")
 OB SET($ob;"value";2) // 2 "units"
 OB SET($ob;"unitReference";1) //"lines"
 OB SET ARRAY($ob;"unitsList";$_units)

セルに省略ボタン[...] を追加したい場合、"alternateButton" 属性にTrue の値を入れてオブジェクトに渡すだけです。省略ボタンは自動的にセル内に表示されます。

このボタンがユーザーによってクリックされた場合、On Alternate Click イベントが生成され、そのイベントを自由に管理することができます(詳細な情報に関しては"events management" の章を参照して下さい)。

注: On Alternate Click は、On Arrow Click イベントの新しい名前であり、4D v15においてその拡張されたスコープを強調するために改名されました。

例:

 C_OBJECT($ob1)
 $entry:="Hello world!"
 OB SET($ob;"valueType";"text")
 OB SET($ob;"alternateButton";True)
 OB SET($ob;"value";$entry)

"color" valueType を使用すると、色、または色を表すテキストを表示する事ができます。

  • 値が数字の場合、色付けされた長方形がセル内に表示されます。例:
     C_OBJECT($ob4)
     OB SET($ob4;"valueType";"color")
     OB SET($ob4;"value";0x00FF0000)

  • 値がテキストの場合、そのテキストが表示されます(例: "value";"Automatic")。

"event" valueType を使用すると、クリックした際にOn Clicked イベントを生成する単純なボタンを表示します。データまたは値を渡す/返すことはできません。

オプションとして、"label"属性を渡す事ができます。

例:

 C_OBJECT($ob)
 OB SET($ob;"valueType";"event")
 OB SET($ob;"label";"Edit...")

オブジェクトリストボックス配列を使用している際には、複数のイベントを管理することができます:

  • On Data Change: 以下の場所において、どんな値でも変更された場合には On Data Change イベントがトリガーされます:
    • テキスト入力ゾーン
    • ドロップダウンリスト
    • コンボボックスエリア
    • 単位ボタン(値x が値 x+1へとスイッチしたとき)
    • チェックボックス(チェック/チェックなしの状態がスイッチしたとき)
  • On Clicked: ユーザーが、"event" valueType 属性を使用して実装されたボタンをクリックした場合、On Clicked イベントが生成されます。このイベントはプログラマーによって管理されます。
  • On Alternative Click: ユーザーが省略ボタン("alternateButton" 属性)をクリックした場合、On Alternative Click イベントが生成されます。このイベントはプログラマーによって管理されます。

注: On Alternative Click は、4Dの以前のバージョンで使用されていた On Arrow Click イベントの新しい名前です。このイベントはスコープが拡張されたことにより、4D v15で改名されました。

 
プロパティ 

プロダクト: 4D
テーマ: リストボックス

 
履歴 

初出: 4D v15

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v16)
ランゲージリファレンス ( 4D v16.1)
ランゲージリファレンス ( 4D v16.2)
ランゲージリファレンス ( 4D v16.3)