ОС Win7 x64.
При малом проценте закрашенная полоса отображается некорректно. При любом расположении, горизонтальном или вертикальном, заливка скрывает левую, при горизонтальном, или нижнюю, при вертикальном, границу области заливки. Выглядит это некрасиво.
Тестовый скрипт:
Это баг и можно ли это исправить?
PS
Экспериментально удалось установить, что баг зависит не только от процента заполнения, но и от длины самой полосы прогресса.
Баг проявляется при длине залитой полосы от1 до 24 писелей и не проявляется при длине большей или равной 25 пикселей.
При малом проценте закрашенная полоса отображается некорректно. При любом расположении, горизонтальном или вертикальном, заливка скрывает левую, при горизонтальном, или нижнюю, при вертикальном, границу области заливки. Выглядит это некрасиво.
Тестовый скрипт:
Код:
#include <GuiConstantsEx.au3>
#include <ProgressConstants.au3>
#Include <WinAPIEx.au3>
#include <APIConstants.au3>
Dim $Time1, $bordr, $hght = 235, $titlebar = 'Test Progress', $Path7Zip = 'c:\Program Files\7-Zip\7zG.exe'
GUICreate($titlebar, '', '', 0, @DesktopHeight + 200)
$prgrbar = WinGetPos($titlebar)
$toolbar = WinGetPos("[CLASS:Shell_TrayWnd]")
If @OSVersion = 'WIN_7' Then $bordr = 5
$poshght = @DesktopHeight - $prgrbar[3] + 34 - $hght
If $toolbar <> 0 Then $poshght -= $toolbar[3]
GUICreate('Test Progress', 300, $hght, $bordr, $poshght - 2*$bordr, '', $WS_EX_TOPMOST)
; PROGRESS
GUICtrlCreateLabel("CPU", 10, 10)
$cpu=GUICtrlCreateProgress(10, 30, 20, 150, $PBS_VERTICAL)
$cpu0=GUICtrlCreateLabel("50%", 10, 185)
GUICtrlCreateLabel("RAM", 40, 10)
$ram=GUICtrlCreateProgress(40, 30, 20, 150, $PBS_VERTICAL)
$ram0=GUICtrlCreateLabel("50%", 40, 185)
GUICtrlCreateLabel("Progress:", 80, 33)
GUICtrlCreateProgress(130, 30, 150, 20)
GUICtrlSetData(-1, 10)
GUICtrlCreateProgress(130, 60, 150, 20)
GUICtrlSetData(-1, 15)
GUICtrlCreateProgress(130, 90, 150, 20)
GUICtrlSetData(-1, 20)
GUICtrlCreateProgress(130, 120, 150, 20)
GUICtrlSetData(-1, 50)
GUICtrlCreateProgress(130, 150, 150, 20)
GUICtrlSetData(-1, 100)
; BUTTON
$strt=GUICtrlCreateButton("Start", 90, 175, 65, 25)
$stop=GUICtrlCreateButton("Stop", 170, 175, 65, 25)
AdlibRegister('_CPU')
; GUI MESSAGE LOOP
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
AdlibUnRegister('_CPU')
Exit
Case $strt
$ben = Run('"' & $Path7Zip & '" b')
Case $stop
If ProcessExists("7zg.exe") Then ProcessClose($ben)
EndSwitch
WEnd
Func _CPU()
Local $Time2 = _WinAPI_GetSystemTimes()
If IsArray($Time1) Then
$TimeBusyCPU = $Time2[1] + $Time2[2] - $Time1[1] - $Time1[2]
$TimeIdleCPU = $Time2[0] - $Time1[0]
$cpuPers = StringFormat('%.f', ($TimeBusyCPU - $TimeIdleCPU) / $TimeBusyCPU * 100)
GUICtrlSetData($cpu, $cpuPers)
GUICtrlSetData($cpu0, $cpuPers & '%')
EndIf
$Time1 = $Time2
$mem=MemGetStats()
GUICtrlSetData($ram, $mem[0])
GUICtrlSetData($ram0, $mem[0] & '%')
EndFunc ;==>_CPU
Это баг и можно ли это исправить?
PS
Экспериментально удалось установить, что баг зависит не только от процента заполнения, но и от длины самой полосы прогресса.
Баг проявляется при длине залитой полосы от1 до 24 писелей и не проявляется при длине большей или равной 25 пикселей.