﻿;-- TIME_STAMP   2022-07-25 10:13:35   v 0.1


#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WinAPIGdi.au3>
#include <WinAPIHObj.au3>
#include <WindowsConstants.au3>


Global $aColors[][2] = [ _
["Maroon",0x800000],       _
["DarkRed",0x8B0000],      _
["Brown",0xA52A2A],        _
["FireBrick",0xB22222],    _
["Crimson",0xDC143C],      _
["IndianRed",0xCD5C5C],    _
["Red",0xFF0000],          _
["OrangeRed",0xFF4500],    _
["Tomato",0xFF6347],       _
["Coral",0xFF7F50],        _
["LightCoral",0xF08080],   _
["Salmon",0xFA8072],       _
["DarkSalmon",0xE9967A],   _
["LightSalmon",0xFFA07A],  _
["DarkOrange",0xFF8C00],   _
["Orange",0xFFA500],       _
["DarkGoldenrod",0xB8860B], _
["Goldenrod",0xDAA520],    _
["Gold",0xFFD700],         _
["Yellow",0xFFFF00],       _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
["SaddleBrown",0x8B4513],  _ ; new block
["Sienna",0xA0522D],       _
["Chocolate",0xD2691E],    _
["Peru",0xCD853F],         _
["SandyBrown",0xF4A460],   _
["RosyBrown",0xBC8F8F],    _
["Tan",0xD2B48C],          _
["BurlyWood",0xDEB887],    _
["Wheat",0xF5DEB3],        _
["Moccasin",0xFFE4B5],     _
["PeachPuff",0xFFDAB9],    _
["NavajoWhite",0xFFDEAD],  _
["Bisque",0xFFE4C4],       _
["BlanchedAlmond",0xFFEBCD], _
["PapayaWhip",0xFFEFD5],   _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
["DarkGreen",0x006400],    _ ; new block
["Green",0x008000],        _
["ForestGreen",0x228B22],  _
["SeaGreen",0x2E8B57],     _
["MediumSeaGreen",0x3CB371], _
["MediumAquamarine",0x66CDAA], _
["LimeGreen",0x32CD32],    _
["Lime",0x00FF00],         _
["Chartreuse",0x7FFF00],   _
["LawnGreen",0x7CFC00],    _
["GreenYellow",0xADFF2F],  _
["MediumSpringGreen",0x00FA9A], _
["SpringGreen",0x00FF7F],  _
["LightGreen",0x90EE90],      _
["PaleGreen",0x98FB98],       _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
["Olive",0x808000],        _
["DarkOliveGreen",0x556B2F],  _ ; new block
["OliveDrab",0x6B8E23],       _
["YellowGreen",0x9ACD32],  _
["DarkSeaGreen",0x8FBC8F],    _
["Teal",0x008080],            _
["DarkCyan",0x008B8B],        _
["LightSeaGreen",0x20B2AA],   _
["DarkTurquoise",0x00CED1],   _
["MediumTurquoise",0x48D1CC], _
["Turquoise",0x40E0D0],       _
["Aquamarine",0x7FFFD4],      _
["Aqua",0x00FFFF],            _
["Cyan",0x00FFFF],            _
["PaleTurquoise",0xAFEEEE], _
["LightCyan",0xE0FFFF], _
["Azure",0xF0FFFF], _
["AliceBlue",0xF0F8FF], _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
["DarkKhaki",0xBDB76B], _ ; new block
["Khaki",0xF0E68C], _
["PaleGoldenrod",0xEEE8AA], _
["LemonChiffon",0xFFFACD], _
["LightGoldenrodYellow",0xFAFAD2], _
["Cornsilk",0xFFF8DC], _
["LightYellow",0xFFFFE0], _
["Beige",0xF5F5DC], _
["Ivory",0xFFFFF0], _
["Honeydew",0xF0FFF0], _
["MintCream",0xF5FFFA], _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
["MidnightBlue",0x191970],    _ ; new block
["Navy",0x000080],            _
["DarkBlue",0x00008B],        _
["MediumBlue",0x0000CD],      _
["Blue",0x0000FF],            _
["RoyalBlue",0x4169E1],       _
["DodgerBlue",0x1E90FF],      _
["DeepSkyBlue",0x00BFFF],     _
["CornflowerBlue",0x6495ED],  _
["SkyBlue",0x87CEEB],         _
["LightSkyBlue",0x87CEFA],    _
["LightSteelBlue",0xB0C4DE],  _
["DarkSlateBlue",0x483D8B],   _
["SlateBlue",0x6A5ACD],       _
["MediumSlateBlue",0x7B68EE], _
["SteelBlue",0x4682B4],       _
["CadetBlue",0x5F9EA0],       _
["PowderBlue",0xB0E0E6],      _
["LightBlue",0xADD8E6],       _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
['',0xF0F0F0],  _
["Indigo",0x4B0082],          _ ; new block
["BlueViolet",0x8A2BE2], _
["MediumPurple",0x9370DB], _
["DarkViolet",0x9400D3], _
["DarkOrchid",0x9932CC], _
["MediumOrchid",0xBA55D3], _
["Orchid",0xDA70D6], _
["Purple",0x800080], _
["DarkMagenta",0x8B008B], _
["MediumVioletRed",0xC71585], _
["PaleVioletRed",0xDB7093], _
["DeepPink",0xFF1493], _
["HotPink",0xFF69B4], _
["Fuchsia",0xFF00FF], _
["Magenta",0xFF00FF], _
["Violet",0xEE82EE], _
["Plum",0xDDA0DD], _
["Thistle",0xD8BFD8], _
["Lavender",0xE6E6FA], _
["Pink",0xFFC0CB], _
["LightPink",0xFFB6C1], _
["MistyRose",0xFFE4E1],    _
["LavenderBlush",0xFFF0F5], _
["Black",0x000000], _ ; new block
["DarkSlateGray",0x2F4F4F], _
["SlateGray",0x708090], _
["LightSlateGray",0x778899], _
["DimGray",0x696969], _
["Gray",0x808080], _
["DarkGray",0xA9A9A9], _
["Silver",0xC0C0C0], _
["LightGray",0xD3D3D3], _
["Gainsboro",0xDCDCDC], _
["AntiqueWhite",0xFAEBD7], _
["Linen",0xFAF0E6],        _
["OldLace",0xFDF5E6],      _
["FloralWhite",0xFFFAF0],  _
["Snow",0xFFFAFA], _
["GhostWhite",0xF8F8FF], _
["WhiteSmoke",0xF5F5F5], _
["White",0xFFFFFF] _
]

Global $aLabel[UBound($aColors)], $w = 185, $x = -$w, $y = -30

Global $hGui = GUICreate('', 1489, 715, @DesktopWidth-1489, 0, 0x80000000)
GUISetFont(12, 400, Default, 'Consolas')
For $i = 0 To UBound($aColors) -1
    $x = Mod($i, 23) = 0 ? ($x+$w+1) : $x
    $y = Mod($i, 23) = 0 ? 1 : ($y+30+1)
    $aLabel[$i] = GUICtrlCreateLabel($aColors[$i][0], $x, $y, $w, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
    _GuiCtrl_SetColorContrast(-1, $aColors[$i][1])
Next

_GuiHole($hGui)     ; Auskommentieren für sichtbaren Fensterhintergrund

GUISetState()

Global $gMsg, $IDclick, $aColorClick, $sClip


While True
    $gMsg = GUIGetMsg()
    Switch $gMsg
        Case -3
            Exit
        Case $GUI_EVENT_PRIMARYUP, $GUI_EVENT_SECONDARYUP
            $IDclick = GUIGetCursorInfo($hGui)[4]
            $aColorClick = _GetColor($IDclick)
            If $aColorClick[0] <> '' Then
                $sClip = '$' & $aColorClick[0] & ' = 0x' & Hex($aColorClick[1],6)
                If $gMsg = $GUI_EVENT_PRIMARYUP Then $sClip = '0x' & Hex($aColorClick[1],6)
                Exit ClipPut($sClip)
            EndIf
    EndSwitch
WEnd


Func _GetColor($_ID)
    Local $index = $_ID - $aLabel[0]
    Local $aRet[] = [$aColors[$index][0],$aColors[$index][1]]
    Return $aRet
EndFunc


; #FUNCTION# =======================================================================================
; Name ..........: _GuiCtrl_SetColorContrast
; Description ...: Sets the background color for a control and depending on its brightness the
; ...............: appropriate contrast color for the text.
; Parameter(s)...: $_ID           The control ID
; ...............: $_BkCol        The background color
; ....[optional].: $_ColOnDark    The text color if BG is dark (Default: -1, almost white)
; ....[optional].: $_colOnBright  The text color if BG is bright (Default: -1, very deep blue)
; Return values .: Success  1
; ...............: Failure  0
; Author ........: BugFix
; ==================================================================================================
Func _GuiCtrl_SetColorContrast($_ID, $_BkCol, $_ColOnDark=-1, $_colOnBright=-1)
    $_ColOnDark = $_ColOnDark = -1 ? 0xFAFAFA : $_ColOnDark
    $_colOnBright = $_colOnBright = -1 ? 0x000088 : $_colOnBright
    GUICtrlSetBkColor($_ID, $_BkCol)
    ; get contrast
    Local $R = BitAND(BitShift($_BkCol, 16), 0xFF)
    Local $G = BitAND(BitShift($_BkCol, 8), 0xFF)
    Local $B = BitAND($_BkCol, 0xFF)
    Local $Brightness = Sqrt($R^2*0.299 + $G^2*0.587 + $B^2*0.114)
;~     Local $iCol = $Brightness < 128 ? $_ColOnDark : $_colOnBright
    Local $iCol = $Brightness < 140 ? $_ColOnDark : $_colOnBright
    Return GUICtrlSetColor($_ID, $iCol)
EndFunc


Func _GuiHole($h_win)
    Local $combined_rgn = _WinAPI_CreateRectRgn(0, 0, 0, 0)
    _AddCtrlRegion($combined_rgn, $aLabel)
    _WinAPI_SetWindowRgn($h_win, $combined_rgn)
    _WinAPI_DeleteObject($combined_rgn)
EndFunc   ;==>_GuiHole


Func _AddCtrlRegion($full_rgn, $ctrl_id)
    Local $ctrl_pos, $ctrl_rgn
    If IsArray($ctrl_id) Then
        For $i = 0 To UBound($ctrl_id) -1
            If GUICtrlRead($ctrl_id[$i]) = '' Then ContinueLoop
            $ctrl_pos = ControlGetPos($hGui, "", $ctrl_id[$i])
            $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
            _WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
            _WinAPI_DeleteObject($ctrl_rgn)
        Next
    Else
        $ctrl_pos = ControlGetPos($hGui, "", $ctrl_id)
        $ctrl_rgn = _WinAPI_CreateRectRgn($ctrl_pos[0], $ctrl_pos[1], $ctrl_pos[0] + $ctrl_pos[2], $ctrl_pos[1] + $ctrl_pos[3])
        _WinAPI_CombineRgn($full_rgn, $full_rgn, $ctrl_rgn, $RGN_OR)
        _WinAPI_DeleteObject($ctrl_rgn)
    EndIf
EndFunc   ;==>_AddCtrlRegion