15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как добавить горизонтальную полосу прокрутки (ScrollBar) в ListBox

Стандартный листбоксы в VB не поддерживают горизонтальной полосы прокрутки, только вертикальную. Давайте посмотрим как можно решить эту проблему при помощи API.

' In General Declarations
Private Declare Function SendMessageByNum Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Long, ByVal _
wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Const LB_SETHORIZONTALEXTENT = &H194

Для отображения горизонтального скроллбара теперь достаточно вызвать

SendMessageByNum List1.hwnd, LB_SETHORIZONTALEXTENT, 250, 0

List1.hwnd замените именем Вашего листбокса, а 250 замените на ширину, которую будет иметь Ваш скроллбар. Если задать ширину 0, то скроллбар не будет показан. А вот следующия подпрограммка сама определяет необходимую ширину.

Sub lstAddHScroll(lst as ListBox)
    ' depends on the scalewidth
    ' if scalemode is Twips then Divide M by 15 to get Pixels

    For a=0 to lst.listcount-1
        if me.textwidth(lst.list(a))>m then m=me.textwidth(lst.list(a))
    Next

    SendMessageByNum lst.hwnd, LB_SETHORIZONTALEXTENT, m/15, 0
End Sub