Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / System / Multimedia / SysColor

Systemfarbe in RGB konvertieren

Historie
11.01.2001Nach Anregung von Harald M. Genauck (AboutVB): Alternative OLE-Version
04.01.2001Erste Version
Windows benutzt bestimmte Farben für grafische Objekte (Button, Fenster, Desktop, 3D-Effekte, etc. pp.). VB bietet entsprechende vordefinierte Konstanten dafür (die sogenannten SystemColorConstants: vbButtonFace, vbWindowBackground, vbDesktop, vb3DShadow, ...). Diese sollten in eigenen Programmen berücksichtigt werden, damit der Anwender (wie gewohnt via Systemsteuerung/Anzeige) die Umgebung nach seinem Geschmack einrichten kann.

Beispiel

Manchmal werden (z.B. für spezielle Effekte) die konkreten RGB-Farbwerte dieser speziellen Farbkonstanten benötigt. So ergibt die folgende Zeile
x = SysColor(vbButtonFace)
MsgBox "&H" & Hex$(x)
die Farbe der Button-Oberfläche zurück (normalerweise hellgrau, also &HC0C0C0). Zur Umsetzung eines RGB-Wertes in seine einzelnen Farbanteile: siehe hier.

Code

Die Systemfarben können mit folgender API-Funktion bestimmt werden:
Private Declare Function GetSysColor Lib "user32" ( _
    ByVal nIndex As Long _
    ) As Long
Die eigentliche Funktion arbeitet folgendermaßen:
Public Function SysColor(ByVal Color As Long) As Long
  If Color And &H80000000 Then
    'Systemfarbe:
    SysColor = GetSysColor(Color And &H7FFFFFFF)
  Else
    'konventioneller RGB-Wert:
    SysColor = Color
  End If
End Function

OLE-Alternative

Die API-Funktion OleTranslateColor "übersetzt" ebenfalls Systemfarben-Konstanten, benötigt allerdings die DLL für OLE / AxtiveX Automation:
Declare Function OleTranslateColor Lib "oleaut32.dll" ( _
    ByVal lOleColor As Long, ByVal lHPalette As Long, _
    ByRef lColorRef As Long
    ) As Long

Public Function OleSysColor(ByVal Color As Long) As Long
  OleTranslateColor Color, 0&, OleSysColor
End Function

© Jost Schwider, 04.01.2001-11.01.2001 - http://vb-tec.de/syscolor.htm