Solved

# converting access default back color of -2147483633 to RGB value

Posted on 2006-07-14
Medium Priority
1,891 Views
Trying to get the RGB color for the deafult background color on access forms.  The value is -2147483633.  All the functions I found to not handle negative numbers.   I must be missing something.  This may not be terribly difficult but 500 points to the person that can get me the answer quickest.  thanks

'this function I found on EE does not handle negative values.   ???

Public Sub CompositeRGB( _
ByVal lngRGB As Long, _
ByRef intRed As Integer, _
ByRef intGreen As Integer, _
ByRef intBlue As Integer)

' Calculate discrete RGB colours from composite colour value.
'
' 1999-08-20. Cactus Data ApS, CPH

If lngRGB < 0 Then
' Nothing to do.
intRed = 0
intGreen = 0
intBlue = 0
Else
' Dissolve composite RGB into discrete colours.
intRed = lngRGB And vbRed '
intGreen = (lngRGB And vbGreen) / &H100
intBlue = (lngRGB And vbBlue) / &H10000
End If
Debug.Print intRed, intGreen, intBlue

End Sub
0
Question by:andyringle
• 3
• 3

LVL 65

Expert Comment

ID: 17110245
Taking an educated guess, if its positive, it divies it, what if u multiplied it?

If lngRGB < 0 Then
' Nothing to do.
intRed = lngRGB And vbRed
intGreen =  (lngRGB And vbGreen) * &H100
intBlue = (lngRGB And vbBlue) * &H10000
Else
' Dissolve composite RGB into discrete colours.
intRed = lngRGB And vbRed '
intGreen = (lngRGB And vbGreen) / &H100
intBlue = (lngRGB And vbBlue) / &H10000
End If

not guaranteed to work, but like I said, a guess
0

Author Comment

ID: 17110349

Thanks for the suggestion.  I gave it a go.   here is what I got:

Input:
lngRGB = -2147483633

Output:
intRed  = 15
intGreen  = 0
intBlue  = 0

This give me a color close to Black.

I will keep trying other ways.....Any other suggestions......

Andy

0

LVL 65

Accepted Solution

ID: 17110384
paste this code in a module

Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" _
(ByRef Destination As Any, _
ByRef Source As Any, _
ByVal Bytes As Long)

Private Declare Function OleTranslateColor Lib "olepro32.dll" _
(ByVal OLE_COLOR As Long, _
ByVal HPALETTE As Long, _
pccolorref As Long) As Long

Private Function GetRBGFromOLEColour2(ByVal dwOleColour As Long) As Byte()

'pass a hex colour, return the rgb components
Dim clrref As Long
Dim b(1 To 4) As Byte

'translate OLE color to valid color if passed
OleTranslateColor dwOleColour, 0, clrref

'copy the color into a byte array
'the size of the long (4 bytes)
CopyMemory b(1), clrref, 4

'return the byte array. Note there
'is no value in byte(4).
GetRBGFromOLEColour2 = b()

End Function

'Now func uses long
'but this is how we can also use Hex or long
e.g.

Public Sub testit()
Dim dwOleColor As Long
Dim clrs() As Byte

'Pass in hex or long
dwOleColor = &H80000018
clrs() = GetRBGFromOLEColour2(16777215)

Debug.Print "R", clrs(1)
Debug.Print "G", clrs(2)
Debug.Print "B", clrs(3)

Debug.Print RGB(255, 255, 255)

End Sub

0

Author Comment

ID: 17110508
YOU GOT IT!!

Input:
lngRGB = -2147483633

Output:
R              236
G              233
B              216

I did a test and it worked great!  Thanks for the help

FYI...I did some checking and the standard windows colors are as follows:

Color ID... Color Description
----------- -----------------
-2147483648 Scroll bar
-2147483647 Desktop
-2147483646 Active window title bar
-2147483645 Inactive window title bar
-2147483643 Window
-2147483642 Window frame
-2147483640 Window Text (*)
-2147483639 Title bar text
-2147483638 Active window border
-2147483637 Inactive window border
-2147483636 Application background
-2147483635 Highlight
-2147483634 Highlight Text
-2147483633 3-D face (**)
-2147483631 Dimmed (disabled) text
-2147483630 Button Text
-2147483629 Inactive window title bar text
-2147483628 3-D highlight (***)
-2147483626 3-D light
-2147483625 ToolTip Text
-2147483624 ToolTip background
-2147483621 Active window title bar color2

Will use that function to conver the colors above to RGB.

0

LVL 65

Expert Comment

ID: 17110644
Nice!
0

Author Comment

ID: 17110674

Thanks again for the help!
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Access developers frequently have requirements to interact with Excel (import from or output to) in their applications.  You might be able to accomplish this with the TransferSpreadsheet and OutputTo methods, but in this series of articles I will di…
Instead of error trapping or hard-coding for non-updateable fields when using QODBC, let VBA automatically disable them when forms open. This way, users can view but not change the data. Part 1 explained how to use schema tables to do this. Part 2 h…
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…
This lesson discusses how to use a Mainform + Subforms in Microsoft Access to find and enter data for payments on orders. The sample data comes from a custom shop that builds and sells movable storage structures that are delivered to your property. …
###### Suggested Courses
Course of the Month14 days, 19 hours left to enroll