Jump to content
Sign in to follow this  
rasim

_WinAPI_GetSysColor

Recommended Posts

rasim

Hi, how use the _WinAPI_GetSysColor function properly? Why background color of a label control green?

#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <Color.au3>

GUICreate("My GUI", 300, 200)

$button = GUICtrlCreateButton("Test", 50, 50, 75, 23)

$RGB = _WinAPI_GetSysColor($COLOR_ACTIVECAPTION) ;Active caption is blue

$Red = _ColorGetRed($RGB)
$Green = _ColorGetGreen($RGB)
$Blue = _ColorGetBlue($RGB)

$color = $Red & $Green & $Blue

;MsgBox(0, "", $color)

GUICtrlCreateLabel("", 50, 100, 100, 20)
GUICtrlSetBkColor(-1, "0x" & $color)

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
WEnd
Edited by rasim

Share this post


Link to post
Share on other sites
SmOke_N

Try removing the "0x" from GUICtrlSetBckColor() and just use the decimal it gives you.


Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer.

Share this post


Link to post
Share on other sites
therks

You are doing it wrong, sorry.

Notice this: MsgBox(0, "", $Red & @LF & $Green & @LF & $Blue)

You should know that hex values are always 2 digits, on my system the $red value is 3 (it's 106). The _ColorGet* functions are not returning the colors in hex format, they are returning in decimal format. Ideally, you would just use the return straight from _WinAPI_GetSysColor() but there is an issue with that because _WinAPI_GetSysColor() is returning the color in BGR format instead of RGB, so your colour comes out kinda backwards.

Try this code:

#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <Color.au3>

GUICreate("My GUI", 300, 200)

$button = GUICtrlCreateButton("Test", 50, 50, 75, 23)

$BGR = _WinAPI_GetSysColor($COLOR_ACTIVECAPTION);Active caption is blue

GUICtrlCreateLabel("", 50, 100, 100, 20)
GUICtrlSetBkColor(-1, _ColorBGRToRGB($BGR))

GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
WEnd

Func _ColorBGRToRGB($BGR)
    Local $RGB = BitShift($BGR, -16)
    $RGB += BitAND($BGR, 0xff00)
    $RGB += BitShift($BGR, 16)
    Return BitAND($RGB, 0xffffff)
EndFunc

Share this post


Link to post
Share on other sites
rasim

RobSaunders

Great! Thank you for help and explanation! ;)

Edited by rasim

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.