Что нового

Полоса прогресса с бегающей индикацией

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Код:
#Include <GUIConstantsEx.au3>
#Include <WindowsConstants.au3>

Global Const $PBS_MARQUEE = 8 
Global Const $PBM_SETMARQUEE = 0x0400 + 10 

$hForm = GUICreate("Progress", 320, 90)
$hProgress = GUICtrlCreateProgress(10, 20, 300, 20, $PBS_MARQUEE)
$hButton = GUICtrlCreateButton("On", 110, 50, 75, 20)
GUICtrlSetState($hProgress, $GUI_HIDE)
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $hButton
			If GUICtrlRead($hButton) = "On" Then
				GUICtrlSetData($hButton, "Off")
				GUICtrlSetState($hProgress, $GUI_SHOW)
				GUICtrlSendMsg($hProgress, $PBM_SETMARQUEE, 1, 100)
			ElseIf GUICtrlRead($hButton) = "Off" Then
				GUICtrlSetState($hProgress, $GUI_HIDE)
				GUICtrlSetData($hButton, "On")
				GUICtrlSendMsg($hProgress, $PBM_SETMARQUEE, 0, 0)
			EndIf	
	EndSwitch		
WEnd
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
Viktor1703,
В справке еще много чего интересного есть. :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,670
Репутация
2,463
В XP это тоже работает?
 

AZJIO

Меценат
Меценат
Сообщения
2,768
Репутация
1,156
Viktor1703
Для себя когда то делал пример

Код:
#include <GUIConstants.au3>

GUICreate("My GUI Progressbar",250,200, 100,200) ; создаём окно с кнопками
$progress1 = GUICtrlCreateProgress (10,10,180,20) ; горизонтальный прогрессбар
$progress2 = GUICtrlCreateProgress (10,40,180,20, 0x00000008) ; бегунок
$progress3 = GUICtrlCreateProgress (220,10,20,150, 4) ; вертикальный
$Start = GUICtrlCreateButton ("Старт",10,70,90,30)
$Stop= GUICtrlCreateButton ("Стоп",110,70,90,30)
$Slider = GUICtrlCreateSlider(20, 110, 120, 30) ; регулятор
GUICtrlSetData($Slider,80)
$Lab = GUICtrlCreateLabel("80", 150, 117, 25, 18)
GUISetState () ; отобразить окно после создания элементов (кнопок, чекбоксов и т.д.)

While 1
	$msg = GUIGetMsg() ; в цикле (While 1...WEnd) происходит опрос взаимодействия с GUI (нажатия кнопок и других действий) 1000 раз в секунду
	Select ; Выбор. Если получен вызов от кнопки с переменной $Start, то выролнить последовательность кода до следующего Case
		Case $msg = $Start
			$i = 0
; пример цикла с использованием Do...Until
			Do
				$i += 1
				$t=100-GUICtrlRead($slider)
        		GUICtrlSetData ($Lab,100-$t)
        		GUICtrlSetData ($progress1,$i*4)
        		GUICtrlSetData ($progress2,$i) ;замедление
        		GUICtrlSetData ($progress3,$i*4)
        		Sleep($t+10)
        		If $i = 25 Then $i = 0
    		Until GUIGetMsg() = $Stop or GUIGetMsg() = $GUI_EVENT_CLOSE
#cs
; пример этого же цикла с использованием For...Next
			For $i = 0 To 25 Step 1
				$t=100-GUICtrlRead($slider)
        		GUICtrlSetData ($Lab,100-$t)
        		If GUIGetMsg() = $GUI_EVENT_CLOSE Then Exit
        		If GUIGetMsg() = $Stop Then ExitLoop
        		GUICtrlSetData ($progress1,$i*4)
        		GUICtrlSetData ($progress2,$i) ;замедление
        		GUICtrlSetData ($progress3,$i*4)
        		Sleep($t+10)
        		If $i = 25 Then $i = 0
    		Next
			
; пример этого же цикла с использованием While...WEnd
			While not GUIGetMsg() = $Stop or not GUIGetMsg() = $GUI_EVENT_CLOSE ; если не нажата кнопка $Stop или "Закрыть", то повторить выполнения цикла.
				$i += 1
				$t=100-GUICtrlRead($slider)
        		GUICtrlSetData ($Lab,100-$t)
        		GUICtrlSetData ($progress1,$i*4)
        		GUICtrlSetData ($progress2,$i) ;замедление
        		GUICtrlSetData ($progress3,$i*4)
        		Sleep($t+10)
        		If $i = 25 Then $i = 0
    		WEnd
#ce
		Case $msg = $GUI_EVENT_CLOSE
			ExitLoop
	EndSelect
WEnd
 
Верх