Мой Kbyte.Ru
Рассылка Kbyte.Ru
Группы на Kbyte.Ru
Партнеры Kbyte.Ru
Реклама
Сделано руками
Сделано руками
> Исходные коды - Алексей Немиро -

Visual Basic 5.0/6.0 - Элементы управления Windows

Все примеры / Интерфейс / Элементы управления Windows

Установить количество открываемых строк в ComboBox (еще один пример)

Автор: Алексей Немиро | добавлено: 06.03.2010, 10:20 | просмотров: 2521 (1+) | комментариев: 0 | рейтинг: *x0
Еще один пример показывает, как можно изменить количество выпадающих строк в ComboBox.

Код

' Разместите на форме два элемента CommandButton, один элемент TextBox и ComboBox

'*********************************************
'КОД ФОРМЫ
'*********************************************

Option Explicit

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

Private Sub Text1_Change()
 iListItems = Val(Text1)
 If iListItems < 1 Then iListItems = 1
End Sub

Private Sub Form_Load()
 Dim i As Integer
 For i = 1 To 51
  Combo1.AddItem "Строка " & i
 Next
 
 Command2.Enabled = False
 Text1 = "5"
 iListItems = 5
 lHookedhWnd = Combo1.hWnd
End Sub

'*********************************************
'КОД МОДУЛЯ
'*********************************************
Option Explicit

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
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 Const LB_GETITEMHEIGHT = &H1A1
Private Const WM_CTLCOLORLISTBOX = &H134
Private lpPrevWndProc As Long

Private Type RECT
 Left As Long
 Top As Long
 Right As Long
 Bottom As Long
End Type

Public lHookedhWnd As Long
Public iListItems As Integer

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

Private Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
 WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
 Select Case uMsg
  Case WM_CTLCOLORLISTBOX
   Dim rc As RECT, lItemHeight As Long, lListHeight As Long
   Static bIgnore As Boolean
   Const LIST_ITEMS As Long = 20
   If Not bIgnore Then
    With rc
     lItemHeight = SendMessage(lParam, LB_GETITEMHEIGHT, 0, ByVal 0&)
     lListHeight = lItemHeight * iListItems + 2
     GetWindowRect lParam, rc
     bIgnore = True
     MoveWindow lParam, .Left, .Top, (.Right - .Left), lListHeight, True
     bIgnore = False
    End With
   End If
  Case Else
 End Select
End Function
Файлы combo1239.zip (3,5 Кб)
Обратите внимание
Язык Visual Basic 6.0 является устаревшим. Многие примеры, размещенные на нашем сайте, были созданы еще во времена Windows 98 и могут не работать в современных операционных системах.
Если у вас возникнут какие-либо проблемы или вопросы, вы можете обратиться за помощью на наш форум.
Об авторе

Алексей Немиро

Интернет-деятель. Автор многочисленных статей и переводов статей по программированию и информационным технологиям. Работы Алексея можно найти в популярных печатных изданиях компьютерной тематики. Автор проекта Kbyte.Ru.
Сейчас Алексей занимается профессиональным Web-программированием на базе технологий .NET Framework. Иногда пишет различные программки и компоненты для Windows и Android. В свободное время занимается Web-дизайном, увлекается фото- и видеосъемкой.

См. также:
Профиль автора
Алексей Немиро
Последние комментарии (всего: 0)

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации OpenID.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.


Нет комментариев...

Авторизация
 
OpenID
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
Поиск по сайту
Люди на Kbyte.Ru
Реклама
Счетчики