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.428 mal aufgerufen.
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv (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. |
sevAniGif (VB/VBA) ![]() Anzeigen von animierten GIF-Dateien Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Tipp des Monats Heinz Prelle Datei-Mehrfachauswahl an eine ListBox übergeben Dieser Tipp zeigt, wie Sie über den Windows-CommonDialog eine Mehrfach-Dateiauswal realisieren... Access-Tools Vol.1 ![]() Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
|
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. |
|||||||||||||||||


Horizontaler Scrollbalken in der ListBox


