* note: to reverse the system colors back to normal
* release the oColorTest variable
PUBLIC oColorTest As TColorTest
oColorTest = CREATEOBJECT("TColorTest")
oColorTest.ChangeColors
* end of main
DEFINE CLASS TColorTest As Session
PROTECTED ColorMask, SavedColors, NewColors
PROCEDURE Init
THIS.declare
PROCEDURE ChangeColors
#DEFINE COLOR_SCROLLBAR 0
#DEFINE COLOR_ACTIVECAPTION 2
#DEFINE COLOR_WINDOW 5
#DEFINE COLOR_WINDOWFRAME 6
#DEFINE COLOR_MENUTEXT 7
#DEFINE COLOR_WINDOWTEXT 8
* colors for these two elements are to be
* changed and eventually restored back
THIS.ColorMask = num2dword(COLOR_WINDOW)+;
num2dword(COLOR_ACTIVECAPTION)
* the original colors are saved in the class property
THIS.SavedColors = num2dword(GetSysColor(COLOR_WINDOW))+;
num2dword(GetSysColor(COLOR_ACTIVECAPTION))
* changing the colors
THIS.NewColors = num2dword(RGB(128,192,230))+;
num2dword(RGB(192,0,192))
= SetSysColors(2, THIS.ColorMask, THIS.NewColors)
PROCEDURE Destroy
* making sure that upon releasing the instance
* of the class all colors are restored back
THIS.RestoreColors
PROCEDURE RestoreColors
= SetSysColors(2, THIS.ColorMask, THIS.SavedColors)
PROCEDURE declare
DECLARE INTEGER GetSysColor IN user32 INTEGER nIndex
DECLARE INTEGER SetSysColors IN user32;
INTEGER nElements, STRING lpSysColor,;
STRING lpColorValues
ENDDEFINE
FUNCTION num2dword(lnValue)
#DEFINE m0 0x0000100
#DEFINE m1 0x0010000
#DEFINE m2 0x1000000
IF lnValue < 0
lnValue = 0x100000000 + lnValue
ENDIF
LOCAL b0, b1, b2, b3
b3 = Int(lnValue/m2)
b2 = Int((lnValue - b3*m2)/m1)
b1 = Int((lnValue - b3*m2 - b2*m1)/m0)
b0 = Mod(lnValue, m0)
RETURN Chr(b0)+Chr(b1)+Chr(b2)+Chr(b3)
|