Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0145: Weite der Dropdownliste einer ComboBox auslesen und einstellen

 von 

Beschreibung 

Wer aus Übersichtsgründen eine ComboBox in ihrer Ausdehnung klein gestalten und trotzdem deren Einträge in der Dropdownliste ausgeschrieben bzw. unabgeschnitten zu Gesicht bekommen möchte, muß die Weite der Dropdownliste verändern können. Dies läßt sich pixelgenau einstellen.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

SendMessageA (SendMessage)

Download:

Download des Beispielprojektes [2,31 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Timersteuerelement "Timer1"
' Steuerelement: Kombinationsliste "Combo1"

Option Explicit

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 Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

Const CB_SHOWDROPDOWN = &H14F
Const CB_GETDROPPEDCONTROLRECT = &H152
Const CB_GETDROPPEDWIDTH = &H15F
Const CB_SETDROPPEDWIDTH = &H160

Dim cmbX%, Cnt&

Private Sub Form_Load()
  Timer1.Enabled = False
  cmbX = SendMessage(Combo1.hwnd, CB_GETDROPPEDWIDTH, 0, 0&)
  Timer1.Interval = 50
End Sub

Private Sub Command1_Click()
  Cnt = 0
  Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
  Dim X%, R As RECT
  
    If Cnt < 100 Then
      X = Sin(Cnt / 100 * 3.14) * cmbX + cmbX
      
      SendMessage Combo1.hwnd, CB_SETDROPPEDWIDTH, X, 0&
      Call SendMessage(Combo1.hwnd, CB_SHOWDROPDOWN, 1, 0&)
      
      Call SendMessage(Combo1.hwnd, CB_GETDROPPEDCONTROLRECT, 0, R)
      Me.Caption = R.Left & " " & R.Top & " " & _
                   R.Bottom & " " & R.Right
      Cnt = Cnt + 2
    Else
      Call SendMessage(Combo1.hwnd, CB_SHOWDROPDOWN, 0, 0&)
      Timer1.Enabled = False
    End If
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.