[リストへもどる]
一括表示

投稿時間:2002/08/13(Tue) 21:22
投稿者名:bubu
Eメール:
URL :
タイトル:
フレックスグリッドのイベントについて
[02/8/12(月)17:28分]分を転記しました。

はじめまして、よろしくお願いします。
現在、MSFlexGridでセルへのデータ入力というのを参考に
同じような処理のプログラムを作成しています。

MSFlexGridの水平のスクロールバーが表示されている状態で、
ある項目をクリックして、テキストボックスを表示(=入力状態)
にします。
このとき、水平のスクロールバーでスクロールを
行ったり、インテリマウスでスクロールを行った場合、
テキストボックスが表示されたままで、グリッド画面が
スクロールされてしまいます。
そこで、スクロール操作をした場合に、テキストボックスを
非表示にしたいのですが、そういったイベントがあるのでしょうか?
それともコーディングで制御するしかないのでしょうか?

投稿時間: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

投稿時間:2002/08/13(Tue) 21:37
投稿者名:bubu
Eメール:
URL :
タイトル:
(解決&お礼) フレックスグリッドのイベントについて
投稿日 : 2002/08/13(Tue) 21:27 分を転記しました。

ゆうさま、丁寧な回答ありがとうございました。
結局、スクロールを拾うイベントがあったので
それで対応しました。
今回、教えていただいた方法も参考にしたいと思います。

どうもありがとうございました。