投稿日 | : 2002/08/13(Tue) 21:35 |
投稿者 | : ゆう(U) |
Eメール | : |
URL | : |
タイトル | : Re: フレックスグリッドのイベントについて |
投稿日 : 2002/08/13(Tue) 17:45 分を転記しました。
簡単なサンプルを書いてみました・・・
テキストボックスへの初期表示等は組み込んでいません、
スクロール、セルの移動、サイズ変更による表示域への
移動等に対処できていると思います。
※機能不足な点は別途追加してみてください。
サンプル)
[使用コントロール]
MSFlexGrid コントロール1個(MSFlexGrid1)
テキストボックス コントロール1個(Text1)
[コード]
Option Explicit
Private Declare Function SetParent Lib "user32" _
(ByVal hWndChild As Long, _
ByVal hWndNewParent As Long) As Long
Private Sub Form_Load()
Dim i As Long
With MSFlexGrid1
.Rows = 20
.Cols = 6
For i = 0 To .Rows * .Cols - 1
.TextArray(i) = CStr(i)
Next
End With
Call SetParent(Text1.hWnd, MSFlexGrid1.hWnd)
With Text1
.BorderStyle = vbBSNone
.TabStop = False
.ZOrder vbBringToFront
End With
Call MoveText
End Sub
Private Sub Form_Resize()
With Me
MSFlexGrid1.Move .ScaleLeft, .ScaleTop, .ScaleWidth, .ScaleHeight
Call MoveText
End With
End Sub
Private Sub MSFlexGrid1_EnterCell()
Call MoveText
End Sub
Private Sub MSFlexGrid1_Scroll()
Call MoveText
End Sub
Private Sub MoveText()
Dim sngTwipsPerPixelX As Single
Dim sngTwipsPerPixelY As Single
sngTwipsPerPixelX = Screen.TwipsPerPixelX
sngTwipsPerPixelY = Screen.TwipsPerPixelY
With MSFlexGrid1
If .ColIsVisible(.Col) And _
.RowIsVisible(.Row) Then
Text1.Visible = True
Text1.Move .ColPos(.Col) + sngTwipsPerPixelX, _
.RowPos(.Row) + sngTwipsPerPixelY, _
.ColWidth(.Col) - sngTwipsPerPixelX * 3, _
.RowHeight(.Row) - sngTwipsPerPixelY * 3
Else
Text1.Visible = False
End If
.Refresh
End With
End Sub