Für die später folgenden Funktionen benötigen wir zwei API-Funktionen sowie eine Typdeklaration.
Um die folgenden Funktionen in eigenen Projekten nutzen zu können, müssen sie zuerst im Kopf
des Formulars oder des Moduls deklariert werden:
Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Type OLECOLOR
RedOrSys As Byte
Green As Byte
Blue As Byte
Type As Byte
End Type
Binden Sie nun die folgende Funktionen in Ihr Projekt ein (ich empfehle, sie in einem Modul zu platzieren):
Function WinColor(VBColor As Long) As Long
Dim SysClr As OLECOLOR
CopyMemory SysClr, VBColor, Len(SysClr)
If SysClr.Type = &H80 Then 'Es ist eine Systemfarbe
WinColor = GetSysColor(SysClr.RedOrSys)
Else 'Es ist keine Systemfarbe
WinColor = VBColor
End If
End Function
Function R(ByVal Color As Long) As Byte
CopyMemory R, WinColor(Color), 1
End Function
Function G(ByVal Color As Long) As Byte
CopyMemory G, ByVal VarPtr(WinColor(Color)) + 1, 1
End Function
Function B(ByVal Color As Long) As Byte
CopyMemory B, ByVal VarPtr(WinColor(Color)) + 2, 1
End Function
Um nun die RGB-Anteile einer Farbe zu ermitteln, gehen Sie wie bei folgendem Beispiel vor:
Const Weiss = 16777215
Rotanteil = R(Weiss)
Grünanteil = G(Weiss)
Blauanteil = B(Weiss)
MsgBox "R: " & Rotanteil & vbCrLf & "G: " & Grünanteil & vbCrLf & "B: " & Blauanteil
Sie können sich hier ein Beispiel als Projektdatei für Vb5 und Vb6 herunterladen.
Quellen: SHADOWare.de Letzte Änderung: 19.12.00 |
©2000 by SHADOWare, Thomas Bachem |