Very nice, this type of tool is so useful.
I made a color picker a few months ago to help with making gui's and the like. I use it almost every day.
I didn't end up adding alpha to it, but I did add the ability to grab any colour off the screen / add that colour to a mixer while keeping the grabbed colour as is and the ability to save up to 30-ish colours to a file for later use along with notes about what the saved colour is for.
This is my code.
Code: Select all
#SingleInstance,Force
CoordMode,Mouse,Screen
CoordMode,Pixel,Screen
SetWorkingDir %A_ScriptDir%
OnMessage(0x232, "WM_EXITSIZEMOVE")
My_Color := "000000"
C_Red := 00
C_Green := 00
C_Blue := 00
Picker_Color := "0x000000"
GoSub, Load_File
Gui, 1:Color, Black,
Gui, 1:Add, Groupbox,x5 y0 w290 h335
Gui, 1:Add, Groupbox,x10 y5 w280 h120
Gui, 1:Add, Text,cRed x10 y130 w90 center border,Red
Gui, 1:Add, Slider, x32 y145 h100 vertical center range0-255 invert thick30 AltSubmit vRed1 gSlider1 ,0
Gui, 1:Add, Text,cGreen x110 y130 w80 center border,Green
Gui, 1:Add, Slider, x127 y145 h100 vertical center range0-255 invert thick30 AltSubmit vGreen1 gSlider2 ,0
Gui, 1:Add, Text,c0076FF x200 y130 w90 center border,Blue
Gui, 1:Add, Slider, x222 y145 h100 vertical center range0-255 invert thick30 AltSubmit vBlue1 gSlider3 ,0
Gui, 1:Add, Text,cWhite x10 y245 w280 border center, Decimal
Gui, 1:Add, Edit, cRed x10 y265 w90 h20 vedit1 ReadOnly center,0
Gui, 1:Add, Edit, cGreen x110 y265 w80 h20 vedit2 ReadOnly center,0
Gui, 1:Add, Edit, cc0076FF x200 y265 w90 h20 vedit3 ReadOnly center,0
Gui, 1:Add, Text,cWhite x10 y290 w280 border center, Hexadecimal
Gui, 1:Add, Edit, cRed x10 y310 w90 h20 vedit4 ReadOnly center,00
Gui, 1:Add, Edit, cGreen x110 y310 w80 h20 vedit5 ReadOnly center,00
Gui, 1:Add, Edit, cc0076FF x200 y310 w90 h20 vedit6 ReadOnly center,00
Gui, 1:Add, Groupbox,x5 y335 w290 h120
Gui, 1:Add, Groupbox,x10 y340 w280 h35
Gui, 1:Add, Button, x10 y380 w280 h20 gGet_Color, Get Colour
Gui, 1:Add, Button, x10 y405 w280 h20 gAdd_To_Mixer,Add To Mixer
Gui, 1:Add, Text,cAqua x10 y430 w50 h20 center border, Colour =
Gui, 1:Add, Edit,cYellow x+5 w60 h20 Center ReadOnly vPicker_Color, %Picker_Color%
Gui, 1:Add, Text,cAqua x+5 w30 h20 center border, X =
Gui, 1:Add, Edit,cYellow x+5 w40 h20 Center ReadOnly vThe_X,
Gui, 1:Add, Text,cAqua x+5 w30 h20 center border, Y =
Gui, 1:Add, Edit,cYellow x+5 w40 h20 Center ReadOnly vThe_Y,
Gui, 1:Add, Groupbox,x5 y455 w290 h140
Gui, 1:Add, Checkbox,cLime x10 y470 Checked vLock1 gLock, Lock
Gui, 1:Add, Edit, x+10 y466 w50 h20 gScroll, 1
Gui, 1:Add, UpDown, vMyUpDown1 Range1-30 gScroll, 1
Gui, 1:Add, Text, cWhite x+10 y466 w35 h20 center border, Name:
Gui, 1:Add, Edit,cBlack x+5 y466 w125 h20 vMy_Name gSubmit_All,% Name_Array[1]
Gui, 1:Add,Text,cAqua x10 y490 w280 center border,***** Notes *****
Gui, 1:Add, Edit,cBlack x10 y510 w280 r2 vMy_Notes gSubmit_All,% Notes_Array[1]
Gui, 1:Add, Button, x10 y547 w280 h20 Disabled vLoad_Button gLoad_Color,Load Colour
Gui, 1:Add, Button, x10 y570 w280 h20 Disabled vSave_Button gSave_Color,Save Colour
Gui, 3:Color, %Picker_Color%
Gui, 2:Color,%My_Color%
Gui, 1:+AlwaysOnTop
Gui, 2:+AlwaysOnTop -caption +Owner1
Gui, 3:+AlwaysOnTop -caption +Owner1
Gui, 1:Show, w300 h600,Hellbents Colour Mixer
WinGetPos,X1, Y1,,,Hellbents Colour Mixer
X2 := X1 + 20
Y2 := Y1 +44
X3 := X1 + 20
Y3 := Y1 +377
Gui, 2:Show, x%X2% y%Y2% w266 h100
Gui, 3:Show, x%X3% y%Y3% w266 h20
Gui, 1:Submit,NoHide
return
GuiClose:
ExitApp
Lock:
Gui, 1:Submit, NoHide
if(Lock1==1)
{
GuiControl,1:Disable,Load_Button,
GuiControl,1:Disable,Save_Button,
}
if(Lock1==0)
{
GuiControl,1:Enable,Load_Button,
GuiControl,1:Enable,Save_Button,
}
return
Slider1:
Gui,1:Submit,NoHide
My_Color := C_Red C_Green C_Blue
Gui, 2:Color, %My_Color%
GuiControl,1:,edit1,%Red1%
C_Red := Red1
SetFormat,IntegerFast,Hex
if(C_Red<16)
{
StringRight, C_Red, C_Red, 1
C_Red := 0 C_Red
}
if(C_Red>=16)
StringRight, C_Red, C_Red, 2
My_Color := C_Red C_Green C_Blue
GuiControl,1:,edit4,%C_Red%
Gui, 2:Color, %My_Color%
SetFormat,IntegerFast,D
return
Slider2:
Gui,1:Submit,NoHide
My_Color := C_Red C_Green C_Blue
Gui, 2:Color, %My_Color%
GuiControl,1:,edit2,%Green1%
C_Green := Green1
SetFormat,IntegerFast,Hex
if(C_Green<16)
{
StringRight, C_Green, C_Green, 1
C_Green := 0 C_Green
}
if(C_Green>=16)
StringRight, C_Green, C_Green, 2
My_Color := C_Red C_Green C_Blue
GuiControl,1:,edit5,%C_Green%
Gui, 2:Color, %My_Color%
SetFormat,IntegerFast,D
return
Slider3:
Gui,1:Submit,NoHide
My_Color := C_Red C_Green C_Blue
Gui, 2:Color, %My_Color%
GuiControl,1:,edit3,%Blue1%
C_Blue := Blue1
SetFormat,IntegerFast,Hex
if(C_Blue<16)
{
StringRight, C_Blue, C_Blue, 1
C_Blue := 0 C_Blue
}
if(C_Blue>=16)
StringRight, C_Blue, C_Blue, 2
My_Color := C_Red C_Green C_Blue
GuiControl,1:,edit6,%C_Blue%
Gui, 2:Color, %My_Color%
SetFormat,IntegerFast,D
return
Submit_All:
Gui, Submit, NoHide
return
Get_Color:
isPressed := 0
Loop
{
Left_Mouse := GetKeyState("LButton")
Right_Mouse := GetKeyState("RButton")
if(Left_Mouse==False&&isPressed==0)
isPressed := 1
else if(Left_Mouse==True&&isPressed==1)
{
MouseGetPos,The_X,The_Y
PixelGetColor,Picker_Color,The_X,The_Y, RGB
Gui, 3:Color, %Picker_Color%
GuiControl,1:,Picker_Color,%Picker_Color%
GuiControl,,The_X,%The_X%
GuiControl,,The_Y,%The_Y%
}
else if(Right_Mouse==True)
break
}
return
Add_To_Mixer:
Gui, 2:Color, %Picker_Color%
Temp_Color := Picker_Color
StringRight, Temp_Color, Temp_Color, 6
Temp_Color1 := Temp_Color
StringLeft, Temp_Color1, Temp_Color1, 2
C_Red := Temp_Color1
GuiControl,1:,Edit4,%C_Red%
C_Red := "0x" C_Red
C_Red := C_Red + 0
GuiControl,1:,Edit1,%C_Red%
Temp_Color1 := Temp_Color
StringLeft, Temp_Color1, Temp_Color1, 4
StringRight, Temp_Color1, Temp_Color1, 2
C_Green := Temp_Color1
GuiControl,1:,Edit5,%C_Green%
C_Green := "0x" C_Green
C_Green := C_Green + 0
GuiControl,1:,Edit2,%C_Green%
Temp_Color1 := Temp_Color
StringRight, Temp_Color1, Temp_Color1, 2
C_Blue := Temp_Color1
GuiControl,1:,Edit6,%C_Blue%
C_Blue := "0x" C_Blue
C_Blue := C_Blue + 0
GuiControl,1:,Edit3,%C_Blue%
GuiControl,1:,Red1,%C_Red%
GuiControl,1:,Green1,%C_Green%
GuiControl,1:,Blue1,%C_Blue%
GoSub,Slider1
GoSub,Slider2
GoSub,Slider3
return
Scroll:
Gui,1:Submit,NoHide
GuiControl,1:,My_Name,% Name_Array[MyUpDown1]
GuiControl,1:,My_Notes,% Notes_Array[MyUpDown1]
return
Load_File:
Color_Array := []
Name_Array := []
Notes_Array := []
Reset := 1
Color11 := 1
Name11 := 1
Notes11 := 1
FileRead, File_Holder, Hellbents Colour Mixer Save File.txt
Loop, Parse, File_Holder,|,|
{
if(Reset==1)
{
Color_Array[Color11] := A_LoopField
Color11++
}
if(Reset==2)
{
Name_Array[Name11] := A_LoopField
Name11++
}
if(Reset==3)
{
Notes_Array[Notes11] := A_LoopField
Notes11++
}
Reset++
if(Reset==4)
Reset := 1
}
return
Load_Color:
Gui,2:Color,% Color_Array[MyUpDown1]
Gui,3:Color,% Color_Array[MyUpDown1]
Picker_Color := Color_Array[MyUpDown1]
GuiControl, 1:,Picker_Color,% Picker_Color
Temp_Color := Picker_Color
StringRight, Temp_Color, Temp_Color, 6
Temp_Color1 := Temp_Color
StringLeft, Temp_Color1, Temp_Color1, 2
C_Red := Temp_Color1
GuiControl,1:,Edit4,%C_Red%
C_Red := "0x" C_Red
C_Red := C_Red + 0
GuiControl,1:,Edit1,%C_Red%
Temp_Color1 := Temp_Color
StringLeft, Temp_Color1, Temp_Color1, 4
StringRight, Temp_Color1, Temp_Color1, 2
C_Green := Temp_Color1
GuiControl,1:,Edit5,%C_Green%
C_Green := "0x" C_Green
C_Green := C_Green + 0
GuiControl,1:,Edit2,%C_Green%
Temp_Color1 := Temp_Color
StringRight, Temp_Color1, Temp_Color1, 2
C_Blue := Temp_Color1
GuiControl,1:,Edit6,%C_Blue%
C_Blue := "0x" C_Blue
C_Blue := C_Blue + 0
GuiControl,1:,Edit3,%C_Blue%
GuiControl,1:,Red1,%C_Red%
GuiControl,1:,Green1,%C_Green%
GuiControl,1:,Blue1,%C_Blue%
GoSub,Slider1
GoSub,Slider2
GoSub,Slider3
return
Save_Color:
FileDelete, Hellbents Colour Mixer Save File.txt
p := 1
Notes_Array[MyUpDown1] := My_Notes
Name_Array[MyUpDown1] := My_Name
Color_Array[MyUpDown1] := Picker_Color
Loop 30
{
FileAppend,% Color_Array[p]"|"Name_Array[p]"|"Notes_Array[p]"|",Hellbents Colour Mixer Save File.txt
p++
}
Color_Array := []
Name_Array := []
Notes_Array := []
Reset := 1
Color11 := 1
Name11 := 1
Notes11 := 1
FileRead, File_Holder, Hellbents Colour Mixer Save File.txt
Loop, Parse, File_Holder,|,|
{
if(Reset==1)
{
Color_Array[Color11] := A_LoopField
Color11++
}
if(Reset==2)
{
Name_Array[Name11] := A_LoopField
Name11++
}
if(Reset==3)
{
Notes_Array[Notes11] := A_LoopField
Notes11++
}
Reset++
if(Reset==4)
Reset := 1
}
return
WM_EXITSIZEMOVE()
{
IfWinExist,Hellbents Colour Mixer
{
WinGetPos, X, Y, , , A
X2:=X+20
Y2:=Y+44
X3 := X + 20
Y3 := Y +377
Gui, 2:Show, x%X2% y%Y2%
Gui, 3:Show, x%X3% y%Y3%
}
}
Esc::ExitApp