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

投稿時間:2003/04/26(Sat) 11:51
投稿者名:とくダネ
Eメール:
URL :
タイトル:
MSFlexGrid で画面に一度に表示できる行数、列数の取得
Cols = 20, Rows = 10 の MSFlexGrid があります。
下の四角の記号が一つのセルに対応しています。

  012345678910111213141516171819
0□□□□□□□□□□□□□□□□□□□□
1□□□■■■■■■■■■□□□□□□□□
2□□□■■■■■■■■■□□□□□□□□
3□□□■■■■■■■■■□□□□□□□□
4□□□■■■■■■■■■□□□□□□□□
5□□□■■■■■■■■■□□□□□□□□
6□□□■■■■■■■■■□□□□□□□□
7□□□■■■■■■■■■□□□□□□□□
8□□□□□□□□□□□□□□□□□□□□
9□□□□□□□□□□□□□□□□□□□□

MSFlexGrid 自体の大きさが小さく
一度にすべてのセルを表示させることができないため、
スクロールさせています。
(MSFlexGrid に一度に表示できる範囲は上の黒四角の部分。)
その表示できる範囲の左上のセルは、
LeftCol, TopRow で取得できるのですが、
(この場合、 LeftCol = 3, TopRow = 1 です。)
行数、列数はどのように取得するのでしょうか?
行数 = 6, 列数 = 9 を求めたいのです。
ちなみに、各セルの幅、高さはバラバラです。

投稿時間:2003/04/26(Sat) 12:23
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: MSFlexGrid で画面に一度に表示できる行数、列数の取得
> その表示できる範囲の左上のセルは、
> LeftCol, TopRow で取得できるのですが、
> (この場合、 LeftCol = 3, TopRow = 1 です。)
> 行数、列数はどのように取得するのでしょうか?


FlexGridのサイズと、各セルのサイズを元にして計算すれば良いのでは。

投稿時間:2003/04/27(Sun) 21:45
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: MSFlexGrid で画面に一度に表示できる行数、列数の取得
チョッと試して見ました。考え方の参考という事で

Private Sub Command1_Click()
    Dim MFGWidth  As Long
    Dim FixColWid As Long
    Dim i         As Long
    Dim ColPos    As Long
    Dim TotalWid  As Long
    '固定列の幅を取得
    With MSFlexGrid1
        If .FixedCols > 0 Then
            For i = 0 To .FixedCols - 1
                FixColWid = FixColWid + .ColWidth(i)
            Next i
        End If
        MFGWidth = .Width - 80   'セルの区切りの分表示幅が狭くなるので
        TotalWid = FixColWid
        For i = .LeftCol To .Cols - 1
            If MFGWidth > (TotalWid + .ColWidth(i)) Then
                TotalWid = TotalWid + .ColWidth(i)
                ColPos = i
            Else
                Exit For    '抜け出さないと次を足してしまうので
            End If
        Next i
        Debug.Print .LeftCol, ColPos, MFGWidth, TotalWid
    End With
End Sub