RSS
StartseiteKnowledge LibraryTop 10Impressum

Farbenspiele im Status

Die Hintergrundfarbe des StatusBar Steuerelements ändern

Die Farbe des StausBar Steuerelements ist immer vorgegeben und unveränderbar. Naja, nicht ganz unveränderbar. Denn Mithilfe zweier API Funktionen, rüsten Sie die fehlende BackColor-Eigenschaft quasi nach...

Das StatusBar Steuerelement der Windows Common Controls kommt immer im Windows-Einheitsgrau daher, bzw. im Farbton der Schaltflächen Elemente. Eine Eigenschaft zum Ändern der Hintergrundfarbe sucht man vergebens.

Um eine solche Eigenschaft quasi nachzurüsten, genügt ein Griff zur API Funktion SendMessage. Denn das original StatusBar Steuerelement bietet die Nachricht SB_SETBKCOLOR an, um die Hintergrundfarbe zu ändern. Dem Paramenter lParam übergibt man dazu den zu setzenden RGB Farbwert. Damit diese Eigenschaft auch mit den konstanten Werten für die Systemfarben umgehen kann, werden alle übergebenen Werte über die API Funktion OleTranslateColor in den entsprechenden RGB Farbwert umgewandelt. Als Resultat erhält man die Eigenschaft "SBBackColor", der man das StatusBar Control übergibt und den gewünschten Farbwert/Farbkonstante zuweist:

Private Const CCM_FIRST = &H2000
Private Const CCM_SETBKCOLOR = (CCM_FIRST + 1)

Private Const SB_SETBKCOLOR = CCM_SETBKCOLOR

Private Declare Function SendMessage Lib "user32" Alias _
       "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
        ByVal wParam As Long, ByRef lParam As Any) As Long

Private Declare Function OleTranslateColor Lib "olepro32" _
       (ByVal clr As OLE_COLOR, ByVal hpal As Long, _
        ByRef pcolorref As Long) As Long

Public Property Let SBBackColor(ByRef StatusBar As StatusBar, _
                                ByVal New_Value As OLE_COLOR)

  OleTranslateColor New_Value, 0, New_Value
  
  SendMessage StatusBar.hwnd, SB_SETBKCOLOR, 0, ByVal New_Value
End Property

Einen kleinen Haken gibt es aber beim Setzen der Hintergrundfarbe: Die Griff-Ecke zur Änderung der Fenstergröße, die eingeblendet wird, wenn die StatusBar am unteren Rand ausgerichtet ist, behält die vom System vorgegebene Farbe für Schaltflächen Elemente. Einzige Option: Die Griff-Ecke ausblenden. Dies geht nur, indem man auf die automatische Ausrichtung der StatusBar am unteren Rand verzichtet (Align = vbAlignNone) und diese Ausrichtung im Form_Resize Ereignis selber vornimmt:

Private Sub Form_Resize()
  On Error Resume Next
  With StatusBar1
    If .Align = vbAlignNone Then
      .Top = Me.ScaleHeight - .Height
      .Width = Me.ScaleWidth
    End If
  End With
End Sub