Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Пользователь


Сообщения: 135
Благодарности: 32

Профиль | Отправить PM | Цитировать


Утилита для подбора цвета:
Код: Выделить весь код
#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

Последний раз редактировалось Diamond, 21-09-2007 в 22:52. Причина: Поправка в коде

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:20, 21-09-2007 | #458