Zum vorherigen AbschnittZum nächsten Abschnitt RGB-Anteile einer Farbe ermitteln
Aus den Rot-, Grün- und Blau-Anteilen einer Farbe lässt sich in VB mit der Funktion RGB jederzeit die richtige Farbe zusammenstellen. Aber wie kann man aus dieser Farbe die ursprünglichen RGB-Werte wieder ermitteln?
Dieses Problem lösen einige (API-)Funktionen. Zwar gibt es auch einfachere Wege, diese führen jedoch (wenn auch nur zu geringen) Informationsverlusten, weshalb wir lieber auf den komplizierteren Weg zurückgreifen möchten.
Ihre Bewertung:
 12345
    

Bewertung dieses Tipps:  (bewertet von insgesamt 12 Besuchern)

 Zum vorherigen AbschnittZum nächsten Abschnitt API-Deklarationen
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

 Zum vorherigen AbschnittZum nächsten Abschnitt Die Funktionen
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

 Zum vorherigen AbschnittZum nächsten Abschnitt Der Aufruf
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

 Zum vorherigen AbschnittZum nächsten Abschnitt Beispielprojekt
Sie können sich hier ein Beispiel als Projektdatei für Vb5 und Vb6 herunterladen.
 Projekt herunterladen



Quellen: SHADOWare.de
Letzte Änderung: 19.12.00
©2000 by SHADOWare, Thomas Bachem