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 19.607 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (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. |
sevWizard für VB5/6 Professionelle Assistenten im Handumdrehen Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.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. |