Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <GDIP.au3>
- #include <WinAPI.au3>
- #include <WindowsConstants.au3>
- #include <Constants.au3>
- ; - Author: name22 (www.autoit.de)
- _GDIPlus_Startup()
- Global $aSliderExData[1][14]
- $aSliderExData[0][0] = 0
- GUIRegisterMsg($WM_PAINT, "__SliderEx_ReDraw")
- OnAutoItExitRegister("_GDIPlus_Shutdown")
- AdlibRegister("__SliderEx_CheckMouse", 20)
- Func _SliderEx_Create($hWnd, $iX, $iY, $iWidth, $iHeight, $iMin, $iMax, $ColorBG1 = 0xFF0F0F0F, $ColorBG2 = 0xFFF0F0F0, $ColorSlider1 = 0xFFA0A0A0, $ColorSlider2 = 0xFFE0E0E0, $ColorEdge = 0xFF505050, $ColorShadow = 0xD0000000, $iShadowLength = 8)
- $aSliderExData[0][0] += 1
- ReDim $aSliderExData[$aSliderExData[0][0] + 1][14]
- $aSliderExData[$aSliderExData[0][0]][0] = 0
- $aSliderExData[$aSliderExData[0][0]][1] = $iMin
- $aSliderExData[$aSliderExData[0][0]][2] = $iMax
- $aSliderExData[$aSliderExData[0][0]][3] = DllStructCreate("int X;int Y;int Width;int Height")
- DllStructSetData($aSliderExData[$aSliderExData[0][0]][3], "X", $iX)
- DllStructSetData($aSliderExData[$aSliderExData[0][0]][3], "Y", $iY)
- DllStructSetData($aSliderExData[$aSliderExData[0][0]][3], "Width", $iWidth)
- DllStructSetData($aSliderExData[$aSliderExData[0][0]][3], "Height", $iHeight)
- $aSliderExData[$aSliderExData[0][0]][4] = $hWnd
- $aSliderExData[$aSliderExData[0][0]][5] = _GDIPlus_GraphicsCreateFromHWND($hWnd)
- $aSliderExData[$aSliderExData[0][0]][6] = _GDIPlus_BitmapCreateFromGraphics($iWidth + 1, $iHeight + 1, $aSliderExData[$aSliderExData[0][0]][5])
- $aSliderExData[$aSliderExData[0][0]][7] = _GDIPlus_ImageGetGraphicsContext($aSliderExData[$aSliderExData[0][0]][6])
- _GDIPlus_GraphicsSetSmoothingMode($aSliderExData[$aSliderExData[0][0]][7], 2)
- $aSliderExData[$aSliderExData[0][0]][8] = _GDIPlus_LineBrushCreate(0, 0, $iWidth + 1, 0, $ColorBG1, $ColorBG2)
- $aSliderExData[$aSliderExData[0][0]][9] = _GDIPlus_LineBrushCreate(0, 0, 5, 0, $ColorSlider1, $ColorSlider2, 1)
- $aSliderExData[$aSliderExData[0][0]][10] = _GDIPlus_LineBrushCreate(0, 0, $iShadowLength, 0, $ColorShadow, 0x00000000)
- $aSliderExData[$aSliderExData[0][0]][11] = _GDIPlus_PenCreate($ColorEdge)
- GUISwitch($hWnd)
- $aSliderExData[$aSliderExData[0][0]][12] = GUICtrlCreateLabel("", $iX - 5, $iY, $iWidth + 10, $iHeight)
- $aSliderExData[$aSliderExData[0][0]][13] = $iShadowLength
- __SliderEx_Draw($aSliderExData[0][0])
- Return $aSliderExData[0][0]
- EndFunc ;==>_SliderEx_Create
- Func __SliderEx_Draw($cSlEx)
- _GDIPlus_LineBrushTranslateTransform($aSliderExData[$cSlEx][9], $aSliderExData[$cSlEx][0] - 5, 0)
- _GDIPlus_LineBrushTranslateTransform($aSliderExData[$cSlEx][10], $aSliderExData[$cSlEx][0] + 5, 0)
- _GDIPlus_GraphicsFillRect($aSliderExData[$cSlEx][7], 0, 0, DllStructGetData($aSliderExData[$cSlEx][3], "Width"), DllStructGetData($aSliderExData[$cSlEx][3], "Height"), $aSliderExData[$cSlEx][8])
- _GDIPlus_GraphicsFillRect($aSliderExData[$cSlEx][7], $aSliderExData[$cSlEx][0] - 5, 2, 10, DllStructGetData($aSliderExData[$cSlEx][3], "Height") - 4, $aSliderExData[$cSlEx][9])
- _GDIPlus_GraphicsFillRect($aSliderExData[$cSlEx][7], $aSliderExData[$cSlEx][0] + 5, 2, $aSliderExData[$cSlEx][13] - 1, DllStructGetData($aSliderExData[$cSlEx][3], "Height") - 4, $aSliderExData[$cSlEx][10])
- _GDIPlus_GraphicsDrawRect($aSliderExData[$cSlEx][7], $aSliderExData[$cSlEx][0] - 5, 2, 10, DllStructGetData($aSliderExData[$cSlEx][3], "Height") - 4, $aSliderExData[$cSlEx][11])
- _GDIPlus_GraphicsDrawRect($aSliderExData[$cSlEx][7], 0, 0, DllStructGetData($aSliderExData[$cSlEx][3], "Width"), DllStructGetData($aSliderExData[$cSlEx][3], "Height"), $aSliderExData[$cSlEx][11])
- _GDIPlus_LineBrushTranslateTransform($aSliderExData[$cSlEx][9], -($aSliderExData[$cSlEx][0] - 5), 0)
- _GDIPlus_LineBrushTranslateTransform($aSliderExData[$cSlEx][10], -($aSliderExData[$cSlEx][0] + 5), 0)
- _WinAPI_RedrawWindow($aSliderExData[$cSlEx][4], 0, 0, $RDW_UPDATENOW)
- _GDIPlus_GraphicsDrawImageRect($aSliderExData[$cSlEx][5], $aSliderExData[$cSlEx][6], DllStructGetData($aSliderExData[$cSlEx][3], "X"), DllStructGetData($aSliderExData[$cSlEx][3], "Y"), DllStructGetData($aSliderExData[$cSlEx][3], "Width"), DllStructGetData($aSliderExData[$cSlEx][3], "Height"))
- _WinAPI_RedrawWindow($aSliderExData[$cSlEx][4], 0, 0, $RDW_VALIDATE)
- EndFunc ;==>__SliderEx_Draw
- Func __SliderEx_ReDraw()
- For $i = 1 To $aSliderExData[0][0]
- _WinAPI_RedrawWindow($aSliderExData[$i][4], 0, 0, $RDW_UPDATENOW)
- _GDIPlus_GraphicsDrawImageRect($aSliderExData[$i][5], $aSliderExData[$i][6], DllStructGetData($aSliderExData[$i][3], "X"), DllStructGetData($aSliderExData[$i][3], "Y"), DllStructGetData($aSliderExData[$i][3], "Width"), DllStructGetData($aSliderExData[$i][3], "Height"))
- _WinAPI_RedrawWindow($aSliderExData[$i][4], 0, 0, $RDW_VALIDATE)
- Next
- EndFunc ;==>__SliderEx_ReDraw
- Func __SliderEx_CheckMouse()
- For $i = 1 To $aSliderExData[0][0]
- $aCursorInfo = GUIGetCursorInfo($aSliderExData[$i][4])
- If $aCursorInfo[2] And $aCursorInfo[4] = $aSliderExData[$i][12] Then
- $iPosTmp = $aCursorInfo[0] - DllStructGetData($aSliderExData[$i][3], "X")
- Select
- Case $iPosTmp < 0
- _SliderEx_SetPos($i, 0)
- Case $iPosTmp > DllStructGetData($aSliderExData[$i][3], "Width")
- _SliderEx_SetPos($i, DllStructGetData($aSliderExData[$i][3], "Width"))
- Case Else
- _SliderEx_SetPos($i, $aCursorInfo[0] - DllStructGetData($aSliderExData[$i][3], "X"))
- EndSelect
- EndIf
- Next
- EndFunc ;==>__SliderEx_CheckMouse
- Func _SliderEx_CalculatePos($cSlEx, $iValue)
- $VPP = DllStructGetData($aSliderExData[$cSlEx][3], "Width") / ($aSliderExData[$cSlEx][2] - $aSliderExData[$cSlEx][1])
- Return Round($iValue * $VPP)
- EndFunc
- Func _SliderEx_CalculateValue($cSlEx, $iPos)
- $PPV = ($aSliderExData[$cSlEx][2] - $aSliderExData[$cSlEx][1]) / DllStructGetData($aSliderExData[$cSlEx][3], "Width")
- Return $aSliderExData[$cSlEx][1] + Ceiling($iPos * $PPV)
- EndFunc
- Func _SliderEx_SetValue($cSlEx, $iValue)
- _SliderEx_SetPos($cSlEx, _SliderEx_CalculatePos($cSlEx, $iValue))
- EndFunc
- Func _SliderEx_SetPos($cSlEx, $iPos)
- $aSliderExData[$cSlEx][0] = $iPos
- __SliderEx_Draw($cSlEx)
- EndFunc
- Func _SliderEx_GetValue($cSlEx)
- Return _SliderEx_CalculateValue($cSlEx, $aSliderExData[$cSlEx][0])
- EndFunc
- Func _SliderEx_Destroy($cSlEx)
- _GDIPlus_GraphicsDispose($aSliderExData[$cSlEx][5])
- _GDIPlus_GraphicsDispose($aSliderExData[$cSlEx][7])
- _GDIPlus_BitmapDispose($aSliderExData[$cSlEx][6])
- _GDIPlus_BrushDispose($aSliderExData[$cSlEx][8])
- _GDIPlus_BrushDispose($aSliderExData[$cSlEx][9])
- EndFunc ;==>_SliderEx_Destroy
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement