Код:

#NoTrayIcon
#include <GUIConstants.au3>
#include <Misc.au3>
Global Const $WM_HSCROLL = 0x0114
Global $red=255, $green=0, $blue=0, $x=0, $st=5, $N
$Colorizer=GUICreate("Сolorizer (RGB)","320","200",-1,-1,-1,$WS_EX_TOPMOST)
GUISetBkColor (0x000000)
Dim $CTRL_edit[3]
$CTRL_edit[0] = GUICtrlCreateEdit ("0", 5, 5, 34, 18,$ES_NUMBER)
GUICtrlSetTip (-1,"Red")
GUICtrlSetLimit (-1, 3)
$CTRL_edit[1] = GUICtrlCreateEdit ("0", 5, 30, 34, 18,$ES_NUMBER)
GUICtrlSetTip (-1,"Green")
GUICtrlSetLimit (-1, 3)
$CTRL_edit[2] = GUICtrlCreateEdit ("0", 5, 55, 34, 18,$ES_NUMBER)
GUICtrlSetTip (-1,"Blue")
GUICtrlSetLimit (-1, 3)
Dim $CTRL_slider[3] = [GUICtrlCreateSlider(54,5,255,20), GUICtrlCreateSlider(54,30,255,20), GUICtrlCreateSlider(54,55,255,20)]
For $i=0 To 2
GUICtrlSetLimit($CTRL_slider[$i],255,0)
GUICtrlSetBkColor($CTRL_slider[$i],0x000000)
Next
$CTRL_edit_hex = GUICtrlCreateEdit ("0x000000", 5, 145, 80, 18,$ES_READONLY)
GUICtrlSetTip (-1,"Шестнадцатиричное представление")
$Button_ChooseColor = GUICtrlCreateButton("Цвет",240,95,60,20)
$ButtonDr = GUICtrlCreateButton("Пипетка",240,120,60,20)
$ButtonRnd = GUICtrlCreateButton("Случайно",240,145,60,20)
For $i = $Button_ChooseColor To $ButtonRnd
_ButtonClassicStyle($i)
GUICtrlSetCursor ($i,0)
Next
$Gr=GUICtrlCreateGraphic(4,174,0,0)
$GrCover=GUICtrlCreatePic("",2,174,316,20,-1,$WS_EX_CLIENTEDGE)
Draw_ToneScale()
GUIRegisterMsg($WM_HSCROLL, "WM_SCROLL")
GUISetState(@SW_SHOWNORMAL)
;--------------------------------------
While 1
$msg=GUIGetMsg()
Switch $msg
Case $GUI_EVENT_PRIMARYUP
GUIRegisterMsg($WM_HSCROLL, "WM_SCROLL")
ToolTip("")
Case $GUI_EVENT_PRIMARYDOWN
GUIRegisterMsg($WM_HSCROLL, "WM_SCROLL_2")
Case $GUI_EVENT_CLOSE
Exit
Case $ButtonRnd
randomize()
Case $ButtonDr
dropper()
Case $Button_ChooseColor
ChooseColor()
Case $CTRL_edit[0] To $CTRL_edit[2]
$N = $msg - $CTRL_edit[0]
Input()
Case $CTRL_slider[0] To $CTRL_slider[2]
$N = $msg - $CTRL_slider[0]
slEvent()
Case $GrCover
DropperScale()
EndSwitch
WEnd
;~ Тоновая шкала:
Func Draw_ToneScale()
For $i=0 To 255 Step $st
$green=$i
SetColor()
Next
For $i=0 To 255 Step $st
$red=255-$i
SetColor()
Next
For $i=0 To 255 Step $st
$blue=$i
SetColor()
Next
For $i=0 To 255 Step $st
$green=255-$i
SetColor()
Next
For $i=0 To 255 Step $st
$red=$i
SetColor()
Next
For $i=0 To 255 Step $st
$blue=255-$i
SetColor()
Next
EndFunc
Func SetColor()
Local $color='0x' & Hex($red,2) & Hex($green,2) & Hex($blue,2)
GUICtrlSetGraphic($Gr,$GUI_GR_COLOR, $color)
GUICtrlSetGraphic($Gr,$GUI_GR_RECT,$x,0,1,20)
$x+=1
EndFunc
Func Input()
Local $color[3] = [GUICtrlRead($CTRL_edit[0]),GUICtrlRead($CTRL_edit[1]),GUICtrlRead($CTRL_edit[2])]
Local $str, $i, $ret="0x"
For $i=0 To 2
If $color[$i]="" Then
$color[$i]="0"
ElseIf $color[$i]>255 Then
$color[$i]="255"
EndIf
$ret &= Hex($color[$i],2)
Next
GUICtrlSetData ($CTRL_edit_hex,$ret)
GUICtrlSetData($CTRL_edit[$N],$color[$N])
GUICtrlSetData($CTRL_slider[$N],$color[$N])
GUISetBkColor($ret,$Colorizer)
;~ Меняем фоновый цвет слайдеров:
For $j=0 To 2
GUICtrlSetBkColor($CTRL_slider[$j],$ret)
Next
EndFunc
Func slEvent()
Local $slColor=GUICtrlRead($CTRL_slider[$N])
GUICtrlSetData ($CTRL_edit[$N],$slColor)
GUICtrlSetState($CTRL_slider[$N],$GUI_FOCUS)
Input()
;~ Возвращаем утраченный фокус элементу:
GUICtrlSetState($CTRL_slider[$N],$GUI_FOCUS)
EndFunc
Func randomize()
Local $i, $HexColor ='0x'
For $i=0 to 2
$rnd = int(Random(0,255))
$HexColor &= Hex($rnd,2)
GUICtrlSetData($CTRL_edit[$i],$rnd)
GUICtrlSetData($CTRL_slider[$i],$rnd)
Next
For $i=0 to 2
GUICtrlSetBkColor($CTRL_slider[$i],$HexColor)
Next
GUICtrlSetData($CTRL_edit_hex,$HexColor)
GUISetBkColor($HexColor,$Colorizer)
EndFunc
Func dropper()
Local $Time=TimerInit()
GUICtrlSetState($ButtonDr,$GUI_DISABLE)
ToolTip("Кликните мышью в любом месте экрана",Default,Default,"",0,3)
While 1
Sleep (1) ; Символический таймаут для уменьшения CPU!!!
$click=GUIGetCursorInfo ($Colorizer)
If TimerDiff($Time)>2300 Then ToolTip("")
If $click[2] Then
$Mouse=MouseGetPos()
$x=$Mouse[0]
$y=$Mouse[1]
$DrColor=Hex(PixelGetColor ($x,$y ),6)
$j=1
For $i=0 to 2
$Dr=Dec(StringMid($DrColor,$j,2))
GUICtrlSetData($CTRL_edit[$i],$Dr)
GUICtrlSetData($CTRL_slider[$i],$Dr)
$j += 2
Next
For $i=0 to 2
GUICtrlSetBkColor($CTRL_slider[$i],'0x' & $DrColor)
Next
GUICtrlSetData($CTRL_edit_hex,'0x' & $DrColor)
GUISetBkColor('0x' & $DrColor,$Colorizer)
GUICtrlSetState($ButtonDr,$GUI_ENABLE)
ExitLoop
EndIf
WEnd
EndFunc
Func DropperScale()
GUICtrlSetCursor($GrCover,3)
$coord = _GetControlPos ($Colorizer, $GrCover)
While 1
$i_msg = GUIGetMsg()
If $i_msg = $GUI_EVENT_PRIMARYUP Then ExitLoop
_MouseTrap($coord[0]+2,$coord[1]+2,$coord[2]-2,$coord[3]-2)
WEnd
Local $Mouse=MouseGetPos()
Local $DrColor=Hex(PixelGetColor ($Mouse[0],$Mouse[1]),6)
_MouseTrap()
GUICtrlSetCursor($msg,2)
Local $j=1
For $i=0 to 2
$Dr=Dec(StringMid($DrColor,$j,2))
GUICtrlSetData($CTRL_edit[$i],$Dr)
GUICtrlSetData($CTRL_slider[$i],$Dr)
$j += 2
Next
For $i=0 to 2
GUICtrlSetBkColor($CTRL_slider[$i],'0x' & $DrColor)
Next
GUICtrlSetData($CTRL_edit_hex,'0x' & $DrColor)
GUISetBkColor('0x' & $DrColor,$Colorizer)
EndFunc
;~ Author: Diamond
Func _GetControlPos($HWND, $ControlId)
Local $Win = WinGetPos($HWND)
Local $Client = WinGetClientSize($HWND)
Local $Control = ControlGetPos($HWND,"",$ControlId)
Local $BorderSize = ($Win[2]-$Client[0]) / 2
Local $PanelSize = $Win[3] - $Client[1] - $BorderSize
Local $array[4]
$array[0] = $Win[0] + $BorderSize + $Control[0] ; left
$array[1] = $Win[1] + $PanelSize + $Control[1] ; $top
$array[2] = $array[0] + $Control[2] ; right
$array[3] = $array[1] + $Control[3] ; bottom
Return $array
EndFunc
Func ChooseColor()
GUISetState(@SW_DISABLE)
SetOnTop($Colorizer,1)
Local $HexColor = '0x'
Local $BGR=ColorPicker(SwitchColor(GUICtrlRead($CTRL_edit_hex)))
GUISetState(@SW_ENABLE)
SetOnTop($Colorizer,-1)
If $BGR = -1 Then Return
For $i=0 to 2
$HexColor &= Hex($BGR[$i+1],2)
GUICtrlSetData($CTRL_edit[$i],$BGR[$i+1])
GUICtrlSetData($CTRL_slider[$i],$BGR[$i+1])
Next
For $i=0 to 2
GUICtrlSetBkColor($CTRL_slider[$i],$HexColor)
Next
GUICtrlSetData($CTRL_edit_hex,$HexColor)
GUISetBkColor($HexColor,$Colorizer)
EndFunc
Func ColorPicker($Default=0)
Local $p = DllStructCreate("dword;int;int;int;ptr;dword;int;ptr;ptr")
DllStructSetData($p, 1, DllStructGetSize($p))
DllStructSetData($p, 2, 0)
DllStructSetData($p, 4, $Default)
DllStructSetData($p, 5, DllStructGetPtr(DllStructCreate("int[16]")))
DllStructSetData($p, 6, BitOR(0x100, 0x2, 0x1))
$ret = DllCall("comdlg32.dll", "long", "ChooseColor", "ptr",DllStructGetPtr($p))
If $ret[0] = False Then Return -1
Local $color_picked = DllStructGetData($p, 4)
$color_picked = Hex(String($color_picked), 6)
Local $array[4]
$array[0]="0x" & StringRight($color_picked,2) & StringMid($color_picked,3,2) & StringLeft($color_picked,2)
$array[1]=Number("0x" & StringRight($color_picked,2)) ; RED
$array[2]=Number("0x" & StringMid($color_picked,3,2)) ; GREEN
$array[3]=Number("0x" & StringLeft($color_picked,2)) ; BLUE
Return $array
EndFunc
Func WM_SCROLL($hWndGUI, $MsgID, $WParam, $LParam)
Switch $LParam
Case GUICtrlGetHandle($CTRL_slider[0])
$N = 0
Case GUICtrlGetHandle($CTRL_slider[1])
$N = 1
Case GUICtrlGetHandle($CTRL_slider[2])
$N = 2
EndSwitch
slEvent()
EndFunc
Func WM_SCROLL_2($hWndGUI, $MsgID, $WParam, $LParam)
Local $title
Switch $LParam
Case GUICtrlGetHandle($CTRL_slider[0])
$N = 0
Case GUICtrlGetHandle($CTRL_slider[1])
$N = 1
Case GUICtrlGetHandle($CTRL_slider[2])
$N = 2
EndSwitch
ToolTip(GUICtrlRead($CTRL_slider[$N]))
EndFunc
; Author - RazerM
Func SwitchColor ($iColor)
Local $iMask
$iMask = BitXOR(BitAND($iColor, 0xFF) , ($iColor / 0x10000))
Return BitXOR($iColor, ($iMask * 0x10001))
EndFunc ;==>SwitchColor
;~ Author: Diamond
Func _ButtonClassicStyle($controlID, $style=0)
GUICtrlSetStyle($controlID, 0x0040) ; $BS_ICON
GUICtrlSetImage($controlID, "shell32.dll",0,0)
GUICtrlSetStyle($controlID, $style)
EndFunc
Func SetOnTop($HWND, $TOPMOST)
DllCall("User32.dll","long","SetWindowPos","hwnd",$HWND, _
"int",$TOPMOST, _ ; Always On Top = -1
"int",0, _ ; Left
"int",0, _ ; Top
"int",0, _ ; Width
"int",0, _ ; Height
"int",3) ; Flag: $SWP_NOSIZE=1 and $SWP_NOMOVE=2
EndFunc