Warum hat die Standard ListBox eigentlich keinen horizontalen, sondern nur einen vertikalen Scrollbalken? Diese Frage haben sich sicherlich schon viele unter uns gestellt. ' zunächst die benötigten API-Deklarationen 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 Const LB_SETHORIZONTAL = &H194 Ein Problem gibt's jetzt aber noch: Die SendMessage-Funktion erwartet als dritten Parameter (wParam) die Breite des längsten Eintrags und zwar in der Maßeinheit Pixel! Die Breite eines Eintrags kann man ja mit der TextWidth-Funktion ermitteln, und in Pixel umrechnen lässt sich dann der Wert per Screen.TwipsPerPixelX. Also erstellen wir und eine Prozedur, in der der längste Eintrag ermittelt wird - und das sieht dann so aus: ' Längsten Eintrag einer ListBox ermitteln ' und als Ergebnis die Breite in Pixel zurückliefern Public Function GetListWidth(Liste As ListBox) As Long Dim I As Integer Dim maxWidth As Long Dim Form As Form ' für "TextWidth" muss die für die ListBox ' verwendete Schrift berücksichtigt werden! Set Form = Me Set Form.Font = List1.Font maxWidth = 0 With Liste For I = 0 To .ListCount - 1 If Form.TextWidth(.List(I)) > maxWidth Then _ maxWidth = Form.TextWidth(.List(I)) Next I End With ' Ergebnis in Pixel umrechnen maxWidth = maxWidth / Screen.TwipsPerPixelX ' kleine Zugabe GetListWidth = maxWidth + 5 End Function Um nun den Scrollbalken anzuzeigen, muss die SendMessage-Funktion folgendermaßen aufgerufen werden: ' horizontalen Scrollbalken anzeigen Public Sub ListeSetHorizScrollbar(Liste As ListBox) Dim maxWidth As Long maxWidth = GetListWidth(Liste) If maxWidth > List1.Width / Screen.TwipsPerPixelX Then ' nur wenn Eintrag länger ist als die ListBox breit! SendMessage List1.hwnd, LB_SETHORIZONTAL, maxWidth, 0& Else ' Scrollbalken wieder entfernen SendMessage List1.hwnd, LB_SETHORIZONTAL, 0, 0& End If End Sub Die Prozedur ListeSetHorizScrollbar sollten Sie immer dann aufrufen, wenn der ListBox neue Einträge hinzugefügt oder bestehende Einträge geändert bzw. gelöscht werden, so daß der horizontale Scrollbalken ein- oder ggf. auch wieder ausgeblendet wird. Dieser Tipp wurde bereits 20.372 mal aufgerufen.
Anzeige
![]() ![]() ![]() (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
TOP! Unser Nr. 1 ![]() Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Tipp des Monats TOP Entwickler-Paket ![]() TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1866.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |