4D v12.4

リストボックスオブジェクトの管理

ホーム

 
4D v12.4
リストボックスオブジェクトの管理

 

リストボックスオブジェクトの管理  


 

 

このテーマのコマンドは、リストボックス型のフォームオブジェクトを扱うために設けられました。
リストボックスは、と比較できます。リストボックスはグループ化したスクロールエリアのすべての機能、特に列や選択可能な行の形式でデータを表示する機能を提供します。しかしリストボックスには値の入力、列の並び替え、奇数・偶数行毎の色違い定義など、さらに数多くの機能が用意されています。

4Dのフォームエディタでリストボックスオブジェクトタイプを完全に設定することが可能で、また、プログラムから管理することもできます。フォームエディタでのリストボックスタイプのオブジェクトの作成および設定に関する詳細はDesign Referenceマニュアルを参照してください。
リストボックスオブジェクトのプログラミングは、4Dの他のリストフォームオブジェクトと同じ方法で行われます。ただし以下の節で説明するように、特定のルールに従わなくてはなりません。

リストボックスオブジェクトには1つ以上の列を含めることができます。それぞれの列には4D配列またはレコードのセレクションを関連付けることができます。レコードセレクションの場合、それぞれの列にはフィールドまたは式を関連付けます。
1つのリストボックス内に配列とセレクション両方をデータソースとして指定することはできません。フォームエディタ上でリストボックスを作成する際に、プロパティリストでデータソースを設定します。それをプログラムで変更することはできません。

このタイプのリストボックスでは、それぞれの列に4Dの1次元配列を割り当てなければなりません。ポインター配列を除きすべてのタイプの配列を使用できます。フォームエディターやOBJECT SET FORMATコマンドを使用して、列ごとに表示フォーマットを指定できます。

リストボックスのハイレベルコマンド (LISTBOX INSERT ROWLISTBOX DELETE ROW等) や配列操作コマンドを使用して、列の値 (データ入力や表示) を管理します。
例えば列の内容を初期化するには、以下の命令を使用できます:

 ARRAY TEXT(ColumnName;size)

リストを使用することもできます:

 LIST TO ARRAY("ListName";ColumnName)

警告: リストボックスが異なる配列サイズの列を含むとき、もっとも小さい配列サイズの数だけを表示します。開発者は、各配列の要素数を同じになるようにすべきです。一つでも、リストボックスの列が空(配列未定義だったり、正しく再定義がされなかったときに発生します)の場合、リストボックスは何も表示しません。

このタイプのリストボックスでは、列ごとにフィールドや式を割り当てます。それぞれの行はセレクションのレコードを基に評価されます。セレクションはカレントセレクションまたは命名セレクションです。
デー タソースがカレントセレクションである場合、データベースに対して行われた変更は自動でリストボックスに反映され、またリストボックスへの変更も自動で データベースに適用されます。つまりカレントセレクションは常に両方で同じです。セレクションタイプのリストボックスでは、LISTBOX INSERT ROWLISTBOX DELETE ROW コマンドを使用できないことに留意してください。

リストボックスの列に式を割り当てることができます。式は1つ以上のフィールドから構成できます (例えば [Employees]LastName+“ ”+[Employees]FirstName)。または単にフォーミュラも使用できます (例えば String(Milliseconds))。式にはプロジェクトメソッド、変数、配列要素も指定できます。

LISTBOX SET TABLE SOURCE コマンドを使用して、リストボックスに関連付けるテーブルを変更できます。

リストボックスオブジェクトは、以下3つの項目で構成されます:

  • オブジェクト自体
  • ヘッダ
これらの項目はフォームエディタ上では個別に選択できます。それぞれが独自のオブジェクト名や変数名を持ち、個別に処理されます。

デフォルトで、リストボックスオブジェクトそのものとは関係なく、フォーム上の列にはカラム1からXまでの名前が付けられ、ヘッダにはヘッダ1からXまでの名前が付けられます。

各 項目タイプには、独自の特性ならびに他の項目と共有する特性があります。例えば、文字のフォントはリストボックスオブジェクトに一括して割り当てること も、列やヘッダに対して個別に割り当てることもできます。これとは逆に、入力プロパティは列に対してのみ指定することができます。

このルールは、 リストボックスに対して使用される"オブジェクトプロパティ"テーマのコマンドに対して適用されます。その機能に応じて、各コマンドをリストボックスや 列、列ヘッダに対して使用します。作業を行おうとする項目のタイプを設定するには、その項目に関連付けた名前や変数を渡します。
次の表はリストボックスオブジェクトに使用可能なオブジェクトプロパティテーマの各コマンドのスコープについて詳述しています:

オブジェクトプロパティコマンドオブジェクト列ヘッダ
OBJECT MOVEO
OBJECT GET COORDINATESO
OBJECT SET FILTERO
OBJECT SET FORMATO
OBJECT SET ENTERABLEO
OBJECT SET CHOICE LIST NAMEO
OBJECT SET TITLEO
OBJECT SET COLOROO
OBJECT SET RGB COLORSOO
OBJECT SET FONT OOO
OBJECT SET FONT SIZEOOO
OBJECT SET FONT STYLEOOO
OBJECT SET ALIGNMENTOOO
OBJECT Get alignmentOOO
OBJECT SET VISIBLEOOO
OBJECT SET SCROLLBARO
OBJECT GET BEST SIZEOOO

Notes:

  • リストボックステーマのすべてのコマンドは、列とヘッダに適用されるLISTBOX SET COLUMN WIDTHLISTBOX Get column widthコマンドを除き、リストボックスオブジェクトに適用されます。
  • 配列型のリストボックスでは、スタイル、フォントカラー、背景色、行ごとの表示を個別に指定できます。これはリストボックスのプロパティリストを使用して関連付けた配列を通して行います。これらの配列名はLISTBOX GET ARRAYS コマンドを使用して取得できます。

リストボックスオブジェクトやリストボックスの各列に対し、オブジェクトメソッドを付加することができます。オブジェクトメソッドの呼び出しは、次の順で行われます:

1. 各列のオブジェクトメソッド

2. リストボックスのオブジェクトメソッド
ヘッダで発生したイベントは、その列のオブジェクトメソッドが受け取ります。

ヘッダにOBJECT SET VISIBLEコマンドを使用すると、そのリストボックス中のすべてのヘッダが対象になります。例えばOBJECT SET VISIBLE(*;"header3";False)という命令の場合、指定したヘッダだけではなく、header3が属すリストボックスの全ヘッダを非表示にします。

Object with focusObject current定数とともに使用されるOBJECT Get pointer (以前のFocus objectSelf) はリストボックスやリストボックス列のオブジェクトメソッドで使用できます。これらはフォームイベントのタイプに基づきリストボックス、リストボックス列(1)、またはヘッダ変数へのポインタを返します。以下の表に動作をまとめます:

イベントObject with focusObject current
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) 列へのポインタが返された時、指し示すオブジェクトはリストボックスのタイプによります。配列型のリストボックスにおいて、OBJECT Get pointer("ユーザインタフェース"テーマ)は、フォーカスを取得したリストボックスの列(つまり配列)へのポインタを返します。4Dのポインタのメカニズムを 利用し、修正された配列の項目番号を調べることができます。例えば、ユーザが列col2の5行目を変更した場合は、次のようになります:

 $Column:=OBJECT Get pointer
  ` $Columnにはcol2へのポインタが含まれる
 $Row:=$Column-> `$Row は 5

セレクション型のリストボックスでは、OBJECT Get pointerは以下を返します:

  • フィールドが関連付けられた列の場合、そのフィールドへのポインタ
  • 変数が関連付けられた列の場合、その変数へのポインタ
  • 式が関連付けられた列の場合、Nil ポインタ

OBJECT SET SCROLL POSITION コマンド("オブジェクトプロパティ"テーマ)をリストボックスで使用できます。スクロールは、リストボックスの最初に選択された行または指定された行を表示させます。

EDIT ITEMコマンド("入力制御"テーマ)を使用して、リストボックスオブジェクトのセルを編集モードに移行することができます。

REDRAW  

REDRAWコマンド ("ユーザーインターフェーステーマ") がセレクション表示モードのリストボックスに適用されると、コマンドはリストボックス中に表示されたデータの更新を実行します。

Displayed line number コマンド (“” テーマ) はリストボックスオブジェクトのOn Display Detail フォームイベントのコンテキストで動作します。

リストボックス管理、特にドラッグ&ドロップや並び替え操作を管理するために、特別なフォームイベントを使用できます。詳細については、Form Eventコマンドの節を参照してください。

リストボックス中でのデータのドラッグ&ドロップ管理は、Drop positionDRAG AND DROP PROPERTIESコマンドでサポートされます。これらのコマンドは特にリストボックスに適用されます。

行や列のドラッグ&ドロップと混同しないように注意してください。これらはLISTBOX MOVED ROW NUMBERLISTBOX MOVED COLUMN NUMBER コマンドでサポートされます。

ヘッダがクリックされると、デフォルトでリストボックスは自動的に標準的なカラムの並び替えを行います。標準的な並び替えとは、列の値を文字順に並べ替え、続けてクリックされると昇順/降順を交互に切り替えます。すべての列は常に自動で同期されます。

リストボックスの並び替え可プロパティの選択を解除すると、ユーザによる標準の並び替えを禁止することができます。

開発者は、LISTBOX SORT COLUMNSコマンドを使用するか、またはOn Header ClickOn After Sortフォームイベント (Form eventコマンドの節を参照) と4Dの配列管理コマンドを組み合わせて、独自の並び替えを設定することができます。

Note: 列のプロパティ"並び替え可"は、ユーザによる標準の並び替えにのみ影響を与えます。LISTBOX SORT COLUMNSコマンドでは、このプロパティが考慮されません。

列ヘッダに関連付けられた変数の値を使用すると、列の現在の並び替え状況(読み込み)や並び替え矢印の表示など、追加情報を管理することができます。

  • 変数が0のとき、列は並び替えられておらず、矢印は表示されていません;

  • 変数が1のとき、列は昇順で並び替えられていて、並び替え矢印が表示されています;

  • 変数が2のとき、列は降順で並び替えられていて、並び替え矢印が表示されています。

変数の値を設定して (例えばHeader2:=2)、ソートを表す矢印の表示を強制することができます。しかし列のソート順は変更されません、これを処理するのは開発者の役割です。

選択行の管理は、リストボックスのタイプが配列かセレクションかにより異なります。

セレクションタイプのリストボックス: 選択行は"ハイライトセット"と呼ばれるセットにより管理されます。このセットはリストボックスのプロパティリストで定義します。このセットは4Dが自動で管理します。ユーザがリストボックス中で1つ以上の行を選択すると、セットが即座に更新されます。他方、プログラムからリストボックスの選択を更新するた めに、"セット"テーマのコマンドを使用することができます。

配列タイプのリストボックス: LISTBOX SELECT ROW コマンドを使用して、プログラムからリストボックスの行を選択できます。

リストボックスオブジェクトに関連付けられた変数を使用して、オブジェクト行の選択の取得、設定、保存を行います。

この変数はブール配列で、4Dが自動的に作成・保守を行います。この配列のサイズは、リストボックスのサイズにより決定されます。配列には列に関連付けられた最も小さな配列と同じ数の要素が含まれます。

この配列の各要素には、対応する行が選択された場合にはTrueが、それ以外の場合はFalseが設定されます。4Dは、ユーザの動作に応じてこの配列の内容を更新します。これとは逆に、この配列要素の値を変更して、リストボックス中の選択行を変更することができます。

他方、この配列への要素の挿入や削除はできず、行のタイプ変更もできません。

Note: Count in array コマンドを使用して、選択された行の数を調べることができます。

例えば、以下のメソッドは配列タイプのリストボックスで、最初の行の選択を切り替えます:

  ` tBListBoxはフォーム上のリストボックス変数の名前
 If(tBListBox{1}=True)
    tBListBox{1}:=False
 Else
    tBListBox{1}:=True
 End if
 
Note: 階層モードのリストボックスの選択行管理については階層リストボックスの管理を参照してください。

4D v12より、リストボックスを印刷することができます。2つの印刷モード、フォームオブジェクトのようにリストボックスを印刷するために使用できるプレビューモードと、フォーム内でリストボックスオブジェクト自身の印刷を制御できる詳細モードがあります。フォームエディタでリストボックスオブジェクトに"印刷"アピアランスを適用できる点に留意してください。

プレビューモードでのリストボックスの印刷は、標準の印刷コマンドやプリントメニューを使用して、リストボックスを含むフォームを直接印刷します。リストボックスはフォーム上に表示されている通りに印刷されます。このモードではオブジェクトの印刷をち密に制御することはできません。特に表示されている以上の行を印刷することはできません。

このモードでは、リストボックスの印刷はPrint objectコマンドを使用してプログラムにより実行されます。そのため、プロジェクトフォーム上のリストボックスのみを詳細モードで印刷できます。LISTBOX GET PRINT INFORMATION コマンドを使用してオブジェクトの印刷を制御できます。

このモードでは:

  • 印刷する行数がオブジェクトの元の高さよりも少ない場合、リストボックスオブジェクトの高さは自動で減少させられます ("空白"行は印刷されません)。他方、オブジェクトの内容に基づき高さが自動で増大することはありません。実際に印刷されるオブジェクトのサイズはLISTBOX GET PRINT INFORMATIONコマンドで取得できます。
  • リストボックスオブジェクトは"そのまま"印刷されます。言い換えれば、ヘッダーやグリッド線の表示、表示/非表示行など、現在の表示パラメタが考慮されます。
    これらのパラメタには印刷される最初の行も含みます。印刷を実行する前にSCROLL LINESを呼び出すと、リストボックスに印刷される最初の行はコマンドで指定した行になります。
  • 自動メカニズムにより、表示可能な行以上の行数を含むリストボックスの印刷が容易になります。連続してPrint objectを呼び出して、それぞれの呼び出し毎に新しい行セットを印刷することができます。LISTBOX GET PRINT INFORMATION コマンドを使用して、印刷が行われている間の状態をチェックできます。

 
プロパティ 

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

 
参照 


階層リストボックスの管理