Что нового

[Элементы GUI] Вид GUICtrlCreateProgress при малых значениях процента заполнения. Баг?

gora

Знающий
Сообщения
315
Репутация
19
ОС Win7 x64.
При малом проценте закрашенная полоса отображается некорректно. При любом расположении, горизонтальном или вертикальном, заливка скрывает левую, при горизонтальном, или нижнюю, при вертикальном, границу области заливки. Выглядит это некрасиво.

progress1.png


Тестовый скрипт:
Код:
#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 пикселей.
 
Верх