This two part tip shows how to:
1. Convert a Long Color to its RGB Values, and
2. Convert a System Color to its Long Color value.
In January 1996, I needed to 'break' apart the red, green and blue values from a long color variable. I did this so that I could save the individual values in the registry. So I wrote several subroutines and functions to perform that function. I enhanced the routines in July 1996 using a tip I found on the MSDN. This becomes the Tip-Of-The-Month.
I wrote a VB program to demonstrate the functions. The demo:
Enter any valid long color number (in hexadecimal notation) then click 'Convert Long to RGB Values'. You can enter a number directly into the Red, Green or Blue number boxes then press enter or use the scroll bars to change the color.
modRGB.bas Subroutines and Functions
Function or Subroutine Description ColorCodeToRGB Supply a long color variable. The red, green and blue integer values are returned.
See the next paragraph.
RGBtoColorCode Supply red, green and blue integers, the long color variable is returned.
Similar to RGB(ired, igreen, iblue) with error trapping.
RGB_Red Supply a long color variable, the red value is returned. RGB_Green Supply a long color variable, the green value is returned. RGB_Blue Supply a long color variable, the blue value is returned. ColorCodeToRGBString Supply the long color code. Used to store colors in the registry, returns: "128, 128, 255" ColorCodeToRGBValue Return the RGB value from the color code string created using ColorCodeToRGBString.
The 'Operative' Code
Public Function ColorCodeToRGB(lColorCode As Long, iRed As Integer, iGreen As Integer, iBlue As Integer) As Boolean
' 1996/01/16 Return the individual colors for lColorCode.
' 1996/07/15 Use Tip 171: Determining RGB Color Values, MSDN July 1996.
' Enter with:
' lColorCode contains the color to be converted
' iRed contains the red component
' iGreen the green component
' iBlue the blue component
Dim lColor As Long
lColor = lColorCode 'work long
iRed = lColor Mod &H100 'get red component
lColor = lColor \ &H100 'divide
iGreen = lColor Mod &H100 'get green component
lColor = lColor \ &H100 'divide
iBlue = lColor Mod &H100 'get blue component
ColorCodeToRGB = True
Help Uses modConnectToWebSite and modInfoAbout
The demo program uses modConnectToWebSite.bas to display this page. You do not need to include it in your application. For details on the use of that module click here. Help uses module modInfoAbout to provide helpful information and an About box. You do not need to include it in your application.
Include in Your Application
You will need to add the following module to your application if you want to use this function:
modRGB.bas The routine described in this document.
Download VB Code for Demo 1
Click here to download the VB6 Source Code [7k].
In December 1999, I needed a way to convert a system color [vbActiveTitleBar] to its long color value. I began using a third-party control that did not support system colors. I posted a question on 'news.devx.com' news group, in forum 'vb.general'. Klaus H. Probst provided the API information I needed to accomplish the conversion. I decided to include this code with the tip described above. And I wrote a demo program:
Drop Down Combo Box
The System Color to RGB Color Demo
Select a system color from the combo box. The converted long, RGB values and color are shown. The demo uses two functions:
SystemColorToRGBColor(lSystemColor, lColor) ColorCodeToRGBString(lColor)
Download VB Code for Demo 2
Click here to download the System Color to RGB Demo VB 6 Source Code [4k].
Previous Tip Tip Index Next Tip