version 11.3 (Modified)
このテーマのコマンドは、リストボックス型のフォームオブジェクトを扱うために設けられました。
リストボックスは、グループ化したスクロールエリアと比較できます。リストボックスはグループ化したスクロールエリアのすべての機能、特に列や選択可能な行の形式でデータを表示する機能を提供します。しかしリストボックスには値の入力、列の並び替え、奇数・偶数行毎の色違い定義など、さらに数多くの機能が用意されています。
4Dのフォームエディタでリストボックスオブジェクトタイプを完全に設定することが可能で、また、プログラムから管理することもできます。フォームエディタでのリストボックスタイプのオブジェクトの作成および設定に関する詳細はDesign Referenceマニュアルを参照してください。
リストボックスオブジェクトのプログラミングは、4Dの他のリストフォームオブジェクトと同じ方法で行われます。ただし以下の節で説明するように、特定のルールに従わなくてはなりません。
Note: リストボックスオブジェクトは、画面表示用のインタフェースとしてデザインされています。印刷に使用することはできません。
データソースおよび値の管理に関する原則
リストボックスオブジェクトには1つ以上の列を含めることができます。それぞれの列には4D配列またはレコードのセレクションを関連付けることができます。レコードセレクションの場合、それぞれの列にはフィールドまたは式を関連付けます。
1つのリストボックス内に配列とセレクション両方をデータソースとして指定することはできません。フォームエディタ上でリストボックスを作成する際に、プロパティリストでデータソースを設定します。それをプログラムで変更することはできません。
配列タイプのリストボックス
このタイプのリストボックスでは、それぞれの列に4Dの1次元配列を割り当てなければなりません。ポインタ配列を除きすべてのタイプの配列を使用できます。フォームエディタやSET FORMAT コマンドを使用して、列ごとに表示フォーマットを指定できます。
リストボックスのハイレベルコマンド (INSERT LISTBOX ROW や DELETE LISTBOX ROW等) や配列操作コマンドを使用して、列の値 (データ入力や表示) を管理します。
例えば列の内容を初期化するには、以下の命令を使用できます:
ARRAY TEXT(ColumnName; size)
リストを使用することもできます:
LIST TO ARRAY("ListName"; ColumnName)
Note: リストボックスオブジェクトに複数の列が含まれている場合、関連する各配列のサイズは他の配列と同じでなければなりません(項目数が同じ)。同じサイズではない場合、最も小さな配列の項目数と同じ数だけ表示されます。
警告: リストボックスが異なる配列サイズの列を含むとき、もっとも小さい配列サイズの数だけを表示します。開発者は、各配列の要素数を同じになるようにすべきです。一つでも、リストボックスの列が空(配列未定義だったり、正しく再是定義がされなかったときに発生します)の場合、リストボックスは何も表示しません。
セレクションタイプのリストボックス
このタイプのリストボックスでは、列ごとにフィールドや式を割り当てます。それぞれの行はセレクションのレコードを基に評価されます。セレクションはカレントセレクションまたは命名セレクションです。
データソースがカレントセレクションである場合、データベースに対して行われた変更は自動でリストボックスに反映され、またリストボックスへの変更も自動でデータベースに適用されます。つまりカレントセレクションは常に両方で同じです。セレクションタイプのリストボックスでは、INSERT LISTBOX ROW と DELETE LISTBOX ROW コマンドを使用できないことに留意してください。
リストボックスの列に式を割り当てることができます。式は1つ以上のフィールドから構成できます (例えば [Employees]LastName+“ ”+[Employees]FirstName)。または単にフォーミュラも使用できます (例えば String(Milliseconds))。式にはプロジェクトメソッド、変数、配列要素も指定できます。
SET LISTBOX TABLE SOURCE コマンドを使用して、リストボックスに関連付けるテーブルを変更できます。
オブジェクト、列、ヘッダ
リストボックスオブジェクトは、以下3つの項目で構成されます:
・オブジェクト自体
・列
・列ヘッダ
これらの項目はフォームエディタ上では個別に選択できます。それぞれが独自のオブジェクト名や変数名を持ち、個別に処理されます。
デフォルトで、リストボックスオブジェクトそのものとは関係なく、フォーム上の列にはカラム1からXまでの名前が付けられ、ヘッダにはヘッダ1からXまでの名前が付けられます。
各項目タイプには、独自の特性ならびに他の項目と共有する特性があります。例えば、文字のフォントはリストボックスオブジェクトに一括して割り当てることも、列やヘッダに対して個別に割り当てることもできます。これとは逆に、入力プロパティは列に対してのみ指定することができます。
このルールは、リストボックスに対して使用される"オブジェクトプロパティ"テーマのコマンドに対して適用されます。その機能に応じて、各コマンドをリストボックスや列、列ヘッダに対して使用します。作業を行おうとする項目のタイプを設定するには、その項目に関連付けた名前や変数を渡します。
次の表はリストボックスオブジェクトに使用可能な"オブジェクトプロパティ"テーマの各コマンドのスコープについて詳述しています:
| オブジェクトプロパティコマンド | オブジェクト | 列 | 列ヘッダ |
| MOVE OBJECT | ○ | ||
| GET OBJECT RECT | ○ | ||
| SET FILTER | ○ | ||
| SET FORMAT | ○ | ||
| SET ENTERABLE | ○ | ||
| SET CHOICE LIST | ○ | ||
| BUTTON TEXT | ○ | ||
| SET COLOR | ○ | ○ | |
| SET RGB COLORS | ○ | ○ | |
| FONT | ○ | ○ | ○ |
| FONT SIZE | ○ | ○ | ○ |
| FONT STYLE | ○ | ○ | ○ |
| SET ALIGNMENT | ○ | ○ | ○ |
| Get alignment | ○ | ○ | ○ |
| SET VISIBLE | ○ | ○ | ○ |
| SET SCROLLBAR VISIBLE | ○ | ||
| BEST OBJECT SIZE | ○ | ○ | ○ |
Notes:
・"リストボックス"テーマのすべてのコマンドは、列とヘッダに適用されるSET LISTBOX COLUMN WIDTH とGet listbox column widthコマンドを除き、リストボックスオブジェクトに適用されます。
・配列型のリストボックスでは、スタイル、フォントカラー、背景色、行ごとの表示を個別に指定できます。これはリストボックスのプロパティリストを使用して関連付けた配列を通して行います。これらの配列名はGET LISTBOX ARRAYS コマンドを使用して取得できます。
リストボックスとランゲージ
オブジェクトメソッド
リストボックスオブジェクトやリストボックスの各列に対し、オブジェクトメソッドを付加することができます。オブジェクトメソッドの呼び出しは、次の順で行われます:
1. 各列のオブジェクトメソッド
2. リストボックスのオブジェクトメソッド
ヘッダで発生したイベントは、その列のオブジェクトメソッドが受け取ります。
SET VISIBLE とヘッダ
ヘッダにSET VISIBLEコマンドを使用すると、そのリストボックス中のすべてのヘッダが対象になります。例えばSET VISIBLE(*;"header3";False)という命令の場合、指定したヘッダだけではなく、header3が属すリストボックスの全ヘッダを非表示にします。
Focus object と Self
Focus object (“ユーザインタフェース” テーマ) と Self (“ランゲージ” テーマ) 関数はリストボックスやリストボックス列のオブジェクトメソッドで使用できます。これらはフォームイベントのタイプに基づきリストボックス、リストボックス列(1)、またはヘッダ変数へのポインタを返します。以下の表に動作をまとめます:
| イベント | Focus object | Self |
| On Clicked | リストボックス | 列 |
| On Double Clicked | リストボックス | 列 |
| On Before Keystroke | 列 | 列 |
| On After Keystroke | 列 | 列 |
| On After Edit | 列 | 列 |
| On Getting Focus | 列またはリストボックス (*) | 列またはリストボックス (*) |
| On Losing Focus | 列またはリストボックス (*) | 列またはリストボックス (*) |
| On Drop | リストボックスソース | リストボックス (*) |
| On Drag Over | リストボックスソース | リストボックス (*) |
| On Begin Drag Over | リストボックス | リストボックス (*) |
| On Mouse Enter | リストボックス (**) | リストボックス (**) |
| On Mouse Move | リストボックス (**) | リストボックス (**) |
| On Mouse Leave | リストボックス (**) | リストボックス (**) |
| On Data Change | 列 | 列 |
| On Selection Change | リストボックス (**) | リストボックス (**) |
| On Before Data Entry | 列 | 列 |
| On Column Moved | リストボックス | 列 |
| On Row Moved | リストボックス | リストボックス |
| On Column Resize | リストボックス | 列 |
| On Header Click | リストボックス | ヘッダ |
| On After Sort | リストボックス | ヘッダ |
(*) リストボックス中でフォーカスが更新されると、列へのポインタが返されます。フォームレベル上でフォーカスが更新されると、リストボックスへのポインタが返されます。列のオブジェクトメソッドのコンテキストでは、列へのポインタが返されます。
(**) 列のオブジェクトメソッドのコンテキストでは実行されません。
(1) 列へのポインタが返された時、指し示すオブジェクトはリストボックスのタイプによります。
配列型のリストボックスにおいて、Focus object関数("ユーザインタフェース"テーマ)は、フォーカスを取得したリストボックスの列(つまり配列)へのポインタを返します。4Dのポインタのメカニズムを利用し、修正された配列の項目番号を調べることができます。例えば、ユーザが列col2の5行目を変更した場合は、次のようになります:
$Column:=Focus object ` $Columnにはcol2へのポインタが含まれる $Row:= $Column-> `$Row は 5
セレクション型のリストボックスでは、Focus object 関数は以下を返します:
・フィールドが関連付けられた列の場合、そのフィールドへのポインタ
・変数が関連付けられた列の場合、その変数へのポインタ
・式が関連付けられた列の場合、Nil ポインタ
SCROLL LINES
SCROLL LINES コマンド("ユーザインタフェース"テーマ)をリストボックスで使用できます。スクロールは、リストボックスの最初に選択された行または指定された行を表示させます。
EDIT ITEM
EDIT ITEMコマンド("入力制御"テーマ)を使用して、リストボックスオブジェクトのセルを編集モードに移行することができます。
Displayed line number
Displayed line number コマンド (“セレクション” テーマ) はリストボックスオブジェクトのOn Display Detail フォームイベントのコンテキストで動作します。
フォームイベント
リストボックス管理、特にドラッグ&ドロップや並び替え操作を管理するために、特別なフォームイベントを使用できます。詳細については、Form Eventコマンドの節を参照してください。
ドラッグ&ドロップ
リストボックス中でのデータのドラッグ&ドロップ管理は、Drop position と DRAG AND DROP PROPERTIESコマンドでサポートされます。これらのコマンドは特にリストボックスに適用されます。
行や列のドラッグ&ドロップと混同しないように注意してください。これらはMOVED LISTBOX ROW NUMBER や MOVED LISTBOX COLUMN NUMBER コマンドでサポートされます。
ソートの管理
デフォルトで、ヘッダがクリックされると、リストボックスは自動的に標準的なカラムの並び替えを行います。標準的な並び替えとは、列の値を文字順に並べ替え、続けてクリックされると昇順/降順を交互に切り替えます。すべての列は常に自動的に同期されます。
リストボックスの並び替え可プロパティの選択を解除すると、ユーザによる標準の並び替えを禁止することができます。
開発者は、SORT LISTBOX COLUMNSコマンドを使用するか、またはOn Header ClickとOn After Sortフォームイベント (Form eventコマンドの節を参照) と4Dの配列管理コマンドを組み合わせて、独自の並び替えを設定することができます。
Note: 列のプロパティ"並び替え可"は、ユーザによる標準の並び替えにのみ影響を与えます。SORT LISTBOX COLUMNSコマンドでは、このプロパティが考慮されません。
列ヘッダに関連付けられた変数の値を使用すると、列の現在の並び替え状況(読み込み)や並び替え矢印の表示など、追加情報を管理することができます。
・変数が0のとき、列は並び替えられておらず、矢印は表示されていません;
・変数が1のとき、列は昇順で並び替えられていて、並び替え矢印が表示されています;
・変数が2のとき、列は降順で並び替えられていて、並び替え矢印が表示されています。
変数の値を設定して (例えばHeader2:=2)、ソートを表す矢印の表示を強制することができます。しかし列のソート順は変更されません、これを処理するのは開発者の役割です。
選択の管理
選択の管理は、リストボックスのタイプが配列かセレクションかにより異なります。
・セレクションタイプのリストボックス: 選択は"ハイライトセット"と呼ばれるセットにより管理されます。このセットはリストボックスのプロパティリストで定義します。このセットは4Dが自動で管理します。ユーザがリストボックス中で1つ以上の行を選択すると、セットが即座に更新されます。他方、プログラムからリストボックスの選択を更新するために、"セット"テーマのコマンドを使用することができます。
・配列タイプのリストボックス: SELECT LISTBOX ROW コマンドを使用して、プログラムからリストボックスの行を選択できます。
リストボックスオブジェクトに関連付けられた変数を使用して、オブジェクト行の選択の取得、設定、保存を行います。
この変数はブール配列で、4Dが自動的に作成・保守を行います。この配列のサイズは、リストボックスのサイズにより決定されます。配列には列に関連付けられた最も小さな配列と同じ数の要素が含まれます。
この配列の各要素には、対応する行が選択された場合にはTrueが、それ以外の場合はFalseが設定されます。4Dは、ユーザの動作に応じてこの配列の内容を更新します。これとは逆に、この配列要素の値を変更して、リストボックス中の選択行を変更することができます。
他方、この配列への要素の挿入や削除はできず、行のタイプ変更もできません。
Note: Count in array コマンドを使用して、選択された行の数を調べることができます。
例えば、以下のメソッドは配列タイプのリストボックスで、最初の行の選択を切り替えます:
` tBListBox is the name of the list box variable in the form
If (tBListBox{1} = True)
tBListBox{1}:= False
Else
tBListBox{1}:= True
End if