Code: Select all
hBitmap := Create_sliderthumb_png()
IniRead, MinD, config.ini, Slider, MinDelay, 20
IniRead, MaxD, config.ini, Slider, MaxDelay, 20
Gui, Color, 0x282D41
Min := new CustomSlider("x10 y20 w400 h5 BackGround0x454C5F c0x66CCFF vMin altsubmit", MinD, hBitmap)
Max := new CustomSlider2("x10 y120 w400 h5 BackGround0x454C5F c0x66CCFF vMax altsubmit", MaxD, hBitmap)
Gui, Show, w450 h350, SliderGUI
Return
GuiClose:
ExitApp
; based on http://www.autohotkey.com/board/topic/81144-progress-bar-slider/?p=516891
class CustomSlider
{
__New(Options := "", val := "", hBitmap_thumb := "", ShowTooltip := True) {
if !RegExMatch(Options, "i)\bBackground\w+\b") {
if RegExMatch(Options, "i)\bc\K\w+", bkColor)
bkOpt := "Background" bkColor
}
Gui, Add, Progress, h1 %Options% %bkOpt% hwndHPROG Disabled -E0x20000, % val
Gui, Add, Text, xp yp-10 h24 wp BackgroundTrans HWNDhpgTrigger,
; Gui, Add, Text, x+15 w30 HWNDhRightText, %val%
if RegExMatch(Options, "i)\bRange\K([\d-]+)-([\d-]+)", rng)
this.rng_radio := Abs(rng2 - rng1)/100
else
this.rng_radio := 1
GuiControlGet, pg, Pos, %HPROG%
x := pgW * (val/this.rng_radio/100) + pgX
Gui, Add, Pic, yp+5 x%x% w15 h15 HWNDhBtn, % "HBITMAP:" hBitmap_thumb
this.hProg := HPROG
this.hBtn := hBtn
this.pgVal := val
this.ShowTooltip := ShowTooltip
; this.hRightText := hRightText
fn := this.OnClick.Bind(this)
GuiControl, +g, %hBtn%, %fn%
GuiControl, +g, %hpgTrigger%, %fn%
}
OnClick() {
GuiControl, Focus, % this.hBtn
hSlider := this.hProg
pre_CoordModeMouse := A_CoordModeMouse
CoordMode, Mouse, Relative
MouseGetPos,,,, ClickedhWnd, 2
GuiControlGet, SliderLine, %A_Gui%:Pos, % hSlider
GuiControlGet, sliderVal, %A_Gui%:, %hSlider%
V := sliderVal
if this.ShowTooltip
ToolTip, %sliderVal%
ControlGet, Style, Style,,, ahk_id %hSlider%
ControlGetPos, X, Y, W, H,, ahk_id %hSlider%
VarSetCapacity(R, 8)
SendMessage, 0x0407,, &R,, ahk_id %hSlider%
R1 := NumGet(R, 0, "Int")
R2 := NumGet(R, 4, "Int")
LastV := (ClickedhWnd = this.hBtn) ? "" : sliderVal
while (GetKeyState("LButton"))
{
Sleep, 10
MouseGetPos, XM, YM
V := (V:=(Style&0x4 ? 1-(YM-Y)/H : (XM-X)/W))>=1 ? R2 : V<=0 ? R1 : Round(V*(R2-R1)+R1)
if (LastV="") {
LastV := V
} else if (V != LastV) {
LastV := V
if this.ShowTooltip
ToolTip % V
this.pos(SliderLineW, SliderLineX) := V
}
}
if this.ShowTooltip
ToolTip
IniWrite, %V%, config.ini, Slider, MinDelay
CoordMode, Mouse, %pre_CoordModeMouse%
}
pos[pgW := "", pgX := ""] {
set {
GuiControl,, % this.hProg, % value
if !pgW
GuiControlGet, pg, Pos, % this.hProg
x := pgW * (value/this.rng_radio/100) + pgX
; GuiControl, MoveDraw, % this.hBtn, x%x%
GuiControl, Move, % this.hBtn, x%x%
DllCall("InvalidateRect", "ptr", this.hBtn, "ptr", 0, "int", 0)
this.pgVal := value
; GuiControl,, % this.hRightText, % value
}
get {
return this.pgVal
}
}
}
class CustomSlider2
{
__New(Options := "", val := "", hBitmap_thumb := "", ShowTooltip := True) {
if !RegExMatch(Options, "i)\bBackground\w+\b") {
if RegExMatch(Options, "i)\bc\K\w+", bkColor)
bkOpt := "Background" bkColor
}
Gui, Add, Progress, h1 %Options% %bkOpt% hwndHPROG Disabled -E0x20000, % val
Gui, Add, Text, xp yp-10 h24 wp BackgroundTrans HWNDhpgTrigger,
; Gui, Add, Text, x+15 w30 HWNDhRightText, %val%
if RegExMatch(Options, "i)\bRange\K([\d-]+)-([\d-]+)", rng)
this.rng_radio := Abs(rng2 - rng1)/100
else
this.rng_radio := 1
GuiControlGet, pg, Pos, %HPROG%
x := pgW * (val/this.rng_radio/100) + pgX
Gui, Add, Pic, yp+5 x%x% w15 h15 HWNDhBtn, % "HBITMAP:" hBitmap_thumb
this.hProg := HPROG
this.hBtn := hBtn
this.pgVal := val
this.ShowTooltip := ShowTooltip
; this.hRightText := hRightText
fn := this.OnClick.Bind(this)
GuiControl, +g, %hBtn%, %fn%
GuiControl, +g, %hpgTrigger%, %fn%
}
OnClick() {
GuiControl, Focus, % this.hBtn
hSlider := this.hProg
pre_CoordModeMouse := A_CoordModeMouse
CoordMode, Mouse, Relative
MouseGetPos,,,, ClickedhWnd, 2
GuiControlGet, SliderLine, %A_Gui%:Pos, % hSlider
GuiControlGet, sliderVal, %A_Gui%:, %hSlider%
V := sliderVal
if this.ShowTooltip
ToolTip, %sliderVal%
ControlGet, Style, Style,,, ahk_id %hSlider%
ControlGetPos, X, Y, W, H,, ahk_id %hSlider%
VarSetCapacity(R, 8)
SendMessage, 0x0407,, &R,, ahk_id %hSlider%
R1 := NumGet(R, 0, "Int")
R2 := NumGet(R, 4, "Int")
LastV := (ClickedhWnd = this.hBtn) ? "" : sliderVal
while (GetKeyState("LButton"))
{
Sleep, 10
MouseGetPos, XM, YM
V := (V:=(Style&0x4 ? 1-(YM-Y)/H : (XM-X)/W))>=1 ? R2 : V<=0 ? R1 : Round(V*(R2-R1)+R1)
if (LastV="") {
LastV := V
} else if (V != LastV) {
LastV := V
if this.ShowTooltip
ToolTip % V
this.pos(SliderLineW, SliderLineX) := V
}
}
if this.ShowTooltip
ToolTip
IniWrite, %V%, config.ini, Slider, MaxDelay
CoordMode, Mouse, %pre_CoordModeMouse%
}
pos[pgW := "", pgX := ""] {
set {
GuiControl,, % this.hProg, % value
if !pgW
GuiControlGet, pg, Pos, % this.hProg
x := pgW * (value/this.rng_radio/100) + pgX
; GuiControl, MoveDraw, % this.hBtn, x%x%
GuiControl, Move, % this.hBtn, x%x%
DllCall("InvalidateRect", "ptr", this.hBtn, "ptr", 0, "int", 0)
this.pgVal := value
; GuiControl,, % this.hRightText, % value
}
get {
return this.pgVal
}
}
}
; ##################################################################################
; # This #Include file was generated by Image2Include.ahk, you must not change it! #
; ##################################################################################
Create_sliderthumb_png(NewHandle := False) {
Static hBitmap := 0
If (NewHandle)
hBitmap := 0
If (hBitmap)
Return hBitmap
VarSetCapacity(B64, 3864 << !!A_IsUnicode)
B64 := "iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFJGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIxLTA3LTMwVDE4OjM3OjAzKzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0wNy0zMFQxOTowNDowNyswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0wNy0zMFQxOTowNDowNyswMjowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0ODYxZjUzZS0yMWNkLWFlNDAtOTE3Mi1lZTAwZDBhY2Y5N2MiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo0MDMyMDIwYy03MGM3LTYwNDItODYzOC0wMjc5NmIxOGE2N2YiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0ODYxZjUzZS0yMWNkLWFlNDAtOTE3Mi1lZTAwZDBhY2Y5N2MiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjQ4NjFmNTNlLTIxY2QtYWU0MC05MTcyLWVlMDBkMGFjZjk3YyIgc3RFdnQ6d2hlbj0iMjAyMS0wNy0zMFQxODozNzowMyswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIxLjIgKFdpbmRvd3MpIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmK2tpMAAAEYSURBVDiNrdQ9LwRRFMbx34z34CtIJKuwlWT7jUSiQ6LXUq5INAiFjUblM4jEZ1Ao2Ea8NCqhUIhEYdUKRrEzyZjsYmY9yS3uefnnnHNzbrB8FemgEsoYj+8vuMd1u+DeNrYKtjCDkYzvHRfYxlnaEWYCazjFAkYRZM4gqjjBbqeKathHX7vSUwowgI0YvJ6uqIL6HyDZblYxnwbtYDgHJFEP9hJQSWuwQQFQgElUQkxhqAAkDZsNMdEFJFE5+/yFFeL5HziPIW7w0SXoMsQt7tBx6X7RKxrJjOoFQVGc20xAxzjMCYu0FveA70u7hiN85oAsJoY0qIklrOApDo4yyRHesInpOAcEP3xsVcxhDP14wDkaaUCiL0A1N1R4MrTFAAAAAElFTkSuQmCC"
If !DllCall("Crypt32.dll\CryptStringToBinary", "Ptr", &B64, "UInt", 0, "UInt", 0x01, "Ptr", 0, "UIntP", DecLen, "Ptr", 0, "Ptr", 0)
Return False
VarSetCapacity(Dec, DecLen, 0)
If !DllCall("Crypt32.dll\CryptStringToBinary", "Ptr", &B64, "UInt", 0, "UInt", 0x01, "Ptr", &Dec, "UIntP", DecLen, "Ptr", 0, "Ptr", 0)
Return False
; Bitmap creation adopted from "How to convert Image data (JPEG/PNG/GIF) to hBITMAP?" by SKAN
; -> http://www.autohotkey.com/board/topic/21213-how-to-convert-image-data-jpegpnggif-to-hbitmap/?p=139257
hData := DllCall("Kernel32.dll\GlobalAlloc", "UInt", 2, "UPtr", DecLen, "UPtr")
pData := DllCall("Kernel32.dll\GlobalLock", "Ptr", hData, "UPtr")
DllCall("Kernel32.dll\RtlMoveMemory", "Ptr", pData, "Ptr", &Dec, "UPtr", DecLen)
DllCall("Kernel32.dll\GlobalUnlock", "Ptr", hData)
DllCall("Ole32.dll\CreateStreamOnHGlobal", "Ptr", hData, "Int", True, "PtrP", pStream)
hGdip := DllCall("Kernel32.dll\LoadLibrary", "Str", "Gdiplus.dll", "UPtr")
VarSetCapacity(SI, 16, 0), NumPut(1, SI, 0, "UChar")
DllCall("Gdiplus.dll\GdiplusStartup", "PtrP", pToken, "Ptr", &SI, "Ptr", 0)
DllCall("Gdiplus.dll\GdipCreateBitmapFromStream", "Ptr", pStream, "PtrP", pBitmap)
DllCall("Gdiplus.dll\GdipCreateHBITMAPFromBitmap", "Ptr", pBitmap, "PtrP", hBitmap, "UInt", 0)
DllCall("Gdiplus.dll\GdipDisposeImage", "Ptr", pBitmap)
DllCall("Gdiplus.dll\GdiplusShutdown", "Ptr", pToken)
DllCall("Kernel32.dll\FreeLibrary", "Ptr", hGdip)
DllCall(NumGet(NumGet(pStream + 0, 0, "UPtr") + (A_PtrSize * 2), 0, "UPtr"), "Ptr", pStream)
Return hBitmap
}