グリッドに表示できる行数を取得する |
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