Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: Visual Basic
Expertise: Advanced
Aug 6, 1997



Building the Right Environment to Support AI, Machine Learning and Deep Learning

Resize the Drop-Down List Area of Combo Boxes

VB doesn't provide a ListRows property, so if you need to display more than eight default items in a combo box drop-down list, use this procedure to increase the size of the combo box window:
Option Explicit

        x As Long
        y As Long
End Type

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

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
Declare Function GetWindowRect Lib _
        "user32" (ByVal hwnd As Long, _
        lpRect As RECT) As Long
Declare Function ScreenToClient Lib _
        "user32" (ByVal hwnd As Long, _
        lpPoint As POINTAPI) As Long

Public Sub Size_Combo(rForm As Form, _
        rCbo As ComboBox)
        Dim pt As POINTAPI
        Dim rec As RECT
        Dim iItemWidth As Integer
        Dim iItemHeight As Integer
        Dim iOldScaleMode As Integer

        'Change the Scale Mode on the form 
        'to Pixels
        iOldScaleMode = rForm.ScaleMode
        rForm.ScaleMode = 3
        iItemWidth = rCbo.Width

        'Set the new height of the combo box
        iItemHeight = rForm.ScaleHeight - _
                rCbo.Top - 5
        rForm.ScaleMode = iOldScaleMode

        'Get the coordinates relative to the 
        Call GetWindowRect(rCbo.hwnd, rec)
        pt.x = rec.Left
        pt.y = rec.Top

        'then the coordinates relative to 
        'the form.
        Call ScreenToClient(rForm.hwnd, pt)

        'Resize the combo box
        Call MoveWindow(rCbo.hwnd, pt.x, _
                pt.y, iItemWidth, iItemHeight, 1)
End Sub
Keith Meulemans
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date