Что нового

выход из функции при нажатии кнопки

Статус
Закрыто для дальнейших ответов.

c.rauf.1986

Новичок
Сообщения
27
Репутация
0
Если кто знает пожалуйста помогите не могу выйти из цикла.
нажимаю Старт работает а стоп не хочет работать.

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>
#include <GuiButton.au3>
#include <Array.au3>


    $h_Form1 = GUICreate("", 151, 136, @DesktopWidth/2-75, @DesktopHeight/2-68)
    GUISetBkColor(0xFFFFFF)
    $Button1 = GUICtrlCreateButton("START", 38, 100, 75, 25)
	$Input1 = GUICtrlCreateInput("Приостановлень...", 17, 60, 115, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER))
    GUISetState(@SW_SHOW)

    Global $ProgStatus = False
	
    While 1
        $n_Msg = GUIGetMsg()
        Switch $n_Msg
			Case $GUI_EVENT_CLOSE
				GUIDelete($h_Form1)
            Case $Button1
				If $ProgStatus = False Then
					$ProgStatus = True
					_GUICtrlButton_SetText($Button1,'STOP')
					GUICtrlSetData($Input1,'Работает...')
					NewTimer()
				Else
					$ProgStatus = False
					_GUICtrlButton_SetText($Button1,'START')
					GUICtrlSetData($Input1,'Приостановлень...')					
				EndIf	
        EndSwitch
    WEnd
	
	func NewTimer()
		For $i = 1 to 60
			Sleep(1000)		
		Next
		MsgBox(0,'','Таймер простановлень...')
	EndFunc
 

atlake

Новичок
Сообщения
40
Репутация
0
Убрал:

Код:
NewTimer()


И всё заработало.
Всё из за цикла :(. AutoIt не многопоточный :'(


Добавлено:
Сообщение автоматически объединено:

Нужно в цикл проверку нажатия кнопки вставить... Сейчас попробую переработать скрипт, чтобы заработал как надо.


Добавлено:
Сообщение автоматически объединено:

c.rauf.1986
вот так работает. Из за Sleep'а придется долго жать на кнопку пока скрипт не остановится...

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiEdit.au3>
#include <GuiButton.au3>
#include <Array.au3>


    $h_Form1 = GUICreate("", 151, 136, @DesktopWidth/2-75, @DesktopHeight/2-68)
    GUISetBkColor(0xFFFFFF)
    $Button1 = GUICtrlCreateButton("START", 38, 100, 75, 25)
    $Input1 = GUICtrlCreateInput("Приостановлень...", 17, 60, 115, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER))
    GUISetState(@SW_SHOW)

    Global $ProgStatus = False
   
    While 1
        $n_Msg = GUIGetMsg()
        Switch $n_Msg
            Case $GUI_EVENT_CLOSE
                GUIDelete($h_Form1)
            Case $Button1
                If $ProgStatus = False Then
                    $ProgStatus = True
                    _GUICtrlButton_SetText($Button1,'STOP')
                    GUICtrlSetData($Input1,'Работает...')
                    NewTimer()
                Else
                    $ProgStatus = False
                    _GUICtrlButton_SetText($Button1,'START')
                    GUICtrlSetData($Input1,'Приостановлень...')                  
                EndIf  
        EndSwitch
    WEnd
   
    func NewTimer()
        For $i = 1 to 60
		   
		   Switch GUIGetMsg()		;;;;;;;
			Case $GUI_EVENT_CLOSE	;;;;;; если нажат крестик то..
				  GUIDelete($h_Form1)	;;;; окно GUI удаляется
			Case $Button1	;;;;; если нажали то...
				  ExitLoop		;;;;  выходим из цикла и делаем все остальное из функции
		   EndSwitch	;;;;;;
		   
            Sleep(1000)    
        Next
        MsgBox(0,'','Таймер простановлень...')
		$ProgStatus = False		;;;;;; таймер остановлен, статус меняется на False
	    _GUICtrlButton_SetText($Button1,'START')	;;;;; изменения в GUI
	    GUICtrlSetData($Input1,'Приостановлень...')		;;;; изменения в GUI
    EndFunc
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPIEx.au3>
#include <Date.au3>

Global $iPause = False, $i = 0

#Region GUI
$hForm1 = GUICreate("0", 151, 136, -1, -1)
GUISetBkColor(0xFFFFFF)
$hButton1 = GUICtrlCreateButton("Start", 38, 100, 75, 25)
$hInput1 = GUICtrlCreateInput("Приостановлен...", 17, 60, 115, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_CENTER))
GUISetState(@SW_SHOW)
#EndRegion GUI

GUIRegisterMsg($WM_TIMER, "_WM_TIMER")

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $hButton1
			_Timer()   
	EndSwitch
WEnd

func _Timer()
	If Not $iPause Then
		_WinAPI_SetTimer($hForm1, 0, 1000, 0)
		GUICtrlSetData($hInput1,'Работает...')
		GUICtrlSetData($hButton1, 'Stop')
		$iPause = Not $iPause
	Else
		_WinAPI_KillTimer($hForm1, 0)
		GUICtrlSetData($hInput1,'Приостановлен...')
		GUICtrlSetData($hButton1, 'Start')		
		$iPause = Not $iPause
	EndIf
EndFunc


Func _WM_TIMER($hWnd, $iMsg, $iTimerId, $iTime)
	$i += 1
	WinSetTitle($hForm1, '', $i)
EndFunc
 
Статус
Закрыто для дальнейших ответов.
Верх