| Option Explicit
Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
Public Function WebSafeColor(ByRef nColor As OLE_COLOR) As OLE_COLOR
If nColor < 0 Then
' If the color is negative, then it's one of the
' SystemColorConstants, so look up it's real value
nColor = GetSysColor(nColor And &H7FFFFFFF)
End If
' Call WebSafeColorSingle for each color
' value and add up the results
WebSafeColor = WebSafeColorSingle(nColor And &HFF&) + _
(WebSafeColorSingle((nColor And &HFF00&) \ &H100&) * _
&H100&) + (WebSafeColorSingle((nColor And &HFF0000) \ _
&H10000) * &H10000)
End Function
Public Function WebSafeColorSingle(nColor As Long) As Long
' The color isn't a valid color value
Debug.Assert nColor >= 0
Debug.Assert nColor <= 255
' Return the web color closest to the input color
WebSafeColorSingle = ((nColor + 25) \ 51) * 51
End Function
|