テクニカルノート06: Using the Grid Object

March 12, 2003

© NSB Corporation. All rights reserved.

Go to English page.
マイクロソフト社のドキュメントも参考にして下さい。

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プロパティがこれを設定します。

プロパティ名

内容

CellAlignment

セル内での値の整列を得る/設定する
0 左-上
1 左-中央(文字列のデフォルト)
2 左-下
3 中央-上
4 中央-中央
5 中央-下
6 右-上
7 右-中央(数値のデフォルト)
8 右-下
9 一般:文字列には左-中央、数値には右-中央

CellBackColor

セル背景色

CellForeColor

セル前景色

CellFontBold

強調体 - True/False

CellFontItalic

斜体 - True/False

CellFontName

フォント名の文字列

CellFontSize

フォントサイズのポイント値(points)

CellFontStrikeThrough

抹消線 - True/False

CellFontUnderline

下線 - True/False

CellHeight

指定セルの高さ

CellLeft

指定セルの左端

CellTop

指定セルの上端

CellWidth

指定セルの幅

CellTextStyle

テキストスタイル
0 Flat (normal text)
1 Raised
2 Inset
3 Raised Light
4 Inset Light

Clip

指定セルに値を得る/設定する

Col

指定セルの縦の欄のポジション

Row

指定セルの横の列のポジション

ColAlignment

指定の横の列の配置方法(Alignment)を設定。CellAlignmentを参照。
GridCtrl1.ColAlignment(2)=9

ColData

縦の欄に指定数値を割当てる
GridCtrl1.ColData(2)=3

RowData

横の列に指定数値を割当てる
GridCtrl1.RowData(1)=4

ColisVisible

True/False
GridCtrl1.ColisVisible(1)

ColPos

左上コーナーからの距離を返す

ColPosition

縦の欄を動かす
GridCtrl1.ColPosition(1)=2

RowPosition

横の列を動かす
GridCtrl1.RowPosition(1)=2

Cols

欄数を得る/指定する

Rows

列数を得る/指定する

ColSel

指定の欄を得る/指定する

RowSel

指定の列を得る/指定する

ColWidth

欄の幅(twips 値)を得る/指定する
GridCtrl1.ColWidth(1)=1440

FillStyle

0:オペレーションは現在のセルに有効, 1:指定セル

FocusRect

0:ボックス無し, 1:軽ボックス, 2:重ボックス

ForeColor

ForeColorSel

GridColor

GridLines

セルを区切るラインを指定
0 ライン無し:セルを区切るラインは見えない
1 ライン(GlidLines用のデフォルト):セルを区切るラインを通常のラインに設定
2 Inset ライン:セルを区切るラインを inset ラインに設定
3 Raised ライン:セルを区切るラインを Raised ラインに設定

GridLineWidth

値は0から10

HighLight

0 ハイライトしない, 1 常時, 2 オブジェクトがフォーカスされる時

LeftCol

最も左にある見えているセルを得る/設定する

Redraw

True/False. 各変更毎に再描画するか?

RowHeight

指定列の高さを得る/設定する
GridCtrl1.RowHeight(1)=1440

RowHeightMin

横の列の最も低い高さ

RowIsVisible

True/False(横の列を見えるように)
GridCtrl1.RowIsVisible(1)

RowPos

左上コーナーからの距離を返す

ScrollBars

0 無, 1 水平, 2 垂直, 3 両方

ScrollTrack

True/False. スクロールバーを使用中にオブジェクトをアップデートするか?

SelectionMode

0 通常選択, 1 列による, 2 欄による

Sort

現在の選択に基ずいて列をソート
0 無
1 一般昇順 - テキストが文字列か数値化を推測
2 一般降順
3 数値昇順 - 文字列を数値に変換
4 数値降順
5 文字列昇順 - 格(大文字/小文字)により違いはなし
6 文字列降順 - 格により違いはなし
7 文字列昇順 - 格により違いあり
8 文字列降順 - 格により違いあり
9 カスタム - Compareイベントを使用して列を比較

Text

現在のセルの内容を得る/設定する

TextArray

cellIndexによって指定されたセルを得る/設定する
cellIndexは row*cols + col によって計算される
GridCtrl1.TextArray(cellIndex)

TextMatrix

指定セルの値を得る/設定する
GridCtrl1.TextMatrix(r,c)

TextStyle

以下の内、一つ :
0 Flat (normal text)
1 Raised
2 Inset
3 Raised Light
4 Inset Light

TopRow

最も上に見えてるセルを得る/設定する

Version

Grid Control のバージョンを返す

WordWrap

True/False

 

メソッド

メソッド名

引数

説明

AddItem

item[,index]

列の追加。多重欄にタブで区切られた文字列を使用。インデックスの指定がない時、新しい列は一番最後に入る。

Clear

 

全てのセルを消去。

Move

left[,top][,width][,height]

グリッドを動かす。showとhideがないため、グリッドを画面外に動かすのに使える。

RemoveItem

index

指定列を削除。

 

イベント

イベントはプログラム内にサブルーチンが存在する場合に、それらのサブルーチンコールをもたらします。サブルーチンには <objectName>_evenNameの名前を付けなければなりません。

例えば、 GridCtrl1でのクリックを捕えるには、次の事が必要です。

sub Grid_LeaveCell
'your code
end sub

イベント名

引数

内容

Click   セルがクリックされた。

Compare

row1,row2

オプション9と共にSortによって呼ばれる。row1がrow2より小さい場合はマイナス1、同じ場合は0、大きい場合は1を返す。

EnterCell

 

セルを選択した時に呼ばれる。

LeaveCell

 

セルの選択が解除された時に呼ばれる。

RowColChange

 

セルに変更があった時に呼ばれる。

Scroll

 

オブジェクトがスクロールされた時に呼ばれる。

SelChange

 

選択が変更された時に呼ばれる。

 

注記

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