リストボックスに水平スクロールバーを <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