该代码实现了一个自定义颜色选择对话框,允许用户选择颜色并进行各种颜色的调整和操作,颜色值最终会被保存到 colors.ini 文件中。

 

Plain text
复制到剪贴板
Open code in new window
EnlighterJS 3 Syntax Highlighter
versioninfo =
(
========================================================================
Description ...: A Custom ColorDialog
Usage..........: Run from your script and selected color is saved to colors.ini as RGB
.................: runwait, colordialog.ahk ; run script, return when exited
..................: IniRead, color, colors.ini, Color, color_selected,0x00000 ; load color from dialog into %color%
Version .......: 1.0
Modified ......: 2017.07.06
Author ........: Peared
AHK-Version....: 1.1.26.00 U32
OS-Versions....: Win 10 64
========================================================================
Copyright (C) 2014-2016
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
It would never been anything other than an idea without all help ihave 4
found in Autohotkey.com forum, so thank you all for sharing.
)
; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=34092
#NoEnv
color_dialog_tool()
color_dialog_tool(){
global
colorlist2:=[0xffff0000,0xffff6600,0xffffcc00,0xffccff00,0xff66ff00,0xff00ff00,0xff00ff66,0xff00ffcc,0xff00ccff,0xff0066ff,0xff0000ff,0xff6600ff,0xffcc00ff,0xffff00cc,0xffff0066,0xffff0004]
colorlist1:=[0xff000000,0xffff0000,0xffffffff]
colorlist1pos := [0.0,0.3,1.0]
c1:=0
gui colordial:+alwaysontop +lastfound
Gui, colordial:Margin, 5, 5
Gui, colordial:color, white
Gui, colordial:FONT, BLACK
loop 8
{
IniRead, v%c1%, colors.ini, Color, v%c1%,0x000000
tmpcol := v%c1%
Gui, colordial:Add, text,+E0x20 0x200 w20 h20 BackgroundTrans v1%c1% gcolor_preset,
Gui, colordial:Add, Progress, x+-20 y+-20 w20 h20 Background%tmpcol% vv%c1%
c1++
GuiControl,+Background%tmpcol%,v%c1%
}
loop 4
{
IniRead, v%c1%, colors.ini, Color, v%c1%,0x000000
tmpcol := v%c1%
Gui, colordial:Add, text,+E0x20 0x200 x+5 y5 w20 h20 BackgroundTrans v1%c1% gcolor_preset,
Gui, colordial:Add, Progress, x+-20 y+-20 w20 h20 Background%tmpcol% vv%c1%
c1++
GuiControl,+Background%tmpcol%,v%c1%
loop 7
{
IniRead, v%c1%, colors.ini, Color, v%c1%,0x000000
tmpcol := v%c1%
Gui, colordial:Add, text,y+5 +E0x20 0x200 w20 h20 BackgroundTrans v2%c1% gcolor_preset,
Gui, colordial:Add, progress, x+-20 y+-20 w20 h20 Background%tmpcol% vv%c1%
GuiControl,+Background%tmpcol%,v%c1%
c1++
}
}
gui, colordial:font, s10 w700,
Gui, colordial:Add, Pic, x+5 y5 w200 h200 gcolorpal hwndHPI1C
Gui, colordial:Add, Pic, x+5 w15 h200 gcolorver hwndHPIC
Gui, colordial:Add, text, x+5 y5 +E0x20 0x200 w60 h30 section BackgroundTrans gcolor_preset_set,
Gui, colordial:Add, Progress, x+-60 y+-30 w60 h30 Background%RGB_v% vpC
Gui, colordial:Add, text, x+5 +E0x20 0x200 w70 h30 BackgroundTrans vrgbval, # %color_main%
gui, colordial:add, button, x+5 w50 h30 gcopy, Copy
Gui, colordial:Add, text,xs y+0 +E0x20 0x200 w60 h30 BackgroundTrans gcolor_preset_set,
Gui, colordial:Add, Progress, x+-60 y+-30 w60 h30 Background%RGB_v2% vpC2
Gui, colordial:Add, text, x+5 +E0x20 0x200 w70 h30 BackgroundTrans vrgbvalold, # %color_old%
gui, colordial:add, button, x+5 w50 h30 gcopyold, Copy
Gui, colordial:Add, Slider,xs y+10 w120 h20 AltSubmit +NoTicks +Range0-255 vsR gSlidermove line1, %R_v%
Gui, colordial:Add, Text, x+5 w28 h28 +Border vtr cBLACK +BackgroundTrans, R:
gui, colordial:font
Gui, colordial:Add, Edit, X+-10 W50 r1 LIMIT3 number vS_Red hwndRED gedit_set,%R_v%
Gui, colordial:Add, UpDown, vU_redDown Range0-255 gupdown_set, %R_v%
Gui, colordial:Add, Slider, xs y+7 w120 h20 AltSubmit +NoTicks +Range0-255 vsG gSlidermove line1, %G_v%
gui, colordial:font, s10 w700,
Gui, colordial:Add, Text,x+5 w28 h28 +Border vtg cBLACK +BackgroundTrans, G:
gui, colordial:font
Gui, colordial:Add, Edit, X+-10 W50 r1 LIMIT3 number r1 vS_GREEN hwndGREEN gedit_set,%G_v%
Gui, colordial:Add, UpDown, vU_greenDown Range0-255 gupdown_set, %G_v%
Gui, colordial:Add, Slider, xs y+8 w120 h20 AltSubmit +NoTicks +Range0-255 vsB gSlidermove line1, %B_v%
gui, colordial:font, s10 w700,
Gui, colordial:Add, Text, x+5 w28 h28 +Border vtb cBLACK +BackgroundTrans, B:
gui, colordial:font
Gui, colordial:Add, Edit, X+-10 W50 r1 LIMIT3 number r1 vS_BLUE hwndBLUE gedit_set,%B_v%
Gui, colordial:Add, UpDown, vU_blueDown Range0-255 gupdown_set, %B_v%
IC := Colors.MaxIndex()
Ip := pos.MaxIndex()
gui, colordial:add, button, xs+11 y+18 w80 h30 gcolor_ok_button, OK
gui, colordial:add, button, x+12 w80 h30 gcolor_cancel_button, Cancel
LinearGradient(HPI1C, Colorlist1, colorlist1pos, 2,1,200, 200)
LinearGradient(HPIC, Colorlist2, , 1,1)
Gui, colordial:Font, s14, Tahoma
Gui, colordial:Show, , AHK ColorPick
return
; -------------------------------------------------------------------------------------------------------
color_cancel_button:
gui, colordial:destroy
exitapp
return
; -------------------------------------------------------------------------------------------------------
color_ok_button:
gui, colordial:destroy
IniWrite, %color%, colors.ini, Color,color_selected
exitapp
return
; ------------------------------------------------------------------------------------------------------
copy:
clipboard = %color%
return
; ---------------------------------------------------------------------------------------------------------
copyold:
clipboard = %color_old%
return
; ------------------------------------------------------------------------------------------------------
colorver:
color_old := color
loop
{
MouseGetPos, ,,, OutputVarControl,3
if (OutputVarControl = HPIC)
{
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%, RGB
set_color_sel(color)
c := Hex2RGB(color)
r_v := rgb("1" ,color), g_v:=rgb("2",color) ,B_v:=rgb("3" ,color)
set_control_val(r_v, g_v, b_v)
GuiControl,+Background%color%,pC
GuiControl,+Background%color_old%,pC2
stringtrimleft,color, color, 2
color_main := color
color_view(color_main)
}
GetKeyState, OutputVar, lbutton
if outputvar = U
break
}
return
; ------------------------------------------------------------------------------------------------------
color_preset_set:
set_col := 1
return
; --------------------------------------------------------
color_preset:
if set_col = 1
{
var := A_GuiControl
stringtrimleft,var, var, 1
GuiControl,+Background%color%,v%var%
v%var% = %color%
set_col = 0
IniWrite, %color%, colors.ini, Color,v%var%
} else {
var := A_GuiControl
stringtrimleft,var, var, 1
color := v%var%
GuiControl,+Background%color%,pC
color_main := Hex2RGB(color)
r_v := rgb("1" ,color), g_v:=rgb("2",color) ,B_v:=rgb("3" ,color)
set_control_val(r_v, g_v, b_v)
color_view(color)
set_color_sel(color)
}
return
;-------------------------------------------------------------
colorpal:
color_old := color
loop
{
MouseGetPos, ,,, OutputVarControl,3
if (OutputVarControl = HPI1C)
{
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%, RGB
set_color_sel(color)
c := Hex2RGB(color)
r_v := rgb("1" ,color), g_v:=rgb("2",color) ,B_v:=rgb("3" ,color)
set_control_val(r_v, g_v, b_v)
stringtrimleft,color, color, 2
}
GetKeyState, OutputVar, lbutton
if outputvar = U
break
}
return
; ------------------------------------------------------------------------------------------------------
edit_set:
GuiControlGet,R_v,,s_red
GuiControlGet,G_v,,s_green
GuiControlGet,B_v,,s_blue
set_control_val(r_v, g_v, b_v)
rgb_c = %R_v%,%G_v%,%B_v%
hex_c := RGB2Hex(rgb_c)
set_color_sel("0x" hex_c)
return
updown_set:
GuiControlGet,R_v,,U_redDown
GuiControlGet,G_v,,U_greenDown
GuiControlGet,B_v,,U_blueDown
set_control_val(r_v, g_v, b_v)
rgb_c = %R_v%,%G_v%,%B_v%
hex_c := RGB2Hex(rgb_c)
color_view(hex_c)
set_color_sel("0x" hex_c)
return
}
set_color_sel(color){
global
IfInString, color, 0x
stringtrimleft,color, color, 2
GuiControl,+Background%color%,pC
GuiControl,+Background%color_old%,pC2
GuiControl,,rgbval,# %color%
GuiControl,,rgbvalold,# %color_old%
}
set_control_val(r_v, g_v, b_v){
GuiControl,,sr,%R_v%
GuiControl,,sg,%G_v%
GuiControl,,sb,%B_v%
GuiControl,,s_red,%R_v%
GuiControl,,s_green,%G_v%
GuiControl,,s_blue,%B_v%
GuiControl,,U_redDown,%R_v%
GuiControl,,U_greenDown,%G_v%
GuiControl,,U_blueDown,%B_v%
return
}
slidermove:
GuiControlGet,R_v,,sR
GuiControlGet,G_v,,sG
GuiControlGet,B_v,,sB
set_control_val(r_v, g_v, b_v)
rgb_c = %R_v%,%G_v%,%B_v%
hex_c := RGB2Hex(rgb_c)
color_main := hex_c
color_view(color_main)
GuiControl,+Background%hex_c%,pC
GuiControl,,s_red,%R_v%
GuiControl,,s_green,%G_v%
GuiControl,,s_blue,%B_v%
GuiControl,,U_redDown,%R_v%
GuiControl,,U_greenDown,%G_v%
GuiControl,,U_blueDown,%B_v%
return
color_view(color_main){
global
colorlist1.RemoveAt(2 , 2)
colorlist1.InsertAt(2 , "0xff" color_main, "0x00" color_main)
LinearGradient(HPI1C, Colorlist1, colorlist1pos, 2,1,200, 200)
return
}
Hex2RGB(CR) {
NumPut( "0x" SubStr(CR,-5), (V:="000000") )
return NumGet(V,2,"UChar") "," NumGet(V,1,"UChar") "," NumGet(V,0,"UChar")
}
RGB(vNum, sColor) {
vRGB := Hex2RGB(sColor)
StringSplit, aRGB, vRGB, `,
if (vNum = 1)
return aRGB1
else if (vNum = 2)
return aRGB2
else if (vNum = 3)
return aRGB3
}
RGB2Hex(s, d="") {
StringSplit, s, s, % d = "" ? "," : d
SetFormat, Integer, % (f := A_FormatInteger) = "D" ? "H" : f
h := s1 + 0 . s2 + 0 . s3 + 0
SetFormat, Integer, %f%
Return, RegExReplace(RegExReplace(h, "0x(.)(?=$|0x)", "0$1"), "0x")
}
;-------------- Code by JustMe
LinearGradient(HWND, oColors, oPositions = "", D = 0, GC = 0, BW = 0, BH = 0) {
Static SS_BITMAP := 0xE
Static SS_ICON := 0x3
Static STM_SETIMAGE := 0x172
Static IMAGE_BITMAP := 0x0
If !IsObject(oColors) || (oColors.MaxIndex() < 2) {
ErrorLevel := "Invalid parameter oColors!"
Return False
}
IC := oColors.MaxIndex()
If IsObject(oPositions) {
If (oPositions.MaxIndex() <> IC) {
ErrorLevel := "Invalid parameter oPositions!"
Return False
}
} Else {
oPositions := [0.0]
P := 1.0 / (IC - 1)
Loop, % (IC - 2)
oPositions.Insert(P * A_Index)
oPositions.Insert(1.0)
}
; -------------------------------------------------------------------------------------------------------------------
; Check HWND
WinGetClass, Class, ahk_id %HWND%
If (Class != "Static") {
ErrorLevel := "Class " . Class . " is not supported!"
Return False
}
If !DllCall("GetModuleHandle", "Str", "Gdiplus")
hGDIP := DllCall("LoadLibrary", "Str", "Gdiplus")
VarSetCapacity(SI, 16, 0)
Numput(1, SI, "UInt")
DllCall("Gdiplus.dll\GdiplusStartup", "PtrP", pToken, "Ptr", &SI, "Ptr", 0)
If (!pToken) {
ErrorLevel := "GDIPlus could not be started!`nCheck the availability of GDIPlus on your system, please!"
Return False
}
VarSetCapacity(RECT, 16, 0)
DllCall("User32.dll\GetClientRect", "Ptr", HWND, "Ptr", &RECT)
W := NumGet(RECT, 8, "Int")
H := NumGet(RECT, 12, "Int")
If D Not In 0,1,2,3
D := 0
If GC Not In 0,1
GC := 0
If BW Not Between 1 And W
BW := W
If BH Not Between 1 And H
BH := H
DllCall("Gdiplus.dll\GdipCreateBitmapFromScan0", "Int", W, "Int", H, "Int", 0
, "Int", 0x26200A, "Ptr", 0, "PtrP", pBitmap)
DllCall("Gdiplus.dll\GdipGetImageGraphicsContext", "Ptr", pBitmap, "PtrP", pGraphics)
VarSetCapacity(RECTF, 16, 0)
NumPut(BW, RECTF, 8, "Float")
NumPut(BH, RECTF, 12, "Float")
DllCall("Gdiplus.dll\GdipCreateLineBrushFromRect", "Ptr", &RECTF
, "Int", 0, "Int", 0, "Int", D, "Int", 0, "PtrP", pBrush)
DllCall("Gdiplus.dll\GdipSetLineGammaCorrection", "Ptr", pBrush, "Int", GC)
VarSetCapacity(COLORS, IC * 4, 0)
O := -4
For I, V In oColors
NumPut(V | 0x00000000, COLORS, O += 4, "UInt")
VarSetCapacity(POSITIONS, IC * 4, 0)
O := -4
For I, V In oPositions
NumPut(V, POSITIONS, O += 4, "Float")
DllCall("Gdiplus.dll\GdipSetLinePresetBlend", "Ptr", pBrush, "Ptr", &COLORS, "Ptr", &POSITIONS, "Int", IC)
VarSetCapacity(ColourMatrix, 100, 0)
Matrix := 1.5|0|0|0|0|0|1.5|0|0|0|0|0|1.5|0|0|0|0|0|1|0|0.05|0.05|0.05|0|1
StringSplit, Matrix, Matrix, |
Loop, 25
{
Matrix := (Matrix%A_Index% != "") ? Matrix%A_Index% : Mod(A_Index-1, 6) ? 0 : 1
NumPut(Matrix, ColourMatrix, (A_Index-1)*4, "float")
}
DllCall("gdiplus\GdipCreateImageAttributes", "ptr*", ImageAttr)
DllCall("gdiplus\GdipSetImageAttributesColorMatrix", "ptr", ImageAttr, "int", 1, "int", 1, "ptr", &ColourMatrix, "ptr", 0, "int", 0)
DllCall("Gdiplus.dll\GdipFillRectangle", "Ptr", pGraphics, "Ptr", pBrush
, "Float", 0, "Float", 0, "Float", W, "Float", H)
; -------------------------------------------------------------------------------------------------------------------
; Create HBITMAP from bitmap
DllCall("Gdiplus.dll\GdipCreateHBITMAPFromBitmap", "Ptr", pBitmap, "PtrP", hBitmap, "Int", 0X00FFFFFF)
; -------------------------------------------------------------------------------------------------------------------
; Free resources
DllCall("gdiplus\GdipSetSmoothingMode", "uint", pGraphics, "int", 4)
DllCall("gdiplus\GdipCreatePen1", "int", 0xffff0000, "float", 3, "int", 2, "uint*", pPen)
; Create HBITMAP from bitmap
DllCall("gdiplus\GdipDrawEllipse", "uint", pGraphics, "uint", pPen, "float", 0, "float", 80, "float", 80, "float", 60)
DllCall("Gdiplus.dll\GdipDisposeImage", "Ptr", pBitmap)
DllCall("Gdiplus.dll\GdipDeleteBrush", "Ptr", pBrush)
DllCall("Gdiplus.dll\GdipDeleteGraphics", "Ptr", pGraphics)
; Shutdown GDI+
DllCall("Gdiplus.dll\GdiplusShutdown", "Ptr", pToken)
If (hGDIP)
DllCall("FreeLibrary", "Ptr", hGDIP)
; -------------------------------------------------------------------------------------------------------------------
; Set control styles
Control, Style, -%SS_ICON%, , ahk_id %HWND%
Control, Style, +%SS_BITMAP%, , ahk_id %HWND%
; Assign the bitmap
SendMessage, STM_SETIMAGE, IMAGE_BITMAP, hBitmap, , ahk_id %HWND%
; Done!
DllCall("Gdi32.dll\DeleteObject", "Ptr", hBitmap)
Return True
}
versioninfo = ( ======================================================================== Description ...: A Custom ColorDialog Usage..........: Run from your script and selected color is saved to colors.ini as RGB .................: runwait, colordialog.ahk ; run script, return when exited ..................: IniRead, color, colors.ini, Color, color_selected,0x00000 ; load color from dialog into %color% Version .......: 1.0 Modified ......: 2017.07.06 Author ........: Peared AHK-Version....: 1.1.26.00 U32 OS-Versions....: Win 10 64 ======================================================================== Copyright (C) 2014-2016 This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. It would never been anything other than an idea without all help ihave 4 found in Autohotkey.com forum, so thank you all for sharing. ) ; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=34092 #NoEnv color_dialog_tool() color_dialog_tool(){ global colorlist2:=[0xffff0000,0xffff6600,0xffffcc00,0xffccff00,0xff66ff00,0xff00ff00,0xff00ff66,0xff00ffcc,0xff00ccff,0xff0066ff,0xff0000ff,0xff6600ff,0xffcc00ff,0xffff00cc,0xffff0066,0xffff0004] colorlist1:=[0xff000000,0xffff0000,0xffffffff] colorlist1pos := [0.0,0.3,1.0] c1:=0 gui colordial:+alwaysontop +lastfound Gui, colordial:Margin, 5, 5 Gui, colordial:color, white Gui, colordial:FONT, BLACK loop 8 { IniRead, v%c1%, colors.ini, Color, v%c1%,0x000000 tmpcol := v%c1% Gui, colordial:Add, text,+E0x20 0x200 w20 h20 BackgroundTrans v1%c1% gcolor_preset, Gui, colordial:Add, Progress, x+-20 y+-20 w20 h20 Background%tmpcol% vv%c1% c1++ GuiControl,+Background%tmpcol%,v%c1% } loop 4 { IniRead, v%c1%, colors.ini, Color, v%c1%,0x000000 tmpcol := v%c1% Gui, colordial:Add, text,+E0x20 0x200 x+5 y5 w20 h20 BackgroundTrans v1%c1% gcolor_preset, Gui, colordial:Add, Progress, x+-20 y+-20 w20 h20 Background%tmpcol% vv%c1% c1++ GuiControl,+Background%tmpcol%,v%c1% loop 7 { IniRead, v%c1%, colors.ini, Color, v%c1%,0x000000 tmpcol := v%c1% Gui, colordial:Add, text,y+5 +E0x20 0x200 w20 h20 BackgroundTrans v2%c1% gcolor_preset, Gui, colordial:Add, progress, x+-20 y+-20 w20 h20 Background%tmpcol% vv%c1% GuiControl,+Background%tmpcol%,v%c1% c1++ } } gui, colordial:font, s10 w700, Gui, colordial:Add, Pic, x+5 y5 w200 h200 gcolorpal hwndHPI1C Gui, colordial:Add, Pic, x+5 w15 h200 gcolorver hwndHPIC Gui, colordial:Add, text, x+5 y5 +E0x20 0x200 w60 h30 section BackgroundTrans gcolor_preset_set, Gui, colordial:Add, Progress, x+-60 y+-30 w60 h30 Background%RGB_v% vpC Gui, colordial:Add, text, x+5 +E0x20 0x200 w70 h30 BackgroundTrans vrgbval, # %color_main% gui, colordial:add, button, x+5 w50 h30 gcopy, Copy Gui, colordial:Add, text,xs y+0 +E0x20 0x200 w60 h30 BackgroundTrans gcolor_preset_set, Gui, colordial:Add, Progress, x+-60 y+-30 w60 h30 Background%RGB_v2% vpC2 Gui, colordial:Add, text, x+5 +E0x20 0x200 w70 h30 BackgroundTrans vrgbvalold, # %color_old% gui, colordial:add, button, x+5 w50 h30 gcopyold, Copy Gui, colordial:Add, Slider,xs y+10 w120 h20 AltSubmit +NoTicks +Range0-255 vsR gSlidermove line1, %R_v% Gui, colordial:Add, Text, x+5 w28 h28 +Border vtr cBLACK +BackgroundTrans, R: gui, colordial:font Gui, colordial:Add, Edit, X+-10 W50 r1 LIMIT3 number vS_Red hwndRED gedit_set,%R_v% Gui, colordial:Add, UpDown, vU_redDown Range0-255 gupdown_set, %R_v% Gui, colordial:Add, Slider, xs y+7 w120 h20 AltSubmit +NoTicks +Range0-255 vsG gSlidermove line1, %G_v% gui, colordial:font, s10 w700, Gui, colordial:Add, Text,x+5 w28 h28 +Border vtg cBLACK +BackgroundTrans, G: gui, colordial:font Gui, colordial:Add, Edit, X+-10 W50 r1 LIMIT3 number r1 vS_GREEN hwndGREEN gedit_set,%G_v% Gui, colordial:Add, UpDown, vU_greenDown Range0-255 gupdown_set, %G_v% Gui, colordial:Add, Slider, xs y+8 w120 h20 AltSubmit +NoTicks +Range0-255 vsB gSlidermove line1, %B_v% gui, colordial:font, s10 w700, Gui, colordial:Add, Text, x+5 w28 h28 +Border vtb cBLACK +BackgroundTrans, B: gui, colordial:font Gui, colordial:Add, Edit, X+-10 W50 r1 LIMIT3 number r1 vS_BLUE hwndBLUE gedit_set,%B_v% Gui, colordial:Add, UpDown, vU_blueDown Range0-255 gupdown_set, %B_v% IC := Colors.MaxIndex() Ip := pos.MaxIndex() gui, colordial:add, button, xs+11 y+18 w80 h30 gcolor_ok_button, OK gui, colordial:add, button, x+12 w80 h30 gcolor_cancel_button, Cancel LinearGradient(HPI1C, Colorlist1, colorlist1pos, 2,1,200, 200) LinearGradient(HPIC, Colorlist2, , 1,1) Gui, colordial:Font, s14, Tahoma Gui, colordial:Show, , AHK ColorPick return ; ------------------------------------------------------------------------------------------------------- color_cancel_button: gui, colordial:destroy exitapp return ; ------------------------------------------------------------------------------------------------------- color_ok_button: gui, colordial:destroy IniWrite, %color%, colors.ini, Color,color_selected exitapp return ; ------------------------------------------------------------------------------------------------------ copy: clipboard = %color% return ; --------------------------------------------------------------------------------------------------------- copyold: clipboard = %color_old% return ; ------------------------------------------------------------------------------------------------------ colorver: color_old := color loop { MouseGetPos, ,,, OutputVarControl,3 if (OutputVarControl = HPIC) { MouseGetPos, MouseX, MouseY PixelGetColor, color, %MouseX%, %MouseY%, RGB set_color_sel(color) c := Hex2RGB(color) r_v := rgb("1" ,color), g_v:=rgb("2",color) ,B_v:=rgb("3" ,color) set_control_val(r_v, g_v, b_v) GuiControl,+Background%color%,pC GuiControl,+Background%color_old%,pC2 stringtrimleft,color, color, 2 color_main := color color_view(color_main) } GetKeyState, OutputVar, lbutton if outputvar = U break } return ; ------------------------------------------------------------------------------------------------------ color_preset_set: set_col := 1 return ; -------------------------------------------------------- color_preset: if set_col = 1 { var := A_GuiControl stringtrimleft,var, var, 1 GuiControl,+Background%color%,v%var% v%var% = %color% set_col = 0 IniWrite, %color%, colors.ini, Color,v%var% } else { var := A_GuiControl stringtrimleft,var, var, 1 color := v%var% GuiControl,+Background%color%,pC color_main := Hex2RGB(color) r_v := rgb("1" ,color), g_v:=rgb("2",color) ,B_v:=rgb("3" ,color) set_control_val(r_v, g_v, b_v) color_view(color) set_color_sel(color) } return ;------------------------------------------------------------- colorpal: color_old := color loop { MouseGetPos, ,,, OutputVarControl,3 if (OutputVarControl = HPI1C) { MouseGetPos, MouseX, MouseY PixelGetColor, color, %MouseX%, %MouseY%, RGB set_color_sel(color) c := Hex2RGB(color) r_v := rgb("1" ,color), g_v:=rgb("2",color) ,B_v:=rgb("3" ,color) set_control_val(r_v, g_v, b_v) stringtrimleft,color, color, 2 } GetKeyState, OutputVar, lbutton if outputvar = U break } return ; ------------------------------------------------------------------------------------------------------ edit_set: GuiControlGet,R_v,,s_red GuiControlGet,G_v,,s_green GuiControlGet,B_v,,s_blue set_control_val(r_v, g_v, b_v) rgb_c = %R_v%,%G_v%,%B_v% hex_c := RGB2Hex(rgb_c) set_color_sel("0x" hex_c) return updown_set: GuiControlGet,R_v,,U_redDown GuiControlGet,G_v,,U_greenDown GuiControlGet,B_v,,U_blueDown set_control_val(r_v, g_v, b_v) rgb_c = %R_v%,%G_v%,%B_v% hex_c := RGB2Hex(rgb_c) color_view(hex_c) set_color_sel("0x" hex_c) return } set_color_sel(color){ global IfInString, color, 0x stringtrimleft,color, color, 2 GuiControl,+Background%color%,pC GuiControl,+Background%color_old%,pC2 GuiControl,,rgbval,# %color% GuiControl,,rgbvalold,# %color_old% } set_control_val(r_v, g_v, b_v){ GuiControl,,sr,%R_v% GuiControl,,sg,%G_v% GuiControl,,sb,%B_v% GuiControl,,s_red,%R_v% GuiControl,,s_green,%G_v% GuiControl,,s_blue,%B_v% GuiControl,,U_redDown,%R_v% GuiControl,,U_greenDown,%G_v% GuiControl,,U_blueDown,%B_v% return } slidermove: GuiControlGet,R_v,,sR GuiControlGet,G_v,,sG GuiControlGet,B_v,,sB set_control_val(r_v, g_v, b_v) rgb_c = %R_v%,%G_v%,%B_v% hex_c := RGB2Hex(rgb_c) color_main := hex_c color_view(color_main) GuiControl,+Background%hex_c%,pC GuiControl,,s_red,%R_v% GuiControl,,s_green,%G_v% GuiControl,,s_blue,%B_v% GuiControl,,U_redDown,%R_v% GuiControl,,U_greenDown,%G_v% GuiControl,,U_blueDown,%B_v% return color_view(color_main){ global colorlist1.RemoveAt(2 , 2) colorlist1.InsertAt(2 , "0xff" color_main, "0x00" color_main) LinearGradient(HPI1C, Colorlist1, colorlist1pos, 2,1,200, 200) return } Hex2RGB(CR) { NumPut( "0x" SubStr(CR,-5), (V:="000000") ) return NumGet(V,2,"UChar") "," NumGet(V,1,"UChar") "," NumGet(V,0,"UChar") } RGB(vNum, sColor) { vRGB := Hex2RGB(sColor) StringSplit, aRGB, vRGB, `, if (vNum = 1) return aRGB1 else if (vNum = 2) return aRGB2 else if (vNum = 3) return aRGB3 } RGB2Hex(s, d="") { StringSplit, s, s, % d = "" ? "," : d SetFormat, Integer, % (f := A_FormatInteger) = "D" ? "H" : f h := s1 + 0 . s2 + 0 . s3 + 0 SetFormat, Integer, %f% Return, RegExReplace(RegExReplace(h, "0x(.)(?=$|0x)", "0$1"), "0x") } ;-------------- Code by JustMe LinearGradient(HWND, oColors, oPositions = "", D = 0, GC = 0, BW = 0, BH = 0) { Static SS_BITMAP := 0xE Static SS_ICON := 0x3 Static STM_SETIMAGE := 0x172 Static IMAGE_BITMAP := 0x0 If !IsObject(oColors) || (oColors.MaxIndex() < 2) { ErrorLevel := "Invalid parameter oColors!" Return False } IC := oColors.MaxIndex() If IsObject(oPositions) { If (oPositions.MaxIndex() <> IC) { ErrorLevel := "Invalid parameter oPositions!" Return False } } Else { oPositions := [0.0] P := 1.0 / (IC - 1) Loop, % (IC - 2) oPositions.Insert(P * A_Index) oPositions.Insert(1.0) } ; ------------------------------------------------------------------------------------------------------------------- ; Check HWND WinGetClass, Class, ahk_id %HWND% If (Class != "Static") { ErrorLevel := "Class " . Class . " is not supported!" Return False } If !DllCall("GetModuleHandle", "Str", "Gdiplus") hGDIP := DllCall("LoadLibrary", "Str", "Gdiplus") VarSetCapacity(SI, 16, 0) Numput(1, SI, "UInt") DllCall("Gdiplus.dll\GdiplusStartup", "PtrP", pToken, "Ptr", &SI, "Ptr", 0) If (!pToken) { ErrorLevel := "GDIPlus could not be started!`nCheck the availability of GDIPlus on your system, please!" Return False } VarSetCapacity(RECT, 16, 0) DllCall("User32.dll\GetClientRect", "Ptr", HWND, "Ptr", &RECT) W := NumGet(RECT, 8, "Int") H := NumGet(RECT, 12, "Int") If D Not In 0,1,2,3 D := 0 If GC Not In 0,1 GC := 0 If BW Not Between 1 And W BW := W If BH Not Between 1 And H BH := H DllCall("Gdiplus.dll\GdipCreateBitmapFromScan0", "Int", W, "Int", H, "Int", 0 , "Int", 0x26200A, "Ptr", 0, "PtrP", pBitmap) DllCall("Gdiplus.dll\GdipGetImageGraphicsContext", "Ptr", pBitmap, "PtrP", pGraphics) VarSetCapacity(RECTF, 16, 0) NumPut(BW, RECTF, 8, "Float") NumPut(BH, RECTF, 12, "Float") DllCall("Gdiplus.dll\GdipCreateLineBrushFromRect", "Ptr", &RECTF , "Int", 0, "Int", 0, "Int", D, "Int", 0, "PtrP", pBrush) DllCall("Gdiplus.dll\GdipSetLineGammaCorrection", "Ptr", pBrush, "Int", GC) VarSetCapacity(COLORS, IC * 4, 0) O := -4 For I, V In oColors NumPut(V | 0x00000000, COLORS, O += 4, "UInt") VarSetCapacity(POSITIONS, IC * 4, 0) O := -4 For I, V In oPositions NumPut(V, POSITIONS, O += 4, "Float") DllCall("Gdiplus.dll\GdipSetLinePresetBlend", "Ptr", pBrush, "Ptr", &COLORS, "Ptr", &POSITIONS, "Int", IC) VarSetCapacity(ColourMatrix, 100, 0) Matrix := 1.5|0|0|0|0|0|1.5|0|0|0|0|0|1.5|0|0|0|0|0|1|0|0.05|0.05|0.05|0|1 StringSplit, Matrix, Matrix, | Loop, 25 { Matrix := (Matrix%A_Index% != "") ? Matrix%A_Index% : Mod(A_Index-1, 6) ? 0 : 1 NumPut(Matrix, ColourMatrix, (A_Index-1)*4, "float") } DllCall("gdiplus\GdipCreateImageAttributes", "ptr*", ImageAttr) DllCall("gdiplus\GdipSetImageAttributesColorMatrix", "ptr", ImageAttr, "int", 1, "int", 1, "ptr", &ColourMatrix, "ptr", 0, "int", 0) DllCall("Gdiplus.dll\GdipFillRectangle", "Ptr", pGraphics, "Ptr", pBrush , "Float", 0, "Float", 0, "Float", W, "Float", H) ; ------------------------------------------------------------------------------------------------------------------- ; Create HBITMAP from bitmap DllCall("Gdiplus.dll\GdipCreateHBITMAPFromBitmap", "Ptr", pBitmap, "PtrP", hBitmap, "Int", 0X00FFFFFF) ; ------------------------------------------------------------------------------------------------------------------- ; Free resources DllCall("gdiplus\GdipSetSmoothingMode", "uint", pGraphics, "int", 4) DllCall("gdiplus\GdipCreatePen1", "int", 0xffff0000, "float", 3, "int", 2, "uint*", pPen) ; Create HBITMAP from bitmap DllCall("gdiplus\GdipDrawEllipse", "uint", pGraphics, "uint", pPen, "float", 0, "float", 80, "float", 80, "float", 60) DllCall("Gdiplus.dll\GdipDisposeImage", "Ptr", pBitmap) DllCall("Gdiplus.dll\GdipDeleteBrush", "Ptr", pBrush) DllCall("Gdiplus.dll\GdipDeleteGraphics", "Ptr", pGraphics) ; Shutdown GDI+ DllCall("Gdiplus.dll\GdiplusShutdown", "Ptr", pToken) If (hGDIP) DllCall("FreeLibrary", "Ptr", hGDIP) ; ------------------------------------------------------------------------------------------------------------------- ; Set control styles Control, Style, -%SS_ICON%, , ahk_id %HWND% Control, Style, +%SS_BITMAP%, , ahk_id %HWND% ; Assign the bitmap SendMessage, STM_SETIMAGE, IMAGE_BITMAP, hBitmap, , ahk_id %HWND% ; Done! DllCall("Gdi32.dll\DeleteObject", "Ptr", hBitmap) Return True }
versioninfo =
(
========================================================================
 Description ...: A Custom ColorDialog 
 Usage..........: Run from your script and selected color is saved to colors.ini as RGB   
 .................: runwait, colordialog.ahk  ; run script, return when exited
..................:	IniRead, color, colors.ini, Color, color_selected,0x00000 ; load color from dialog into %color%
 Version .......: 1.0
 Modified ......: 2017.07.06
 Author ........: Peared
 AHK-Version....: 1.1.26.00 U32
 OS-Versions....: Win 10 64
========================================================================
Copyright (C) 2014-2016  

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
It would never been anything other than an idea without all help ihave 4
found in Autohotkey.com forum, so thank you all for sharing.
)
; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=34092
#NoEnv
color_dialog_tool()
color_dialog_tool(){
global
colorlist2:=[0xffff0000,0xffff6600,0xffffcc00,0xffccff00,0xff66ff00,0xff00ff00,0xff00ff66,0xff00ffcc,0xff00ccff,0xff0066ff,0xff0000ff,0xff6600ff,0xffcc00ff,0xffff00cc,0xffff0066,0xffff0004]
colorlist1:=[0xff000000,0xffff0000,0xffffffff]
colorlist1pos := [0.0,0.3,1.0]
c1:=0
gui colordial:+alwaysontop +lastfound
Gui, colordial:Margin, 5, 5
Gui, colordial:color, white
Gui, colordial:FONT, BLACK
loop 8
{
IniRead, v%c1%, colors.ini, Color, v%c1%,0x000000
tmpcol := v%c1%
Gui, colordial:Add, text,+E0x20 0x200 w20 h20 BackgroundTrans v1%c1% gcolor_preset, 
Gui, colordial:Add, Progress, x+-20 y+-20 w20 h20 Background%tmpcol% vv%c1% 
c1++
GuiControl,+Background%tmpcol%,v%c1%
}
loop 4
{
IniRead, v%c1%, colors.ini, Color, v%c1%,0x000000
tmpcol := v%c1%
Gui, colordial:Add, text,+E0x20 0x200 x+5 y5 w20 h20 BackgroundTrans v1%c1% gcolor_preset, 
Gui, colordial:Add, Progress, x+-20 y+-20 w20 h20 Background%tmpcol% vv%c1% 

c1++
GuiControl,+Background%tmpcol%,v%c1%
loop 7
{
IniRead, v%c1%, colors.ini, Color, v%c1%,0x000000
tmpcol := v%c1%
Gui, colordial:Add, text,y+5 +E0x20 0x200 w20 h20 BackgroundTrans v2%c1% gcolor_preset, 
Gui, colordial:Add, progress, x+-20 y+-20 w20 h20 Background%tmpcol% vv%c1%
GuiControl,+Background%tmpcol%,v%c1%
c1++
}
}
gui, colordial:font, s10 w700, 
Gui, colordial:Add, Pic, x+5 y5 w200 h200 gcolorpal hwndHPI1C
Gui, colordial:Add, Pic, x+5 w15 h200 gcolorver hwndHPIC 
Gui, colordial:Add, text, x+5 y5 +E0x20 0x200 w60 h30 section BackgroundTrans gcolor_preset_set, 
Gui, colordial:Add, Progress, x+-60 y+-30 w60 h30 Background%RGB_v% vpC
Gui, colordial:Add, text, x+5 +E0x20 0x200 w70 h30 BackgroundTrans vrgbval, # %color_main%
gui, colordial:add, button, x+5 w50 h30 gcopy, Copy
Gui, colordial:Add, text,xs y+0 +E0x20 0x200 w60 h30 BackgroundTrans gcolor_preset_set, 
Gui, colordial:Add, Progress, x+-60 y+-30 w60 h30 Background%RGB_v2% vpC2
Gui, colordial:Add, text, x+5 +E0x20 0x200 w70 h30 BackgroundTrans vrgbvalold, # %color_old%
gui, colordial:add, button, x+5 w50 h30 gcopyold, Copy
Gui, colordial:Add, Slider,xs y+10 w120 h20 AltSubmit +NoTicks +Range0-255 vsR gSlidermove line1, %R_v%
Gui, colordial:Add, Text, x+5 w28 h28 +Border vtr cBLACK +BackgroundTrans, R: 
gui, colordial:font
Gui, colordial:Add, Edit, X+-10 W50 r1 LIMIT3 number vS_Red hwndRED gedit_set,%R_v%
Gui, colordial:Add, UpDown, vU_redDown Range0-255 gupdown_set, %R_v%

Gui, colordial:Add, Slider, xs y+7 w120 h20 AltSubmit +NoTicks +Range0-255 vsG gSlidermove line1, %G_v%
gui, colordial:font, s10 w700,
Gui, colordial:Add, Text,x+5 w28 h28 +Border vtg cBLACK +BackgroundTrans, G:
gui, colordial:font
Gui, colordial:Add, Edit, X+-10 W50 r1 LIMIT3 number r1 vS_GREEN hwndGREEN gedit_set,%G_v% 
Gui, colordial:Add, UpDown, vU_greenDown Range0-255 gupdown_set, %G_v%
Gui, colordial:Add, Slider, xs y+8 w120 h20 AltSubmit +NoTicks +Range0-255 vsB gSlidermove line1, %B_v%
gui, colordial:font, s10 w700,
Gui, colordial:Add, Text, x+5 w28 h28 +Border vtb cBLACK +BackgroundTrans, B:
gui, colordial:font
Gui, colordial:Add, Edit, X+-10 W50 r1 LIMIT3 number r1 vS_BLUE hwndBLUE gedit_set,%B_v%
Gui, colordial:Add, UpDown, vU_blueDown Range0-255 gupdown_set, %B_v%
IC := Colors.MaxIndex()
Ip := pos.MaxIndex()
gui, colordial:add, button, xs+11 y+18 w80 h30 gcolor_ok_button, OK
gui, colordial:add, button, x+12 w80 h30 gcolor_cancel_button, Cancel
LinearGradient(HPI1C, Colorlist1, colorlist1pos, 2,1,200, 200)
LinearGradient(HPIC, Colorlist2, , 1,1)
Gui, colordial:Font, s14, Tahoma
Gui, colordial:Show, , AHK ColorPick
return

; -------------------------------------------------------------------------------------------------------
color_cancel_button:
gui, colordial:destroy
exitapp
return 
; -------------------------------------------------------------------------------------------------------
color_ok_button:
gui, colordial:destroy
IniWrite, %color%, colors.ini, Color,color_selected
exitapp
return 
; ------------------------------------------------------------------------------------------------------
copy:
clipboard = %color%   
return
; ---------------------------------------------------------------------------------------------------------
copyold:
clipboard = %color_old%  
return
; ------------------------------------------------------------------------------------------------------
colorver:
color_old := color
loop
{
MouseGetPos, ,,, OutputVarControl,3
if (OutputVarControl = HPIC)
{
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%, RGB
set_color_sel(color)
c := Hex2RGB(color)
r_v := rgb("1" ,color), g_v:=rgb("2",color) ,B_v:=rgb("3" ,color) 
set_control_val(r_v, g_v, b_v)	
GuiControl,+Background%color%,pC
GuiControl,+Background%color_old%,pC2
stringtrimleft,color, color, 2
color_main := color
color_view(color_main)
  }
GetKeyState, OutputVar, lbutton 
if outputvar = U
break
}
return
; ------------------------------------------------------------------------------------------------------
color_preset_set:
set_col := 1
return
; --------------------------------------------------------
color_preset:
 
if set_col = 1 
{
var := A_GuiControl
stringtrimleft,var, var, 1
GuiControl,+Background%color%,v%var%
v%var% = %color%
set_col = 0
    IniWrite, %color%, colors.ini, Color,v%var%
} else {
var := A_GuiControl
stringtrimleft,var, var, 1
color := v%var%
GuiControl,+Background%color%,pC
color_main := Hex2RGB(color)
r_v := rgb("1" ,color), g_v:=rgb("2",color) ,B_v:=rgb("3" ,color) 
set_control_val(r_v, g_v, b_v)
color_view(color)
set_color_sel(color)
  }
  
return
;-------------------------------------------------------------

colorpal:

color_old := color
loop
{
MouseGetPos, ,,, OutputVarControl,3
if (OutputVarControl = HPI1C)
{
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%, RGB
set_color_sel(color)
c := Hex2RGB(color)
r_v := rgb("1" ,color), g_v:=rgb("2",color) ,B_v:=rgb("3" ,color) 
set_control_val(r_v, g_v, b_v)
stringtrimleft,color, color, 2
}
GetKeyState, OutputVar, lbutton 
if outputvar = U
break
}

  return

; ------------------------------------------------------------------------------------------------------
edit_set:
GuiControlGet,R_v,,s_red
  GuiControlGet,G_v,,s_green
  GuiControlGet,B_v,,s_blue
set_control_val(r_v, g_v, b_v)
rgb_c = %R_v%,%G_v%,%B_v%
  hex_c := RGB2Hex(rgb_c)
  set_color_sel("0x" hex_c)
return
updown_set:
GuiControlGet,R_v,,U_redDown
  GuiControlGet,G_v,,U_greenDown
  GuiControlGet,B_v,,U_blueDown
set_control_val(r_v, g_v, b_v)
rgb_c = %R_v%,%G_v%,%B_v%
  hex_c := RGB2Hex(rgb_c)
  color_view(hex_c)
set_color_sel("0x" hex_c)
return
}

set_color_sel(color){
global
IfInString, color, 0x
stringtrimleft,color, color, 2
GuiControl,+Background%color%,pC
GuiControl,+Background%color_old%,pC2
GuiControl,,rgbval,# %color%
GuiControl,,rgbvalold,# %color_old%
}

set_control_val(r_v, g_v, b_v){
GuiControl,,sr,%R_v%
  GuiControl,,sg,%G_v%
  GuiControl,,sb,%B_v%
  GuiControl,,s_red,%R_v%
  GuiControl,,s_green,%G_v%
  GuiControl,,s_blue,%B_v%
  GuiControl,,U_redDown,%R_v%
  GuiControl,,U_greenDown,%G_v%
  GuiControl,,U_blueDown,%B_v%
  return
}


slidermove:
  GuiControlGet,R_v,,sR
  GuiControlGet,G_v,,sG
  GuiControlGet,B_v,,sB
  set_control_val(r_v, g_v, b_v)
  rgb_c = %R_v%,%G_v%,%B_v%
  hex_c := RGB2Hex(rgb_c)
  color_main := hex_c
color_view(color_main)
  GuiControl,+Background%hex_c%,pC
  GuiControl,,s_red,%R_v%
  GuiControl,,s_green,%G_v%
  GuiControl,,s_blue,%B_v%
  GuiControl,,U_redDown,%R_v%
  GuiControl,,U_greenDown,%G_v%
  GuiControl,,U_blueDown,%B_v%
return

color_view(color_main){
global
colorlist1.RemoveAt(2 , 2)
colorlist1.InsertAt(2 , "0xff" color_main, "0x00" color_main)
LinearGradient(HPI1C, Colorlist1, colorlist1pos, 2,1,200, 200)
return
}

Hex2RGB(CR) {
 	NumPut( "0x" SubStr(CR,-5), (V:="000000") )
  return NumGet(V,2,"UChar") "," NumGet(V,1,"UChar") "," NumGet(V,0,"UChar")
}
RGB(vNum, sColor) {
  vRGB := Hex2RGB(sColor)
  StringSplit, aRGB, vRGB, `,
  if (vNum = 1)
    return aRGB1
  else if (vNum = 2)
    return aRGB2
  else if (vNum = 3)
    return aRGB3
}
RGB2Hex(s, d="") {
   StringSplit, s, s, % d = "" ? "," : d
   SetFormat, Integer, % (f := A_FormatInteger) = "D" ? "H" : f
   h := s1 + 0 . s2 + 0 . s3 + 0
   SetFormat, Integer, %f%
   Return, RegExReplace(RegExReplace(h, "0x(.)(?=$|0x)", "0$1"), "0x")
}
;-------------- Code by JustMe
LinearGradient(HWND, oColors, oPositions = "", D = 0, GC = 0, BW = 0, BH = 0) {
  
  Static SS_BITMAP    := 0xE
  Static SS_ICON      := 0x3
  Static STM_SETIMAGE := 0x172
  Static IMAGE_BITMAP := 0x0
  
  If !IsObject(oColors) || (oColors.MaxIndex() < 2) {
    ErrorLevel := "Invalid parameter oColors!"
    Return False
  }
  IC := oColors.MaxIndex()
  If IsObject(oPositions) {
    If (oPositions.MaxIndex() <> IC) {
      ErrorLevel := "Invalid parameter oPositions!"
      Return False
    }
  } Else {
    oPositions := [0.0]
    P := 1.0 / (IC - 1)
    Loop, % (IC - 2)
      oPositions.Insert(P * A_Index)
    oPositions.Insert(1.0)
  }
  ; -------------------------------------------------------------------------------------------------------------------
  ; Check HWND
  WinGetClass, Class, ahk_id %HWND%
  If (Class != "Static") {
    ErrorLevel := "Class " . Class . " is not supported!"
    Return False
  }
  If !DllCall("GetModuleHandle", "Str", "Gdiplus")
    hGDIP := DllCall("LoadLibrary", "Str", "Gdiplus")
  VarSetCapacity(SI, 16, 0)
  Numput(1, SI, "UInt")
  DllCall("Gdiplus.dll\GdiplusStartup", "PtrP", pToken, "Ptr", &SI, "Ptr", 0)
  If (!pToken) {
    ErrorLevel := "GDIPlus could not be started!`nCheck the availability of GDIPlus on your system, please!"
    Return False
  }
VarSetCapacity(RECT, 16, 0)
  DllCall("User32.dll\GetClientRect", "Ptr", HWND, "Ptr", &RECT)
  W := NumGet(RECT, 8, "Int")
  H := NumGet(RECT, 12, "Int")
If D Not In 0,1,2,3
    D := 0
  If GC Not In 0,1
    GC := 0
  If BW Not Between 1 And W
    BW := W
  If BH Not Between 1 And H
    BH := H
DllCall("Gdiplus.dll\GdipCreateBitmapFromScan0", "Int", W, "Int", H, "Int", 0
         , "Int", 0x26200A, "Ptr", 0, "PtrP", pBitmap)
DllCall("Gdiplus.dll\GdipGetImageGraphicsContext", "Ptr", pBitmap, "PtrP", pGraphics)
VarSetCapacity(RECTF, 16, 0)
  NumPut(BW, RECTF,  8, "Float")
  NumPut(BH, RECTF, 12, "Float")
DllCall("Gdiplus.dll\GdipCreateLineBrushFromRect", "Ptr", &RECTF
         , "Int", 0, "Int", 0, "Int", D, "Int", 0, "PtrP", pBrush)
DllCall("Gdiplus.dll\GdipSetLineGammaCorrection", "Ptr", pBrush, "Int", GC)
  VarSetCapacity(COLORS, IC * 4, 0)
  O := -4
  For I, V In oColors 
    NumPut(V | 0x00000000, COLORS, O += 4, "UInt")
VarSetCapacity(POSITIONS, IC * 4, 0)
  O := -4
  For I, V In oPositions
    NumPut(V, POSITIONS, O += 4, "Float")
  DllCall("Gdiplus.dll\GdipSetLinePresetBlend", "Ptr", pBrush, "Ptr", &COLORS, "Ptr", &POSITIONS, "Int", IC)
VarSetCapacity(ColourMatrix, 100, 0)
  Matrix := 1.5|0|0|0|0|0|1.5|0|0|0|0|0|1.5|0|0|0|0|0|1|0|0.05|0.05|0.05|0|1
  
  
  StringSplit, Matrix, Matrix, |
  Loop, 25
  {
    Matrix := (Matrix%A_Index% != "") ? Matrix%A_Index% : Mod(A_Index-1, 6) ? 0 : 1
    NumPut(Matrix, ColourMatrix, (A_Index-1)*4, "float")
  }
  DllCall("gdiplus\GdipCreateImageAttributes", "ptr*", ImageAttr)
  DllCall("gdiplus\GdipSetImageAttributesColorMatrix", "ptr", ImageAttr, "int", 1, "int", 1, "ptr", &ColourMatrix, "ptr", 0, "int", 0)
DllCall("Gdiplus.dll\GdipFillRectangle", "Ptr", pGraphics, "Ptr", pBrush
         , "Float", 0, "Float", 0, "Float", W, "Float", H)
  ; -------------------------------------------------------------------------------------------------------------------
  ; Create HBITMAP from bitmap
  DllCall("Gdiplus.dll\GdipCreateHBITMAPFromBitmap", "Ptr", pBitmap, "PtrP", hBitmap, "Int", 0X00FFFFFF)
  ; -------------------------------------------------------------------------------------------------------------------
  ; Free resources
  DllCall("gdiplus\GdipSetSmoothingMode", "uint", pGraphics, "int", 4)
DllCall("gdiplus\GdipCreatePen1", "int", 0xffff0000, "float", 3, "int", 2, "uint*", pPen)
  ; Create HBITMAP from bitmap
  

DllCall("gdiplus\GdipDrawEllipse", "uint", pGraphics, "uint", pPen, "float", 0, "float", 80, "float", 80, "float", 60)
  
  DllCall("Gdiplus.dll\GdipDisposeImage", "Ptr", pBitmap)
  DllCall("Gdiplus.dll\GdipDeleteBrush", "Ptr", pBrush)
  DllCall("Gdiplus.dll\GdipDeleteGraphics", "Ptr", pGraphics)
  ; Shutdown GDI+
  DllCall("Gdiplus.dll\GdiplusShutdown", "Ptr", pToken)
  If (hGDIP)
    DllCall("FreeLibrary", "Ptr", hGDIP)
  ; -------------------------------------------------------------------------------------------------------------------
  ; Set control styles
  Control, Style, -%SS_ICON%, , ahk_id %HWND%
  Control, Style, +%SS_BITMAP%, , ahk_id %HWND%
  ; Assign the bitmap
  SendMessage, STM_SETIMAGE, IMAGE_BITMAP, hBitmap, , ahk_id %HWND%
  ; Done!
  DllCall("Gdi32.dll\DeleteObject", "Ptr", hBitmap)
  Return True
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。