4D v16.3リストボックスオブジェクトの管理 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
リストボックスオブジェクトの管理
リストボックスオブジェクトの管理
このテーマのコマンドは、リストボックス型のフォームオブジェクトを扱うために設けられました。 リストボックスを使用するとデータを列と選択可能な行の形式で表現できます。さらに値の入力や列のソート、階層表示、行ごとの色の変更などさらに数多くの機能が用意されています。 4Dのフォームエディタでリストボックスオブジェクトタイプを完全に設定することが可能で、またプログラムから管理することもできます。フォームエディタでのリストボックスタイプのオブジェクトの作成および設定に関する詳細はデザインリファレンスマニュアルを参照してください。 リストボックスオブジェクトには1つ以上の列を含めることができます。それぞれの列には4D配列またはレコードのセレクションを関連付けることができます。レコードセレクションの場合、それぞれの列にはフィールドまたは式を関連付けます。 このタイプのリストボックスでは、それぞれの列に4Dの1次元配列を割り当てなければなりません。ポインター配列を除きすべてのタイプの配列を使用できま す。フォームエディターやOBJECT SET FORMATコマンドを使用して、列ごとに表示フォーマットを指定できます。 リストボックスのハイレベルコマンド (LISTBOX INSERT ROWSやLISTBOX DELETE ROWS等) や配列操作コマンドを使用して、列の値 (データ入力や表示) を管理します。 ARRAY TEXT(ColumnName;size) リストを使用することもできます:
LIST TO ARRAY("ListName";ColumnName) このタイプのリストボックスでは、列ごとにフィールドや式を割り当てます。それぞれの行はセレクションのレコードを基に評価されます。セレクションはカレントセレクションまたは命名セレクションです。 リストボックスの列に式を割り当てることができます。式は1つ以上のフィールドから構成できます (例えば [Employees]LastName+“ ”+[Employees]FirstName)。または単にフォーミュラも使用できます (例えば String(Milliseconds))。式にはプロジェクトメソッド、変数、配列要素も指定できます。 LISTBOX SET TABLE SOURCE コマンドを使用して、リストボックスに関連付けるテーブルを変更できます。 リストボックスオブジェクトは、以下4つの項目で構成されます:
リストボックスオブジェクトとは別に、各オブジェクトには以下のような名前が与えられます: 列はColumnN、ヘッダーはHeaderN、フッターはFooterN (Nは番号)。 各 項目タイプには独自の特性ならびに他の項目と共有する特性があります。例えば文字のフォントはリストボックスオブジェクトに一括して割り当てることも、列やヘッダー、フッターに対して個別に割り当てることもできます。これとは逆に、入力プロパティは列に対してのみ指定することができます。 このルールはリストボックスに使用できる “オブジェクトプロパティ” テーマのコマンドに対して適用されます。その機能に応じて、各コマンドをリストボックスや 列、ヘッダー、フッターに対して使用します。作業を行おうとする項目のタイプを設定するには、その項目に関連付けた名前や変数を渡します。 次の表は、リストボックスに使用できる “オブジェクトプロパティ” テーマのそれぞれのコマンドのスコープの詳細についてのまとめです: 注: 配列型のリストボックスではスタイル、フォントカラー、背景色、行ごとの表示を個別に指定できます。これはリストボックスのプロパティリストを使用して関連付けた配列を通して行います。これらの配列名はLISTBOX GET ARRAYS コマンドを使用して取得できます。 リストボックスオブジェクトやリストボックスの各列に対し、オブジェクトメソッドを付加することができます。オブジェクトメソッドの呼び出しは、次の順で行われます:
ヘッダーやフッターにOBJECT SET VISIBLEコマンドを使用すると、このコマンドに渡した引数に関わらず、そのリストボックス中のすべてのヘッダーやフッターが対象になります。例えばOBJECT SET VISIBLE(*;"header3";False)という命令の場合、指定したヘッダーだけではなく、header3が属するリストボックスの全ヘッダーを非表示にします。 Object with focusやObject current定数とともに使用されるOBJECT Get pointer (以前のFocus objectとSelf) はリストボックスやリストボックス列のオブジェクトメソッドで使用できます。これらはフォームイベントのタイプに基づきリストボックス、リストボックス列(1)、ヘッダー変数、またはフッター変数へのポインターを返します。以下の表に動作をまとめます:
(*) リストボックス中でフォーカスが更新されると、列へのポインターが返されます。フォームレベル上でフォーカスが更新されると、リストボックスへのポインターが返されます。列のオブジェクトメソッドのコンテキストでは、列へのポインターが返されます。 (1) 列へのポインターが返された時、指し示すオブジェクトはリストボックスのタイプによります。配列型のリストボックスにおいて、OBJECT Get pointer("ユーザーインターフェース"テーマ)は、フォーカスを取得したリストボックスの列(つまり配列)へのポインターを返します。 4Dのポインターのメカニズムを利用し、修正された配列の項目番号を調べることができます。例えば、ユーザーが列col2の5行目を変更した場合は、次の ようになります: $Column:=OBJECT Get pointer セレクション型のリストボックスで、OBJECT Get pointerは以下を返します:
OBJECT SET SCROLL POSITION コマンド("オブジェクトプロパティ"テーマ)をリストボックスで使用できます。スクロールは、リストボックスの最初に選択された行または指定された行を表示させます。 EDIT ITEMコマンド("入力制御"テーマ)を使用して、リストボックスオブジェクトのセルを編集モードに移行することができます。 REDRAWコマンド ("ユーザーインターフェーステーマ") がセレクション表示モードのリストボックスに適用されると、コマンドはリストボックス中に表示されたデータの更新を実行します。 Displayed line number コマンド (“” テーマ) はリストボックスオブジェクトのOn Display Detail フォームイベントのコンテキストで動作します。 リストボックス管理、特にドラッグ&ドロップや並び替え操作を管理するために、特別なフォームイベントを使用できます。詳細については、Form Eventコマンドの節を参照してください。 リストボックス中でのデータのドラッグ&ドロップ管理は、Drop position と DRAG AND DROP PROPERTIESコマンドでサポートされます。これらのコマンドは特にリストボックスに適用されます。 リストボックスセルを入力可能にするには、以下の条件を満たす必要があります:
2つの配列で構築されるリストボックスを考えてみましょう。ひとつは日付でもう一つはテキストです。日付配列は入力不可に設定されていますが、テキスト配列は日付が過去でない場合に入力可とします。 arrText列のメソッドは以下の通りです: Case of 注: 4D v13よりOn Before Data EntryイベントはOn Getting Focusより前に生成されます。 データの整合性を保つため、セレクションタイプのリストボックスにおいては、レコードに対する変更はセル内の編集が確定されたときに保存され (On saving an existing record トリガーが設定されていれば、コールされます)、その後 On Data Change イベントが実行されます。典型的なデータ入力・編集操作にともなって発生するイベントシーケンスは次のようになります:
ヘッダがクリックされると、デフォルトでリストボックスは自動的に標準的なカラムの並び替えを行います。標準的な並び替えとは、列の値を文字順に並べ替え、続けてクリックされると昇順/降順を交互に切り替えます。すべての列は常に自動で同期されます。 リストボックスの並び替え可プロパティの選択を解除すると、ユーザによる標準の並び替えを禁止することができます。 開発者は、LISTBOX SORT COLUMNSコマンドを使用するか、またはOn Header ClickとOn After Sortフォームイベント (Form eventコマンドの節を参照) と4Dの配列管理コマンドを組み合わせて、独自の並び替えを設定することができます。 Note: 列のプロパティ"並び替え可"は、ユーザによる標準の並び替えにのみ影響を与えます。LISTBOX SORT COLUMNSコマンドでは、このプロパティが考慮されません。 列ヘッダに関連付けられた変数の値を使用すると、列の現在の並び替え状況(読み込み)や並び替え矢印の表示など、追加情報を管理することができます。
変数の値を設定して (例えばHeader2:=2)、ソートを表す矢印の表示を強制することができます。しかし列のソート順は変更されません、これを処理するのは開発者の役割です。On Header Clickイベントにともなうソート処理と並び替え矢印の管理をオブジェクトメソッドにて行う場合には、戻り値に「-1」を返すとヘッダーの自動アクションを阻止できます。 選択行の管理は、リストボックスのタイプが配列かセレクションかにより異なります。
注: Count in arrayコマンドを使用して、選択された行の数を調べることができます。 例えば、以下のメソッドは配列タイプのリストボックスで、最初の行の選択を切り替えます: ` tBListBoxはフォーム上のリストボックス変数の名前 4D v12より、リストボックスを印刷することができます。2つの印刷モード、フォームオブジェクトのようにリストボックスを印刷するために使用できるプレビューモードと、フォーム内でリストボックスオブジェクト自身の印刷を制御できる詳細モードがあります。フォームエディタでリストボックスオブジェクトに"印刷"アピアランスを適用できる点に留意してください。 プレビューモードでのリストボックスの印刷は、標準の印刷コマンドやプリントメニューを使用して、リストボックスを含むフォームを直接印刷します。リストボックスはフォーム上に表示されている通りに印刷されます。このモードではオブジェクトの印刷をち密に制御することはできません。特に表示されている以上の行を印刷することはできません。 このモードでは、リストボックスの印刷はPrint object コマンドを使用してプログラムにより実行されます(プロジェクトフォームとテーブルフォームがサポートされています)。LISTBOX GET PRINT INFORMATION コマンドを使用してオブジェクトの印刷を制御できます。 このモードでは:
リストボックスの背景色、フォントカラー、そしてフォントスタイルを設定するためにはいくつかの方法があります:
優先順位と継承の原理はそのままです。 同じプロパティに異なる値が複数のレベルにわたって適用された場合、以下の優先順位が適用されます:
例として、リストボックスのプロパティにてリストボックスにフォントスタイルを設定し、列のスタイル配列を使用して列に対して異なるスタイルを設定した場合、後者の方が有効となります。 以下の様な、グレー/淡いグレーを交互に繰り返す行の背景色がリストボックスのプロパティで定義されたリストボックスについて考えます。同時に、行の中の少なくともどれか一つの値が負の値である行に関しては背景色がオレンジ色になるような背景色配列が設定されていたとします: <>_BgndColors{$i}:=0x00FFD0B0 // オレンジ 次に、負の値が入っているセルを濃いオレンジの背景色にしたい場合を考えます。これをするためには、それぞれの行に対して背景色を適用します。例えば、<>_BgndColor_1, <>_BgndColor_2 そして<>_BgndColor_3 のようにです。これらの配列の値はリストボックスのプロパティや一般的な背景色の設定より優先されます: <>_BgndColorsCol_3{2}:=0x00FF8000 // 濃いオレンジ 新しい LISTBOX SET ROW FONT STYLE コマンドと LISTBOX SET ROW COLOR コマンドを使用しても同じ結果を得ることができます。こちらを使った方がコマンドが動的に配列を作成するので、列ごとのスタイル/カラー配列を事前に設定するのをスキップすることが出来るという利点があります。 それぞれの属性(スタイル、カラー、背景色)について、デフォルトの値を使用した場合、属性の継承が行われるようになっています:
このように、オブジェクトに高次のレベルの属性の値を継承させたい場合は、定義するコマンドの中に lk inherited (デフォルト値) を渡すか、対応するスタイル/カラー配列の要素の中に直接渡して下さい。 以下の様な、標準のフォントスタイルで行の背景色が交互に変わるリストボックスを考えます: 以下の様な変更を加えます:
リストボックスを元の状態に戻すには、以下の手順で元に戻せます:
配列型のリストボックス内にて、それぞれの行に対して"非表示"、"無効化"、"選択可能"のインターフェースプロパティを設定する事ができます。 この設定は、LISTBOX SET ARRAYコマンドあるいはプロパティリストを用いて指定できる行管理配列を使用する事で管理可能です: 行管理配列は倍長整数型で、かつリストボックスと同じ行数を含んでいる必要があります。詳細な情報については、リストボックス特有のプロパティの章を参照して下さい。 行管理配列のそれぞれの要素は、リストボックス内の対応する行のイターフェースステータスを定義します。"リストボックス"テーマ内の定数を使用する事で、三つのインターフェースプロパティが利用可能です:
行のステータスを変えるためには、対応する配列の要素に適切な定数を設定するだけです。例えば、10行目を選択可能に設定したい場合、以下のように書く事ができます: aLControlArr{10}:=lk row is not selectable 複数のインターフェースプロパティを同時に定義する事もできます: aLControlArr{8}:=lk row is not selectable+lk row is disabled 要素に対してプロパティを設定すると、(再設定しない限り)その要素の他の値を上書きするという点に注意して下さい。例えば: aLControlArr{6}:=lk row is disabled+lk row is not selectable //6行目を無効化しかつ選択不可に設定する SQLクエリーの結果を直接配列タイプのリストボックスに表示することができます。これによりSQLクエリーの結果を素早く見る方法が提供されま す。SELECTタイプのクエリーのみを使用できます。このメカニズムは外部SQLデータベースには使用できません。 この機能は以下の原則に基づいて動作します:
例 Begin SQL
参照
|
プロパティ
プロダクト: 4D
履歴
変更: 4D v15 R4 ARTICLE USAGE
ランゲージリファレンス ( 4D v16) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||