4D v14.3リストボックスオブジェクトの管理 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14.3
リストボックスオブジェクトの管理
|
イベント | 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 Open Detail | Nil | リストボックス (**) |
On Close Detail | Nil | リストボックス (**) |
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)、ソートを表す矢印の表示を強制することができます。しかし列のソート順は変更されません、これを処理するのは開発者の役割です。
選択行の管理は、リストボックスのタイプが配列かセレクションかにより異なります。
注: 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 コマンドを使用してオブジェクトの印刷を制御できます。
このモードでは:
リストボックスの背景色、フォントカラー、そしてフォントスタイルを設定するためにはいくつかの方法があります:
優先順位と継承の原理はそのままです。
同じプロパティに異なる値が複数のレベルにわたって適用された場合、以下の優先順位が適用されます:
優先度高 | セル単位(マルチスタイル使用時) |
列の配列/メソッド | |
リストボックスの配列/メソッド | |
列のプロパティ | |
優先度低 | リストボックスのプロパティ |
例として、リストボックスのプロパティにてリストボックスにフォントスタイルを設定し、列のスタイル配列を使用して列に対して異なるスタイルを設定した場合、後者の方が有効となります。
以下の様な、グレー/淡いグレーを交互に繰り返す行の背景色がリストボックスのプロパティで定義されたリストボックスについて考えます。同時に、行の中の少なくともどれか一つの値が負の値である行に関しては背景色がオレンジ色になるような背景色配列が設定されていたとします:
<>_BgndColors{$i}:=0x00FFD0B0 // オレンジ
<>_BgndColors{$i}:=-255 // デフォルト値
次に、負の値が入っているセルを濃いオレンジの背景色にしたい場合を考えます。これをするためには、それぞれの行に対して背景色を適用します。例えば、<>_BgndColor_1, <>_BgndColor_2 そして<>_BgndColor_3 のようにです。これらの配列の値はリストボックスのプロパティや一般的な背景色の設定より優先されます:
<>_BgndColorsCol_3{2}:=0x00FF8000 // 濃いオレンジ
<>_BgndColorsCol_2{5}:=0x00FF8000
<>_BgndColorsCol_1{9}:=0x00FF8000
<>_BgndColorsCol_1{16}:=0x00FF8000
新しい LISTBOX SET ROW FONT STYLE コマンドと LISTBOX SET ROW COLOR コマンドを使用しても同じ結果を得ることができます。こちらを使った方がコマンドが動的に配列を作成するので、列ごとのスタイル/カラー配列を事前に設定するのをスキップすることが出来るという利点があります。
それぞれの属性(スタイル、カラー、背景色)について、デフォルトの値を使用した場合、属性の継承が行われるようになっています:
このように、オブジェクトに高次のレベルの属性の値を継承させたい場合は、定義するコマンドの中に -255(デフォルト値) を渡すか、対応するスタイル/カラー配列の要素の中に直接渡して下さい。
以下の様な、標準のフォントスタイルで行の背景色が交互に変わるリストボックスを考えます:
以下の様な変更を加えます:
リストボックスを元の状態に戻すには、以下の手順で元に戻せます:
SQLクエリーの結果を直接配列タイプのリストボックスに表示することができます。これによりSQLクエリーの結果を素早く見る方法が提供されま す。SELECTタイプのクエリーのみを使用できます。このメカニズムは外部SQLデータベースには使用できません。
この機能は以下の原則に基づいて動作します:
例
PEOPLEテーブルのすべてのフィールドのデータを取得し、vlistboxという変数名のリストボックスに結果を表示します。これを行うためのメソッドは以下の通りです:
Begin SQL
SELECT * FROM PEOPLE INTO <<vlistbox>>
End SQL
プロダクト: 4D
テーマ: リストボックス
ランゲージリファレンス ( 4D v14 R3)
ランゲージリファレンス ( 4D v14 R2)
ランゲージリファレンス ( 4D v14.3)
ランゲージリファレンス ( 4D v14 R4)
Inherited from : リストボックスオブジェクトの管理 ( 4D v13.5)