'Расположите на форме элемент ComboBox, элемент TextBox и 2 элемента 'CommandButton. Добавьте в ваш проект модуль.
'КОД МОДУЛЯ Option Explicit 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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const GWL_WNDPROC = (-4) Private lpPrevWndProc As Long
Public lHookedhWnd As Long Public iListItems As Integer
Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type
Private Const LB_GETITEMHEIGHT = &H1A1 Private Const WM_CTLCOLORLISTBOX = &H134 Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long Private Declare Function MoveWindow Lib "user32" (ByVal hWnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long 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
Public Sub Hook() lpPrevWndProc = SetWindowLong(lHookedhWnd, GWL_WNDPROC, AddressOf WindowProc) End Sub
Public Sub Unhook() Dim lRetVal As Long
lRetVal = SetWindowLong(lHookedhWnd, GWL_WNDPROC, lpPrevWndProc) End Sub
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim rc As RECT Dim lItemHeight As Long Dim lListHeight As Long Static bIgnore As Boolean Const LIST_ITEMS As Long = 20
Select Case uMsg Case WM_CTLCOLORLISTBOX If Not bIgnore Then With rc lItemHeight = SendMessage(lParam, LB_GETITEMHEIGHT, 0, ByVal 0&) lListHeight = lItemHeight * iListItems + 2 Call GetWindowRect(lParam, rc) bIgnore = True Call MoveWindow(lParam, .Left, .Top, (.Right - .Left), lListHeight, True) bIgnore = False End With End If Case Else End Select End Function
'КОД ФОРМЫ Private Sub Command1_Click() Command1.Enabled = Not (Command1.Enabled) Command2.Enabled = Not (Command2.Enabled) Hook End Sub
Private Sub Command2_Click() Command1.Enabled = Not (Command1.Enabled) Command2.Enabled = Not (Command2.Enabled) Unhook End Sub
Если Вас заинтересовала или понравилась информация программирование на Visual Basic - "Определить количество строк в ComboBox", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу: Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!