リストボックスに水平スクロールバーを          <TOP>


ListBoxに水平スクロールバーを設定します。

SendMessage ウィンドウにメッセージを送信

ShowScrollBar スクロールバーを表示

 

List1は、垂直スクロールありに設定します。VBではSendMessageでLB_SETHORIZONTALEXTENTを送るだけでいいのですが、F-BASICではShowScrollBarが必要でした。

※スクロールに支障はありませんが、水平スクロールバーのスライダーがスグに初期状態に戻ってしまいます。固定する方法を探しています。(^^;

 ついでですが、F-BasicではListBox内でのTab「Chr$(9)」は効きません。

 

'================================================================
'= リストボックスに水平スクロールバーを
'=    (HScrollBarInListBox.bas)
'================================================================
#include"Windows.bi"

' ウィンドウにメッセージを送信
Declare Function Api_SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg&, ByVal wParam&, lParam As Any)

' スクロールバーを表示
Declare Function Api_ShowScrollBar& Lib "user32" Alias "ShowScrollBar" (ByVal hWnd&, ByVal wBar&, ByVal bShow&)

#define LB_SETHORIZONTALEXTENT &H194    'リストボックスの水平範囲を設定する
#define SB_HORZ 0                       '標準スクロールバーの水平

Var Shared List1 As Object
Var Shared Button1 As Object
Var Shared Button2 As Object

List1.Attach GetDlgItem("List1") : List1.SetFontSize 14
Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14
Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14

Var Shared n As Long

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Var txt As String
    Var i As Integer

    n = 0
    For i = 1 To 10
        Read txt
        List1.AddString txt

        '一番長い文字列の文字数を取得
        If n < Len(txt) Then
            n = Len(txt)
        End If
    Next i

  Data "123456789012345"
  Data "123456789012345678"
  Data "123456789012345678901234567"
  Data "123456789012345678901234567890"
  Data "123"
  Data "123456"
  Data "123456789"
  Data "123456789012"
  Data "123456789012345678901"
  Data "123456789012345678901234"
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var ListWidth As Long
    Var Ret    As Long

  '水平スクロールバーを表示(フォントサイズ×最大文字数)
    ListWidth = List1.GetFontSize * n / 2 + 5

    '水平スクロールバーを表示
    Ret = Api_SendMessage(List1.GethWnd, LB_SETHORIZONTALEXTENT, ListWidth, ByVal 0)
    Ret = Api_ShowScrollBar(List1.GethWnd, SB_HORZ, True)
End Sub

'================================================================
'=
'================================================================
Declare Sub Button2_on edecl ()
Sub Button2_on()
    Var ListWidth As Long
    Var Ret As Long

    '幅を指定
    ListWidth = 0

    '水平にスクロールできる幅を設定
    Ret = Api_SendMessage(List1.GethWnd, LB_SETHORIZONTALEXTENT, ListWidth, ByVal 0)
    Ret = Api_ShowScrollBar(List1.GethWnd, SB_HORZ, False)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End