グリッドに表示できる行数を取得する
                                                        玄関へお回り下さい。
sAki さんから投稿頂いたスクロールの方法とグリッドに一度に表示できる最大行数を取得する関数を投稿頂きましたので紹介します。
別途 サンプルを頂いております。参考にして下さい。機能は下記の通りです

機能
 グリッドの内容を変更できる。
 エンターキーでの移動が可能。
 直接文字を入力すると上書きモード
 エンターかマウスのダブルクリックで、挿入モード
 自動でスクロール。
 おまけで、列の色変える関数もあります。


                     (043)
Private Sub Text1_KeyPress(KeyAscii As Integer)

Dim goukei As Single
Dim heikin As Single

If KeyAscii = 13 Then
   KeyAscii = 0
   MSFlexGrid1.Text = text1.Text
  
  
If MSFlexGrid1.Row = MSFlexGrid1.Rows - 1 And _
           MSFlexGrid1.Col = MSFlexGrid1.Cols - 1
Then
      
'最後の行になったら最初の行へ移動
       MSFlexGrid1.Row = MSFlexGrid1.FixedRows
       MSFlexGrid1.Col = MSFlexGrid1.FixedCols
       MSFlexGrid1.TopRow = MSFlexGrid1.FixedRows
       MSFlexGrid1.LeftCol = MSFlexGrid1.FixedCols
      
  
ElseIf MSFlexGrid1.Col = MSFlexGrid1.Cols - 1 Then
      
'次の行の先頭へ折り返す
       MSFlexGrid1.Row = MSFlexGrid1.Row + 1
       MSFlexGrid1.Col = MSFlexGrid1.FixedCols
       MSFlexGrid1.LeftCol = MSFlexGrid1.FixedCols
       
If MSFlexGrid1.Row >= Fn_VisibleRows(MSFlexGrid1) Then
           
'行のスクロール
            MSFlexGrid1.TopRow = MSFlexGrid1.TopRow + 1
       
End If
  
Else

       
If MSFlexGrid1.Col >= Fn_VisibleCols(MSFlexGrid1) Then
           
'列のスクロール
            MSFlexGrid1.LeftCol = MSFlexGrid1.LeftCol + 1
       
End If
       
      
'セルを1つ移動
       MSFlexGrid1.Col = MSFlexGrid1.Col + 1
       text1.Visible = True
       text1.SetFocus
      
'MSFlexGrid1.SetFocus
  
End If
   MSFlexGrid1.Text = text1.Text
   text1.Text = ""
End If
Fn_TxtMoveFlex text1, MSFlexGrid1

End Sub



Public Function Fn_VisibleRows(grdName As MSFlexGrid)
Dim lngUsingRows As Long
'グリッドに一度に表示できる最大行数を返す。

For Cnt_Rows = 0 To grdName.Rows - 1
    lngUsingRows = lngUsingRows + grdName.RowHeight(Cnt_Rows)
   
If grdName.Height <= lngUsingRows Then
        Fn_VisibleRows = Cnt_Rows - grdName.FixedRows - 1
       
Exit For
   
Else
        Fn_VisibleRows = grdName.Rows
   
End If
Next Cnt_Rows

End Function


Public Function Fn_VisibleCols(grdName As MSFlexGrid)
Dim lngUsingCols As Long
'グリッドに一度に表示できる最大列数を返す。

For Cnt_Cols = 0 To grdName.Cols - 1
    lngUsingCols = lngUsingCols + grdName.ColWidth(Cnt_Cols)
   
If grdName.Width <= lngUsingCols Then
        Fn_VisibleCols = Cnt_Cols - grdName.FixedCols
       
Exit For
   
Else
        Fn_VisibleCols = grdName.Cols
   
End If
Next Cnt_Cols

End Function




02/01/05