リストボックスにスクロールバーを設定
                                                         玄関へお回り下さい。
リストボックスに横スクロールバーを設定       (109)

Option Explicit    
'SampleNo=109 WindowsXP VB6.0(SP5) 2002.05.21

'指定のウィンドウにメッセージを送る(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 Command1_Click()
  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&)
End Sub


リストボックスのフォントをMS 明朝・ゴシックで12ポイントに設定して下さい。

これで文字列の長さ合った横スクロールバーが出来ます。

参考(文字ポイントと文字幅  単位=twip) MS 明朝・ゴシック
   文字ポイント   半角幅    全角幅
      9      90    180
     10     105    195
     11     120    225
     12     120    240  
9ポイントか12ポイントのフォント(Pでない)の使用をお奨めします。




2002/05/21