Private Const SWP_NOACTIVATE As Long = &H10
Private Const SWP_NOMOVE As Long = &H2
Private Const CB_SETDROPPEDWIDTH As Long = &H160
'
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function SetWindowPos Lib "user32.dll" (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
'
Public Sub GrowUpComboBox(ByRef ObjLB As ComboBox, ByRef ObjScale As Object, ByVal Width As Long, ByVal Height As Long)
With ObjLB
Call SetWindowPos(.hwnd, 0&, 0&, 0&, ObjScale.ScaleX(.Width * Screen.TwipsPerPixelX, vbTwips, vbPixels), Height, SWP_NOMOVE Or SWP_NOACTIVATE)
Call SendMessage(.hwnd, CB_SETDROPPEDWIDTH, Width, ByVal 0&)
End With
End Sub
'----------------------
' EXEMPLE D'UTILISATION
'----------------------
'
Private Sub Form_Load()
Me.ScaleMode = vbPixels
Combo1.AddItem "le combo est chargé de chaînes plus grandes que sa largeur"
Combo1.AddItem "le combo est chargé de chaînes plus grandes que sa largeur"
Combo1.AddItem "le combo est chargé de chaînes plus grandes que sa largeur"
Call GrowUpComboBox(Combo1, Me, 300, 200)
End Sub