|
テクニカルノート06: Using the Grid ObjectMarch 12, 2003© NSB Corporation. All rights reserved. |
マイクロソフト社のドキュメントも参考にして下さい。
Gridオブジェクトは表にしたデータの表示と操作を行います。文字列を含んでいる表のソート、合併、及び構成を行う自在さを兼ねています。Gridオブジェクトは"ActiveX Control Objects 1.0"の一部として含まれており、MicrosoftのWebサイトからダウンロードが可能です。お使いのシステムにこのモジュールを読ませる方法につきましては、テクニカルノート01を参照して下さい。
これは「ソーティング」データ表示を実行する為に使用出来、これによりカテゴリー別にインフォメーションを集め、ユーザーに、インフォメーションの順番変更を可能にさせたり、エディット可能なスプレッドシートの作成を可能にします。
Gridオブジェクトを作成する為に、以下のようにコマンドを使用して下さい。
addObject "Grid","Grid",0,0,215,150
プロパティは値を設定するか、または値を返します。シンタックスは、
msgbox Grid.CellAlignment 'get the current CellAlignment
Grid.CellAlignment=9 'set the CellAlignment to general
ほとんどのプロパティは指定セル(cell)または全ての選択されているセルを参照します。FillStyleプロパティがこれを設定します。
プロパティ名 |
内容 |
|
セル内での値の整列を得る/設定する |
|
セル背景色 |
|
セル前景色 |
|
強調体 - True/False |
|
斜体 - True/False |
|
フォント名の文字列 |
|
フォントサイズのポイント値(points) |
|
抹消線 - True/False |
|
下線 - True/False |
|
指定セルの高さ |
|
指定セルの左端 |
|
指定セルの上端 |
|
指定セルの幅 |
|
テキストスタイル |
|
指定セルに値を得る/設定する |
|
指定セルの縦の欄のポジション |
|
指定セルの横の列のポジション |
|
指定の横の列の配置方法(Alignment)を設定。CellAlignmentを参照。 |
|
縦の欄に指定数値を割当てる |
|
横の列に指定数値を割当てる |
|
True/False |
|
左上コーナーからの距離を返す |
|
縦の欄を動かす |
|
横の列を動かす |
|
欄数を得る/指定する |
|
列数を得る/指定する |
|
指定の欄を得る/指定する |
|
指定の列を得る/指定する |
|
欄の幅(twips 値)を得る/指定する |
|
0:オペレーションは現在のセルに有効, 1:指定セル |
|
0:ボックス無し, 1:軽ボックス, 2:重ボックス |
|
色 |
|
色 |
|
色 |
|
セルを区切るラインを指定 |
|
値は0から10 |
|
0 ハイライトしない, 1 常時, 2 オブジェクトがフォーカスされる時 |
|
最も左にある見えているセルを得る/設定する |
|
True/False. 各変更毎に再描画するか? |
|
指定列の高さを得る/設定する |
|
横の列の最も低い高さ |
|
True/False(横の列を見えるように) |
|
左上コーナーからの距離を返す |
|
0 無, 1 水平, 2 垂直, 3 両方 |
|
True/False. スクロールバーを使用中にオブジェクトをアップデートするか? |
|
0 通常選択, 1 列による, 2 欄による |
|
現在の選択に基ずいて列をソート |
|
現在のセルの内容を得る/設定する |
|
cellIndexによって指定されたセルを得る/設定する |
|
指定セルの値を得る/設定する |
|
以下の内、一つ : |
|
最も上に見えてるセルを得る/設定する |
|
Grid Control のバージョンを返す |
|
True/False |
メソッド名 |
引数 |
説明 |
|
|
列の追加。多重欄にタブで区切られた文字列を使用。インデックスの指定がない時、新しい列は一番最後に入る。 |
|
|
全てのセルを消去。 |
|
|
グリッドを動かす。showとhideがないため、グリッドを画面外に動かすのに使える。 |
|
|
指定列を削除。 |
イベントはプログラム内にサブルーチンが存在する場合に、それらのサブルーチンコールをもたらします。サブルーチンには <objectName>_evenName
の名前を付けなければなりません。
例えば、 GridCtrl1でのクリックを捕えるには、次の事が必要です。
sub Grid_LeaveCell
'your code
end sub
イベント名 |
引数 |
内容 |
Click
|
セルがクリックされた。 | |
|
|
オプション9と共にSortによって呼ばれる。row1がrow2より小さい場合はマイナス1、同じ場合は0、大きい場合は1を返す。 |
|
|
セルを選択した時に呼ばれる。 |
|
|
セルの選択が解除された時に呼ばれる。 |
|
|
セルに変更があった時に呼ばれる。 |
|
|
オブジェクトがスクロールされた時に呼ばれる。 |
|
|
選択が変更された時に呼ばれる。 |
1. Row(列)及び Col(欄)プロパティはGridでのカレント(フォーカスを持つ)セルを指定します。コード内でカレントセルを指定することが出来ます。または、ユーザが実行時にマウスや矢印ポインターを使用して指定出来ます。Textプロパティはカレントセルの内容を参照します。
2. WordWrap プロパティがTrueに設定されていて、セル内のテキストが表示するには長過ぎる場合、テキストは同じセル内で次の行に続きます。このテキストを見せる為には、セルの幅(ColWidth property)を増やすか、セルの高さ(RowHeight property)を増やす必要があります。
3. Cols 及び Rows プロパティは Grid コントロール内の欄及び列の数を決めるのに使われます。
4. NS Basic/CEのユーザである Russ Smith 氏が2つのグリッドが一緒にスクロールするトピックについて説明してくれています。
タイトルグリッドがレコードグリッドと共にスクロールしてしまう問題を解決しました。以下のSubは、最初にレコードグリッドを読み込んだ時と、毎回 _Scroll() メソッドが呼ばれる時に、呼ばれます。グリッドを読み込んだ時は、recTitle.colData(0) を ミ1 に設定して、再描画を強制します。
Sub ShowTitles()
If recTitle.colData(0)<>recGrid.leftCol Then
recTitle.redraw = False
recTitle.cols = RS.fields.Count 'just to be sure we have enough slots
Dim gC
gC = recGrid.leftCol
Do
recTitle.textMatrix(0,gC-recGrid.leftCol)=RS.fields(gC).name
gC=gC+1
Loop While recGrid.ColIsVisible(gC)
recTitle.colData(0)=recGrid.leftCol
recTitle.Cols = gC-recGrid.leftCol
recTitle.redraw = True
End If
End Sub
ご覧になって分かるように、他のグリッドはスクロールしませんが、タイトルは正しい欄の上に表示されてます。secTitle.leftCol を recGrid.leftCol に設定するのも試しましたが、それは無視されました。
5. Russ 氏がさらに、ADOCEデータベースからGridコントロールへデータを与える場合についても説明しています。
レコードデータと共にグリッドを読み込む時、recGrid.rowData(idx) を使用して RS.absolutePosition を保管するならば、以下のコードがレコードポインターをグリッドで選択されているのと同じレコードに設定します。
RS.Move recGrid.rowData(recGrid.rowSel)-1, adBookmarkFirst
6. 範囲プロパティ(Left, Top, Width, Height)のどれか1つを変更する場合、他の3つは ミ1 に設定されます。これはバグです。マイクロソフトが次のリリースまでに修正することを期待しましょう。
Rem demonstrate use of Grid Object Option Explicit addobject "gridctrl.gridctrl.1","grid",0,0,215,150 grid.cols=3 grid.rows=9 makeButton "Text","Text",225,30,50,20 makeButton "Clear","Clear",225,0,50,20 makeButton "Bold","B",300,0,20,20 makeButton "Italic","I",325,0,20,20 makeButton "Underline","U",350,0,20,20 makeButton "Strike","S",375,0,20,20 form_load Private Sub makeButton(name, prompt, x,y,w,h) addObject "commandButton",name & "Btn",x,y,w,h execute name & "Btn.Text=" & chr(34) & prompt & chr(34) end sub Sub BoldBtn_Click() Dim n n = grid.CellFontBold If n Then grid.CellFontBold = False Else grid.CellFontBold = True End If End Sub Sub ClearBtn_Click() grid.Clear End Sub Sub Form_Load() grid.TextMatrix(0, 0) = "Kenny" grid.TextMatrix(1, 0) = "Carmen" grid.TextMatrix(2, 0) = "Kyle" grid.TextMatrix(3, 0) = "Eric" grid.TextMatrix(0, 1) = "Grossman" grid.TextMatrix(1, 1) = "Crabtree" grid.TextMatrix(2, 1) = "Garrison" grid.TextMatrix(3, 1) = "Cartman" grid.TextMatrix(0, 2) = "Denver" grid.TextMatrix(1, 2) = "Boulder" grid.TextMatrix(2, 2) = "South Park" grid.TextMatrix(3, 2) = "Lakeview" grid.FillStyle = 1 grid.Row = 0 grid.Col = 0 grid.ColSel = 2 grid.CellFontBold = True grid.CellFontUnderline = True grid.Col = 0 End Sub Sub ItalicBtn_Click() Dim n n = grid.CellFontItalic If n Then grid.CellFontItalic = False Else grid.CellFontItalic = True End If End Sub Sub StrikeBtn_Click() Dim n n = grid.CellFontStrikeThrough If n Then grid.CellFontStrikeThrough = False Else grid.CellFontStrikeThrough = True End If End Sub Sub TextBtn_Click() grid.Text = inputBox("Input Text","Grid Object") End Sub Sub UnderlineBtn_Click() Dim n n = grid.CellFontUnderline If n Then grid.CellFontUnderline = False Else grid.CellFontUnderline = True End If End Sub