[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2004/09/08(Wed) 15:00
投稿者名:ふぉん
Eメール:
URL :
タイトル:
FlexGridの水平スクロール
OS:WinXP SP1
VB:6.0 SP6

FlexGridコントロールに列を1個設定して(行数は1個以上)、セルに文字を表示させています。
で、私が問題にしているのは、その文字の長さがコントロールの幅より長くなった時には、
その文字が隠れてしまって見れないということです。

例えばフォームにFlexGridを貼り付けて以下のコードを実行すると、
設定した文字"ABCDEFGHIJKLMNOPQRSTUVWXYZ"は半分程度しか見ることができません。
水平スクロールバーも設定しているのですが、出てきてくれません。
(複数列表示していて、全セル幅がコントロール幅を超えると出てきてくれるようです。)

Private Sub Form_Load()
    With MSFlexGrid1
        '***** コントロールの大きさを設定する *****
        .Height = 2000
        'コントロールの幅は次のセル幅よりも小さくする
        .Width = 2000
                
        'セルの設定
        .FixedRows = 0
        .FixedCols = 0
        .Cols = 1
        .Rows = 1
        'セル幅はコントロール幅よりも大きくする
        .ColWidth(0) = 4000
        'セルに文字を設定する
        .TextMatrix(0, 0) = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        'スクロールバーは水平垂直共に設定する
        .ScrollBars = flexScrollBarBoth
    End With
End Sub

どうにかして、セルの文字を全て見ることが出来るでしょうか?

どうかよろしくお願いします

投稿時間:2004/09/09(Thu) 00:31
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: FlexGridの水平スクロール
残念ながら、コントロール幅よりも長い列のデータの閲覧できません。

コントロール幅よりも長くても表示できるコントロールとしては、
私の知る限りでは、ListViewコントロールぐらいでしょうか。

投稿時間:2004/09/09(Thu) 09:13
投稿者名:ふぉん
Eメール:
URL :
タイトル:
Re^2: FlexGridの水平スクロール
レスありがとうございました。

> 残念ながら、コントロール幅よりも長い列のデータの閲覧できません。

そうなんですか...
残念ですが、ようやくあきらめがつきそうです。

> コントロール幅よりも長くても表示できるコントロールとしては、
> 私の知る限りでは、ListViewコントロールぐらいでしょうか。

情報ありがとうございます。
時間があれば試してみようと思います。

また機会があれば、どうぞよろしくお願いします。

投稿時間:2004/09/09(Thu) 11:48
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^3: FlexGridの水平スクロール
私はカーソルを合わせた時にツールチップで表示するようにしています。

投稿時間:2004/09/09(Thu) 14:29
投稿者名:ふぉん
Eメール:
URL :
タイトル:
Re^4: FlexGridの水平スクロール
> 私はカーソルを合わせた時にツールチップで表示するようにしています。

貴重なご意見ありがとうございます。
いいアイデアですね!

早速試してみました。
やり方としては、FlexGridのMouseMoveイベントのy座標と、セルの高さから
現在カーソルが指しているセルを判定し、ツールチップに表示する方法です。
一見うまくいったように思いましたが、下の方のセルになるに従って
カーソルが指し示すセルの内容とツールチップで表示される内容がズレていきます。
サンプルコードを載せさせていただきますが、
上の方のセルに関しての表示は大丈夫なようです。
ですが一番下のセルに関してはセルの上側を指した時と、セルの下側を指した時に
異なるツールチップ表示になります。

Const GRID_ROW_HEIGHT As Integer = 230

Private Sub Form_Load()
    With MSFlexGrid1
        .FixedRows = 0
        .FixedCols = 0
        .Cols = 1
        .Rows = 20
        .Width = 2000
        .Height = 5000
        .ColWidth(0) = .Width
        Dim i As Integer
        For i = 0 To .Rows - 1
            .RowHeight(i) = GRID_ROW_HEIGHT
            .TextMatrix(i, 0) = String$(30, Chr$(&H41 + i))
        Next
    End With
End Sub

Private Sub MSFlexGrid1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    Dim iCurrentRow As Integer
    iCurrentRow = y \ GRID_ROW_HEIGHT
    
    If iCurrentRow > MSFlexGrid1.Rows - 1 Then
        '最大行以降にカーソルがあれば、ツールチップは表示しない
        MSFlexGrid1.ToolTipText = ""
    Else
        MSFlexGrid1.ToolTipText = MSFlexGrid1.TextMatrix(iCurrentRow, 0)
    End If
End Sub

どこか抜けていたり、根本的なやり方が違っているのでしょうか?

投稿時間:2004/09/09(Thu) 14:44
投稿者名:nanashi
Eメール:
URL :
タイトル:
Re^5: FlexGridの水平スクロール
MouseRow, MouseColというプロパティがあります。

>     iCurrentRow = y \ GRID_ROW_HEIGHT



    iCurrentRow = MSFlexGrid1.MouseRow

とすれば一応出来ます。
これに加え、セルのある場所かどうかもチェックするとイイと思います。
(MouseRow, MouseColはセルの無い場所でも一番近い(?)セルのRowとColを保持しているので)

投稿時間:2004/09/09(Thu) 14:54
投稿者名:ふぉん
Eメール:
URL :
タイトル:
Re^6: FlexGridの水平スクロール
> MouseRow, MouseColというプロパティがあります。

セルの認識が正しくなりました!

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

MouseMoveイベントの引数yにばかり気をとられて、
そこから抜け出せませんでした。

また機会があったらよろしくお願いします。

投稿時間:2004/09/09(Thu) 14:13
投稿者名:水無月
Eメール:
URL :
タイトル:
Re: FlexGridの水平スクロール
私は
1.WordWrapプロパティをTrueにし、行の高さを高くして表示する。
2.TextWidthを出し、列幅を超えたら(列幅÷TextWidth)で縮小率を出し、
  該当セルの本姓のフォントサイズに縮小率を掛けたフォントサイズで表示する
のいづれかの手を使っています

投稿時間:2004/09/09(Thu) 14:20
投稿者名:水無月
Eメール:
URL :
タイトル:
Re^2: FlexGridの水平スクロール
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
すみません、上の文の訂正です
> 私は
> 1.WordWrapプロパティをTrueにし、行の高さを高くして複数行表示する。
> 2.セル文字のTextWidthを出し(myWidth=Me.TextWidth("ABCDEFGHIJK")、
>   列幅を超えたら(.ColWidth(該当列)myWidth)で縮小率を出し、
>   該当セルの本来のフォントサイズに縮小率を掛けたフォントサイズでセルに表示する
> のいづれかの手を使っています

投稿時間:2004/09/09(Thu) 15:16
投稿者名:ふぉん
Eメール:
URL :
タイトル:
Re^3: FlexGridの水平スクロール
> 1.WordWrapプロパティをTrueにし、行の高さを高くして複数行表示する。
> 2.セル文字のTextWidthを出し(myWidth=Me.TextWidth("ABCDEFGHIJK")、
>   列幅を超えたら(.ColWidth(該当列)myWidth)で縮小率を出し、
>   該当セルの本来のフォントサイズに縮小率を掛けたフォントサイズでセルに表示する

貴重なご意見ありがとうございます。
大変参考になります。

2.のアイデアはとても素晴らしいですね。
とても私には思いつくことはできません。

また機会がありましたらよろしくお願いします。