Viktor1703
AutoIT Гуру
- Сообщения
- 1,535
- Репутация
- 413
Не могу расчитать процентовку для ProgressBar'a, нужно чтоб не имеет значение какой длины будет progress он всегда показывал 100 и линия доходила только до его края а не за ProgressBar, в коде я отметил коментарием где у меня не получается, а чтоб не искать то это в функции _JSkin_SetProgressStep
Код примера:
UDF JSkin_Progress.au3:
Скрин:

Код примера:
Код:
#include <GUIConstantsEx.au3>
#Include <JSkin_Progress.au3>
$hForm = GUICreate("_JSin_CreateProgressBar", 400, 200)
GUISetBkColor(0x1E1E1E)
$iProgress = _JSkin_CreateProgressBar(20, 20, 200, 15, 0x4C4C4C, 0x202020, 0x404040, 0xFF7F7F, 0xE20000)
GUISetState()
For $i = 0 To 100
_JSkin_SetProgressStep($iProgress, $i)
Sleep(20)
Next
Sleep(500)
_JSkin_SetProgressStep($iProgress, 50)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
Wend
UDF JSkin_Progress.au3:
Код:
#Include <WinAPIEx.au3>
Global $_JSkin_Progress_Param[1][14] = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
Func _JSkin_CreateProgressBar($iLeft, $iTop, $iWidth, $iHeight, $iFrame, $iTColor, $iBColor, $lTColor, $lBColor)
$iFont = GUICtrlCreatePic("", $iLeft, $iTop, $iWidth, $iHeight)
$hFont = GUICtrlGetHandle($iFont)
GUICtrlSetState($iFont, 128)
$iLine = GUICtrlCreatePic("", $iLeft + 2, $iTop + 2, $iWidth - 4, $iHeight - 4)
$hLine = GUICtrlGetHandle($iLine)
GUICtrlSetState($iLine, 128)
$_JSkin_Progress_Param[0][0] += 1
ReDim $_JSkin_Progress_Param[$_JSkin_Progress_Param[0][0] + 1][UBound($_JSkin_Progress_Param, 2)]
$_JSkin_Progress_Param[$_JSkin_Progress_Param[0][0]][0] = $iFont
$_JSkin_Progress_Param[$_JSkin_Progress_Param[0][0]][1] = $hFont
$_JSkin_Progress_Param[$_JSkin_Progress_Param[0][0]][2] = $iFrame
$_JSkin_Progress_Param[$_JSkin_Progress_Param[0][0]][3] = $iTColor
$_JSkin_Progress_Param[$_JSkin_Progress_Param[0][0]][4] = $iBColor
$_JSkin_Progress_Param[$_JSkin_Progress_Param[0][0]][5] = $iLine
$_JSkin_Progress_Param[$_JSkin_Progress_Param[0][0]][6] = $hLine
$_JSkin_Progress_Param[$_JSkin_Progress_Param[0][0]][7] = $lTColor
$_JSkin_Progress_Param[$_JSkin_Progress_Param[0][0]][8] = $lBColor
$_JSkin_Progress_Param[$_JSkin_Progress_Param[0][0]][9] = $iLeft
$_JSkin_Progress_Param[$_JSkin_Progress_Param[0][0]][10] = $iTop
$_JSkin_Progress_Param[$_JSkin_Progress_Param[0][0]][11] = $iWidth
$_JSkin_Progress_Param[$_JSkin_Progress_Param[0][0]][12] = $iHeight
$_JSkin_Progress_Param[$_JSkin_Progress_Param[0][0]][13] = 0
__SetProgressColor($hFont, $iWidth, $iHeight, $iFrame, $iTColor, $iBColor)
Return $iLine
EndFunc
Func _JSkin_SetProgressStep($iCtrlId, $iStep)
For $i = 0 To $_JSkin_Progress_Param[0][0]
If $_JSkin_Progress_Param[$i][5] = $iCtrlId Then
$iStep = (Round($iStep * ($_JSkin_Progress_Param[$i][11] / 100)) - 2) ; Здесь не получается высчитать
$_JSkin_Progress_Param[$i][13] = $iStep
ConsoleWrite($_JSkin_Progress_Param[$i][13] & @CRLF)
$hDC = _WinAPI_GetDC($_JSkin_Progress_Param[$i][6])
$hDestDC = _WinAPI_CreateCompatibleDC($hDC)
$hBitmap = _WinAPI_CreateCompatibleBitmapEx($hDC, $iStep, $_JSkin_Progress_Param[$i][12] - 4, 0x060606)
$hDestSv = _WinAPI_SelectObject($hDestDC, $hBitmap)
Dim $hGradient[2][3] = [[0, 0, $_JSkin_Progress_Param[$i][7]], [$iStep, $_JSkin_Progress_Param[$i][12] - 4, $_JSkin_Progress_Param[$i][8]]]
_WinAPI_GradientFill($hDestDC, $hGradient)
_WinAPI_ReleaseDC($_JSkin_Progress_Param[$i][6], $hDC)
_WinAPI_SelectObject($hDestDC, $hDestSv)
_WinAPI_DeleteDC($hDestDC)
_SendMessage($_JSkin_Progress_Param[$i][6], 0x0172, 0, $hBitmap)
EndIf
Next
EndFunc
Func __SetProgressColor($iCtrlId, $iWidth, $iHeight, $iFrame, $iTColor, $iBColor)
Local $hDC, $hDestDC, $hBitmap, $hDestSv, $hGradient
$hDC = _WinAPI_GetDC($iCtrlId)
$hDestDC = _WinAPI_CreateCompatibleDC($hDC)
$hBitmap = _WinAPI_CreateCompatibleBitmapEx($hDC, $iWidth, $iHeight, $iFrame)
$hDestSv = _WinAPI_SelectObject($hDestDC, $hBitmap)
Dim $hGradient[2][3] = [[2, 2, $iTColor], [$iWidth - 2, $iHeight - 2, $iBColor]]
_WinAPI_GradientFill($hDestDC, $hGradient)
_WinAPI_ReleaseDC($iCtrlId, $hDC)
_WinAPI_SelectObject($hDestDC, $hDestSv)
_WinAPI_DeleteDC($hDestDC)
_SendMessage($iCtrlId, 0x0172, 0, $hBitmap)
EndFunc
Скрин:
