|
Sie hätten gerne eine farbige StatusBar? Kein Problem: Senden Sie ihr einfach die Nachricht SB_SETBACKCOLOR per API-Funktion SendMessage zusammen mit der gewünschten Farbe. Da die StatusBar hier immer "echte" Farbwerte erwartet, müssen Sie gegebenenfalls eine Systemfarben-Konstante zuvor erst noch "übersetzen". Dies erledigt die API-Funktion OleTranslateColor, der Sie die Konstante im ersten Parameter übergeben. Der dritte (letzte) Parameter liefert den übersetzten Wert in der gleichen Variablen zurück.
Allerdings sollten Sie keine zu dunklen Farben wählen. Denn die Schriftfarbe in den Panels lässt sich leider nicht beeinflussen.
Die folgende Funktion StatusBarBackColor fasst die beiden API-Aufrufe zusammen. Sie übergeben ihr die betreffende StatusBar und (optional) die gewünschte Farbe bzw. Systemfarben-Konstante. Lassen Sie die Farbangabe weg, wird automatisch die Hintergrundfarbe des Containers verwendet. Der Container ist im Normalfall das Form, auf dem die StatusBar platziert ist - er kann aber beispielsweise auch eine PictureBox sein. Sollte der Container ausnahmsweise nicht über eine BackColor-Eigenschaft verfügen, wird ersatzweise automatisch die Systemfarbe vb3DFace verwendet.
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function OleTranslateColor Lib "olepro32" _
(ByVal clr As OLE_COLOR, ByVal hpal As Long, _
ByRef pcolorref As Long) As Long
Public Sub StatusBarBackColor(ByRef StatusBar As StatusBar, _
Optional ByVal Color As OLE_COLOR = -1)
Const SB_SETBKCOLOR = &H2001
If Color = -1 Then
On Error Resume Next
Color = StatusBar.Container.BackColor
If Err.Number Then
Color = vb3DFace
End If
End If
OleTranslateColor Color, 0, Color
SendMessage StatusBar.hwnd, SB_SETBKCOLOR, 0, Color
End Sub
Das Platzieren einer bunt gewordenen StatusBar auf einer PictureBox ist empfehlenswert, wenn sich die StatusBar wie üblich am unteren Rand eines Forms befinden soll. Denn dummerweise wird die dann erscheinende Eckfläche zur Größenänderung des Forms von der Einfärbung ausgenommen. Setzen Sie also die StatusBar auf eine PictureBox - ohne sich um eine genaue Anordnung zu kümmern. Statt dessen sorgen Sie im Resize-Ereignis der PictureBox dafür, dass die StatusBar die PictureBox vollständig ausfüllt. Wenn Sie nun noch die Align-Eigenschaft der PictureBox auf "2 - Unten ausrichten" setzen, landet auch die StatusBar wieder hübsch ausgerichtet unten im Form. Vergessen Sie bitte nicht, die Eigenschaft TabStop bei der PictureBox auf False zu setzen - sie dient ja nur hilfsweise als Container und sollte wie die StatusBar selbst auch nicht den Fokus erhalten können.
Private Sub Picture1_Resize()
On Error Resume Next
With Picture1
StatusBar1.Move 0, 0, .ScaleWidth, .ScaleHeight
End With
End Sub
Wenn Sie nun noch die Anweisung zum Einfärben im Paint-Ereignis der PictureBox erteilen und dabei die optionale Farbangabe weglassen, können Sie die für die StatusBar gewünschte Farbe bequem als Hintergrundfarbe der PictureBox einstellen. Das hat auch den Vorteil, dass die Farbe automatisch angepasst wird, falls es sich um eine Systemfarbe handelt, und der Anwender die Einstellungen der Systemfarben geändert hat, während die Anwendung läuft.
Private Sub Picture1_Paint()
StatusBarBackColor StatusBar1
End Sub
|