4D v13.4リストボックスオブジェクトの管理 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v13.4
リストボックスオブジェクトの管理
|
イベント | Object with focus | Object 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 Footer Click | リストボックス | フッター |
On After Sort | リストボックス | ヘッダ |
(*) リストボックス中でフォーカスが更新されると、列へのポインターが返されます。フォームレベル上でフォーカスが更新されると、リストボックスへのポインターが返されます。列のオブジェクトメソッドのコンテキストでは、列へのポインターが返されます。
(**) 列のオブジェクトメソッドのコンテキストでは実行されません。
(1) 列へのポインターが返された時、指し示すオブジェクトはリストボックスのタイプによります。配列型のリストボックスにおいて、OBJECT Get pointer("ユーザーインターフェース"テーマ)は、フォーカスを取得したリストボックスの列(つまり配列)へのポインターを返します。4Dのポインターのメカニズムを利用し、修正された配列の項目番号を調べることができます。例えば、ユーザーが列col2の5行目を変更した場合は、次のようになります:
$Column:=OBJECT Get pointer
// $Columnにはcol2へのポインタが含まれる
$Row:=$Column-> // $Row は 5
セレクション型のリストボックスで、OBJECT Get pointerは以下を返します:
OBJECT SET SCROLL POSITION コマンド("オブジェクトプロパティ"テーマ)をリストボックスで使用できます。スクロールは、リストボックスの最初に選択された行または指定された行を表示させます。
EDIT ITEMコマンド("入力制御"テーマ)を使用して、リストボックスオブジェクトのセルを編集モードに移行することができます。
REDRAWコマンド ("ユーザーインターフェーステーマ") がセレクション表示モードのリストボックスに適用されると、コマンドはリストボックス中に表示されたデータの更新を実行します。
Displayed line number コマンド (“” テーマ) はリストボックスオブジェクトのOn Display Detail フォームイベントのコンテキストで動作します。
リストボックス管理、特にドラッグ&ドロップや並び替え操作を管理するために、特別なフォームイベントを使用できます。詳細については、Form Eventコマンドの節を参照してください。
リストボックス中でのデータのドラッグ&ドロップ管理は、Drop position と DRAG AND DROP PROPERTIESコマンドでサポートされます。これらのコマンドは特にリストボックスに適用されます。
行や列のドラッグ&ドロップと混同しないように注意してください。これらはLISTBOX MOVED ROW NUMBER や LISTBOX MOVED COLUMN NUMBER コマンドでサポートされます。
リストボックスセルを入力可能にするには、以下の条件を満たす必要があります:
2つの配列で構築されるリストボックスを考えてみましょう。ひとつは日付でもう一つはテキストです。日付配列は入力不可に設定されていますが、テキスト配列は日付が過去でない場合に入力可とします。
arrText列のメソッドは以下の通りです:
Case of
:(Form event=On Before Data Entry) // セルがフォーカスを得た
LISTBOX GET CELL POSITION(*;"lb";$col;$row)
// セルの特定
If(arrDate{$row}<Current date) // 日付が昨日以前なら
$0:=-1 // セルは入力不可
Else
// そうでなければ入力可
End if
End case
注: 4D v13よりOn Before Data EntryイベントはOn Getting Focusより前に生成されます。
ヘッダがクリックされると、デフォルトでリストボックスは自動的に標準的なカラムの並び替えを行います。標準的な並び替えとは、列の値を文字順に並べ替え、続けてクリックされると昇順/降順を交互に切り替えます。すべての列は常に自動で同期されます。
リストボックスの並び替え可プロパティの選択を解除すると、ユーザによる標準の並び替えを禁止することができます。
開発者は、LISTBOX SORT COLUMNSコマンドを使用するか、またはOn Header ClickとOn After Sortフォームイベント (Form eventコマンドの節を参照) と4Dの配列管理コマンドを組み合わせて、独自の並び替えを設定することができます。
Note: 列のプロパティ"並び替え可"は、ユーザによる標準の並び替えにのみ影響を与えます。LISTBOX SORT COLUMNSコマンドでは、このプロパティが考慮されません。
列ヘッダに関連付けられた変数の値を使用すると、列の現在の並び替え状況(読み込み)や並び替え矢印の表示など、追加情報を管理することができます。
変数の値を設定して (例えばHeader2:=2)、ソートを表す矢印の表示を強制することができます。しかし列のソート順は変更されません、これを処理するのは開発者の役割です。
選択行の管理は、リストボックスのタイプが配列かセレクションかにより異なります。
セレクションタイプのリストボックス: 選択行は"ハイライトセット"と呼ばれるセットにより管理されます。このセットはリストボックスのプロパティリストで定義します。このセットは4Dが自動で管理します。ユーザがリストボックス中で1つ以上の行を選択すると、セットが即座に更新されます。他方、プログラムからリストボックスの選択を更新するた めに、"セット"テーマのコマンドを使用することができます。配列タイプのリストボックス: LISTBOX SELECT ROWコマンドを使用して、プログラムからリストボックスの行を選択できます。
リストボックスオブジェクトに関連付けられた変数を使用して、オブジェクト行の選択の取得、設定、保存を行います。
この変数はブール配列で、4Dが自動的に作成・保守を行います。この配列のサイズは、リストボックスのサイズにより決定されます。配列には列に関連付けられた最も小さな配列と同じ数の要素が含まれます。
この配列の各要素には、対応する行が選択された場合にはTrueが、それ以外の場合はFalseが設定されます。4Dは、ユーザの動作に応じてこの配列の内容を更新します。これとは逆に、この配列要素の値を変更して、リストボックス中の選択行を変更することができます。
他方、この配列への要素の挿入や削除はできず、行のタイプ変更もできません。
注: Count in arrayコマンドを使用して、選択された行の数を調べることができます。
例えば、以下のメソッドは配列タイプのリストボックスで、最初の行の選択を切り替えます:
` tBListBoxはフォーム上のリストボックス変数の名前
If(tBListBox{1}=True)
tBListBox{1}:=False
Else
tBListBox{1}:=True
End if
4D v12より、リストボックスを印刷することができます。2つの印刷モード、フォームオブジェクトのようにリストボックスを印刷するために使用できるプレビューモードと、フォーム内でリストボックスオブジェクト自身の印刷を制御できる詳細モードがあります。フォームエディタでリストボックスオブジェクトに"印刷"アピアランスを適用できる点に留意してください。
プレビューモードでのリストボックスの印刷は、標準の印刷コマンドやプリントメニューを使用して、リストボックスを含むフォームを直接印刷します。リストボックスはフォーム上に表示されている通りに印刷されます。このモードではオブジェクトの印刷をち密に制御することはできません。特に表示されている以上の行を印刷することはできません。
このモードでは、リストボックスの印刷はPrint objectコマンドを使用してプログラムにより実行されます。そのため、プロジェクトフォーム上のリストボックスのみを詳細モードで印刷できます。LISTBOX GET PRINT INFORMATION コマンドを使用してオブジェクトの印刷を制御できます。
このモードでは:
SQLクエリーの結果を直接配列タイプのリストボックスに表示することができます。これによりSQLクエリーの結果を素早く見る方法が提供されます。SELECTタイプのクエリーのみを使用できます。このメカニズムは外部SQLデータベースには使用できません。
この機能は以下の原則に基づいて動作します:
例
PEOPLEテーブルのすべてのフィールドのデータを取得し、vlistboxという変数名のリストボックスに結果を表示します。これを行うためのメソッドは以下の通りです:
Begin SQL
SELECT * FROM PEOPLE INTO <<vlistbox>>
End SQL
プロダクト: 4D
テーマ: リストボックス