VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 リストボックス関係のメニュー
1.リストボックス(ListBox)で良く使用するワンポイント設定集
2.API を使ってのリストボックス(ListBox)ワンポイント設定集
3.リストボックス(ListBox)に横スクロールバーを設定
4.リストボックス(ListBox)でマウスのドラッグ・アンド・ドロップで行の移動
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.その他、当サイト内に掲載しているリストボックスに関するサンプル


3.リストボックス(ListBox)に横スクロールバーを設定
1.リストボックス(ListBox)に横スクロールバーを設定
2. 
3. 
4. 
5. 
6. 

 下記プログラムコードに関する補足・注意事項 
動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6)
Option :[Option Explicit]
参照設定:追加なし
使用 API:SendMessage
その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。
    :
このページのトップへ移動します。 1.リストボックス(ListBox)に横スクロールバーを設定

Option Explicit

'指定のウィンドウにメッセージを送る(P750)
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
  ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

'水平スクロール幅を設定する(P826)
Private Const LB_SETHORIZONTALEXTENT = &H194

Private Sub Form_Load()
  Dim i      As Integer
  Dim j      As Integer
  Dim strLen    As Integer
  Dim n1      As Integer
  Dim myStr    As String
  Dim myData    As String
  Dim lngListWidth As Long
  Dim lngRet    As Long
  myData = "12345ABCDEabcdeあいうえおアイウエオ子牛寅卯竜"
  List1.Clear
'テスト用のダミーのデータを登録しながら、文字列長を計測
  For i = 1 To 10
    'ランダムな長さのランダムな文字列を作成
    strLen = CInt(41 * Rnd + 10) '10 ~50 文字
    myStr = ""
    For j = 1 To strLen
      myStr = myStr & Mid$(myData, CInt(30 * Rnd + 1), 1)
    Next j
    List1.AddItem myStr

    '一番長い文字列を取得
    If n1 < LenB(StrConv(myStr, vbFromUnicode)) Then
      n1 = LenB(StrConv(myStr, vbFromUnicode))
    End If
  Next i

  '      半角  全角        半角  全角
  '9 ポイント 90   180   12ポイント 120  240
  '水平スクロールバーの長さを計算する(表示文字数を知らべて下さい)
  ' 120(文字の幅) * n1(半角文字数) +240(1文字分の余白) ピクセル単位に変換
  lngListWidth = ((120 * n1) + 240) \ Screen.TwipsPerPixelX
  '水平スクロールバーを表示
  lngRet = SendMessage(List1.hWnd, LB_SETHORIZONTALEXTENT, lngListWidth, ByVal 0&)

'上記で計測する場合は、等幅フォントの使用が望ましい。


'又は、下記のようにして計測する事もできます。(こちらは、等幅フォントでなくてもOKです。)
  Me.FontName = List1.FontName
  Me.FontSize = List1.FontSize
  n1 = 0
  For i = 0 To List1.ListCount - 1
    If n1 < Me.TextWidth(List1.List(i)) Then
      n1 = Me.TextWidth(List1.List(i))
    End If
  Next i
  n1 = (n1 + 240) \ Screen.TwipsPerPixelX
  '水平スクロールバーを表示
  lngRet = SendMessage(List1.hWnd, LB_SETHORIZONTALEXTENT, n1, ByVal 0&)

'又は、予めスクロールバーの表示幅を長めに設定するような場合は、計測する必要はありません。
'下記の1行だけで OK です。(表示行数が多いような場合に向いています)
  lngRet = SendMessage(List1.hWnd, LB_SETHORIZONTALEXTENT, 700, ByVal 0&)

End Sub


このページのトップへ移動します。 2. 


このページのトップへ移動します。 3.


このページのトップへ移動します。 4.


このページのトップへ移動します。 5.


このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
リストボックスに水平スクロールバーを表示する  ListBox に水平スクロールバーを表示する
リストボックスに文字列長に合わせた水平スクロールバーを表示する
リストボックスに関するサンプル集 ListBoxに関するサンプル集


このページのトップへ移動します。