Rieccomi con un nuovo problema. Come dice il titolo con la ScrollBar orizzontale per la DirListBox.
Sono riuscito ad ottenerla con questo codice:
codice:
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const LB_SetHorizontalExtent = &H194
Private Const SWP_FrameChanged = &H20
Private Const SWP_NoMove = &H2
Private Const SWP_NoOwnerZOrder = &H200
Private Const SWP_NoSize = &H1
Private Const WS_HSCROLL = &H100000
Public Sub AddHScrollToDirListBox(Box As DirListBox, Optional Width = 1000)
Dim WS&, i&
SendMessage Box.hwnd, LB_SetHorizontalExtent, Width, 0
WS = GetWindowLong(Box.hwnd, GWL_STYLE)
SetWindowLong Box.hwnd, GWL_STYLE, WS Or WS_HSCROLL
SetWindowPos Box.hwnd, 0, 0, 0, 0, 0, SWP_NoMove Or SWP_NoOwnerZOrder Or SWP_NoSize Or SWP_FrameChanged
End Sub
Private Sub Form_Activate()
Call AddHScrollToDirListBox(Dir1)
End Sub
e devo dire che funziona. Il problema è che il pulsante che fa scorrere le voci nel controllo, una volta rilasciato il pulsante del mouse, ritorna subito all'inizio invece di rimanere per esempio a metà corsa come succede con la ScrollBar verticale.
Come posso risolvere?
Grazie!