Что нового

Как включить в скрипт таймер с условием

A

at

Гость
Здравствуйте! Прошу, поправить мой скрипт или подсказать, как правильно включить в скрипт таймер с условием. Нужно, чтобы время таймера соответствовало выбранному в комбоксе периоду.
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>

#Region ### START Koda GUI section ### Form=
$_Form = GUICreate("", 339, 146, 189, 114)
$_Label_1 = GUICtrlCreateLabel("Автоматический режим", 16, 24, 125, 17)
$_Checkbox = GUICtrlCreateCheckbox("", 176, 24, 25, 17)
$_Combo = GUICtrlCreateCombo("не выбрано", 176, 56, 145, 25)
GUICtrlSetData(-1, "1 мин|2 мин")
$_Label_2 = GUICtrlCreateLabel("Повторять через каждые", 16, 56, 131, 17)
$_Button = GUICtrlCreateButton("Сейчас", 104, 96, 107, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $_Auto_Taime, $_Auto_Taime_Summ = $_Auto_Taime*3000
$_Automatics = TimerInit()
While 1
	$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE
				Exit
			Case $_Button
			_Mehanic()	
			Case $_Checkbox
				If BitAND(GUICtrlRead($_Checkbox), $GUI_CHECKED) Then
							
					If TimerDiff($_Automatics) > $_Auto_Taime_Summ Then ; Таймер
						Switch $_Combo
							Case GUICtrlRead($_Combo) = 'не выбрано'
							 $_Auto_Taime = '0'
							Case GUICtrlRead($_Combo) = '1 мин'
							 $_Auto_Taime = '1'
							Case GUICtrlRead($_Combo) = '2 мин'
							 $_Auto_Taime = '2'
						EndSwitch
						_Automat()
						$_Automatics = TimerInit()
					EndIf
				EndIf	
		EndSwitch

WEnd
Func _Mehanic()
	MsgBox(0,"","Механика")
EndFunc

Func _Automat()
	MsgBox(0,"","Автомат")
EndFunc
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>

#Region ### START Koda GUI section ### Form=
$_Form = GUICreate("", 339, 146, 189, 114)
$_Button1 = GUICtrlCreateButton("Механика", 16, 24, 125, 17)
$_Combo = GUICtrlCreateCombo("не выбрано", 176, 56, 145, 25)
GUICtrlSetData(-1, "1 мин|2 мин")
$_Button2 = GUICtrlCreateButton("Повторять через каждые", 16, 56, 131, 17)
$_Button3 = GUICtrlCreateButton("Стоп", 104, 96, 107, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $_Auto_Taime, $_Auto_Taime_Summ = $_Auto_Taime*3000
$_Automatics = TimerInit()

Global $Action = "Idle"

While 1

	Switch $Action
		Case "Mehanic"
			_Mehanic()
			$Action = "Idle"
		Case "Automat"
			If TimerDiff($_Automatics) > $_Auto_Time Then
				_Automat()
				$_Automatics = TimerInit()
			EndIf
	EndSwitch

    $nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $_Button1
			$Action = "Mehanic"
		Case $_Button2
			$Action = "Automat"
			$timerSelect = GUICtrlRead($_Combo)
			Switch $timerSelect
				Case GUICtrlRead($_Combo) = 'не выбрано'
					$_Auto_Time = 0
				Case GUICtrlRead($_Combo) = '1 мин'
					$_Auto_Time = 60000
				Case GUICtrlRead($_Combo) = '2 мин'
					$_Auto_Time = 120000
			EndSwitch
			$_Automatics = TimerInit()
		Case $_Button3
			$Action = "Idle"
    EndSwitch
WEnd

Func _Mehanic()
    ToolTip("Механика")
EndFunc

Func _Automat()
    ToolTip("Автомат "&@MIN&":"&@SEC)
EndFunc

Вы только не путайте!
GUI по-прежнему корявый.
А вот логика работы - это другое дело.
:smile:
 
Автор
A

at

Гость
C2H5OH, Спасибо за подсказку. К сожалению в вашем примере параметр в комбоксе не читается скриптом. Пробовал собрать по представленной логике, ничего не получилось.
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>

#Region ### START Koda GUI section ### Form=
$_Form = GUICreate("", 339, 146, 189, 114)
$_Label_1 = GUICtrlCreateLabel("Автоматический режим", 16, 24, 125, 17)
$_Checkbox = GUICtrlCreateCheckbox("", 176, 24, 25, 17)
$_Combo = GUICtrlCreateCombo("не выбрано", 176, 56, 145, 25)
GUICtrlSetData(-1, "1 мин|2 мин")
$_Label_2 = GUICtrlCreateLabel("Повторять через каждые", 16, 56, 131, 17)
$_Button = GUICtrlCreateButton("Сейчас", 104, 96, 107, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $_Auto_Taime, $_Auto_Taime_Summ = $_Auto_Taime*3000
$_Automatics = TimerInit()
While 1
	 Switch $_Checkbox
		Case $_Checkbox
			If BitAND(GUICtrlRead($_Checkbox), $GUI_CHECKED) Then
				If TimerDiff($_Automatics) > $_Auto_Taime_Summ Then
					_Automat()
					$_Automatics = TimerInit()
				EndIf
			EndIf	
     EndSwitch	
	
	$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE
				Exit
			Case $_Button
			_Mehanic()	
			Case $_Checkbox
				Switch $_Combo
					Case GUICtrlRead($_Combo) = 'не выбрано'
					 $_Auto_Taime = '0'
					Case GUICtrlRead($_Combo) = '1 мин'
					 $_Auto_Taime = '1'
					Case GUICtrlRead($_Combo) = '2 мин'
					 $_Auto_Taime = '2'
				EndSwitch
		EndSwitch
WEnd
Func _Mehanic()
	MsgBox(0,"","Механика")
EndFunc

Func _Automat()
	MsgBox(0,"","Автомат")
EndFunc


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

Кроме того, разложил вроде все по полкам в вашем скрипте, так и не понял логики, что хотели показать. Если можно небольшой коментарий добавить, буду признателен.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Подправил
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>

#Region ### START Koda GUI section ### Form=
$_Form = GUICreate("", 339, 146, 189, 114)
$_Button1 = GUICtrlCreateButton("Механика", 16, 24, 125, 17)
$_Combo = GUICtrlCreateCombo("не выбрано", 176, 56, 145, 25)
GUICtrlSetData(-1, "1 мин|2 мин")
$_Button2 = GUICtrlCreateButton("Повторять через каждые", 16, 56, 131, 17)
$_Button3 = GUICtrlCreateButton("Стоп", 104, 96, 107, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $_Auto_Time = 0
$_Automatics = TimerInit()

Global $Action = "Idle"

While 1

	Switch $Action
		Case "Mehanic"
			_Mehanic()
			$Action = "Idle"
		Case "Automat"
			If TimerDiff($_Automatics) > $_Auto_Time Then
				_Automat()
				$_Automatics = TimerInit()
			EndIf
		Case "Stop"
			$Action = "Idle"
	EndSwitch

    $nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $_Button1
			$Action = "Mehanic"
		Case $_Button2
			$Action = "Automat"
			$timerSelect = GUICtrlRead($_Combo)
			Switch $timerSelect
				Case 'не выбрано'
					$_Auto_Time = 0
				Case '1 мин'
					$_Auto_Time = 60000
				Case '2 мин'
					$_Auto_Time = 120000
			EndSwitch
			$_Automatics = TimerInit()
		Case $_Button3
			$Action = "Idle"
    EndSwitch
WEnd

Func _Mehanic()
    MsgBox(0,"","Механика")
EndFunc

Func _Automat()
    MsgBox(0,"","Автомат")
EndFunc
Теперь корректно combo читает.


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

Нет, не такая логика.
Весь смысл в том что первый Switch не работает с GUI, он только выполняет функции, сответствующие выбранному действию.
Второй Switch обрабатывает только GUI и устанвливает значение $Action в зависимости от нажатых кнопок.
 
Автор
A

at

Гость
C2H5OH, Спасибо большое, что объяснили принцип. Может, есть еще какие-то варианты, кроме $Action. "Получилось" у меня очень криво. Не смог нормально прикрутить чекбокс. Прошу авторитетов поправить или подсказать, как это сделать, чтоб работало. Второй день штурмую уже эту функцию. К сожалению ни в справке, ни на форуме нет информации.
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>

#Region ### START Koda GUI section ### Form=
$_Form = GUICreate("", 339, 146, 189, 114)
$_Label_1 = GUICtrlCreateLabel("Автоматический режим", 16, 24, 125, 17)
$_Checkbox = GUICtrlCreateCheckbox("", 176, 24, 25, 17)
$_Combo = GUICtrlCreateCombo("не выбрано", 176, 56, 145, 25)
GUICtrlSetData(-1, "1 мин|2 мин")
$_Label_2 = GUICtrlCreateLabel("Повторять через каждые", 16, 56, 131, 17)
$_Button = GUICtrlCreateButton("Сейчас", 104, 96, 107, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $_Auto_Time, $_Auto_Time_Summ = $_Auto_Time, $Action = "Idle"
$_Automatics = TimerInit()
While 1
	Switch $Action
	    Case "Automat"
		 	If TimerDiff($_Automatics) > $_Auto_Time_Summ Then
				_Automat()
				$_Automatics = TimerInit()
			EndIf
    EndSwitch

	$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE
				Exit
			Case $_Button
			_Mehanic()
			Case $Action = "Automat"
			$Action = BitAND(GUICtrlRead($_Checkbox), $GUI_CHECKED)
            $_Auto_Time_Summ = GUICtrlRead($_Combo)*2000
				Switch $_Combo
					Case GUICtrlRead($_Combo) = 'не выбрано'
					 $_Auto_Time = '10000'
					Case GUICtrlRead($_Combo) = '1 мин'
					 $_Auto_Time = '1'
					Case GUICtrlRead($_Combo) = '2 мин'
					 $_Auto_Time = '2'
				EndSwitch
				$_Automatics = TimerInit()
			
		EndSwitch
WEnd
Func _Mehanic()
	MsgBox(0,"","Механика")
EndFunc

Func _Automat()
	MsgBox(0,"","Автомат")
EndFunc
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Чем мой второй скрипт не устроил?
 
Автор
A

at

Гость
Чем мой второй скрипт не устроил?
Всё устраивает вполне. Вопрос в том, что не могу чекбокс нормально поставить. Работает наоборот. При снятой галке включается автоматика.
Что я не так сделал? :stars:

Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>

#Region ### START Koda GUI section ### Form=
$_Form = GUICreate("", 339, 146, 189, 114)
$_Label_1 = GUICtrlCreateLabel("Автоматический режим", 16, 24, 125, 17)
$_Checkbox = GUICtrlCreateCheckbox("", 176, 24, 25, 17)
$_Combo = GUICtrlCreateCombo("не выбрано", 176, 56, 145, 25)
GUICtrlSetData(-1, "1 мин|2 мин")
$_Label_2 = GUICtrlCreateLabel("Повторять через каждые", 16, 56, 131, 17)
$_Button = GUICtrlCreateButton("Сейчас", 104, 96, 107, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $_Auto_Time, $_Auto_Time_Summ = $_Auto_Time, $Action = "Idle"
$_Automatics = TimerInit()
While 1
    Switch $Action
        Case "Automat"
            If TimerDiff($_Automatics) > $_Auto_Time_Summ Then
                _Automat()
                $_Automatics = TimerInit()
            EndIf
    EndSwitch

    $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $_Button
            _Mehanic()
            Case $Action = "Automat"
            $Action = BitAND(GUICtrlRead($_Checkbox), $GUI_CHECKED)
            $_Auto_Time_Summ = GUICtrlRead($_Combo)*2000
                Switch $_Combo
                    Case GUICtrlRead($_Combo) = 'не выбрано'
                     $_Auto_Time = '10000'
                    Case GUICtrlRead($_Combo) = '1 мин'
                     $_Auto_Time = '1'
                    Case GUICtrlRead($_Combo) = '2 мин'
                     $_Auto_Time = '2'
                EndSwitch
                $_Automatics = TimerInit()
            
        EndSwitch
WEnd
Func _Mehanic()
    MsgBox(0,"","Механика")
EndFunc

Func _Automat()
    MsgBox(0,"","Автомат")
EndFunc
 

Futurebear

Знающий
Сообщения
29
Репутация
6
В последнем примере, переменная $Action должна как я понял принемать 2 типа значаний "Idle" и "Automat", но в коде присутсвует строка, присваивающая $Action значения 1 и 0.
Код:
$Action = BitAND(GUICtrlRead($_Checkbox), $GUI_CHECKED)

Видимо у вас перемешались старый и новый варианты.
Используйте в место "Idle" и "Automat", 0 и 1 и будет вам счастье
 
Автор
A

at

Гость
Используйте в место "Idle" и "Automat", 0 и 1 и будет вам счастье
Futurebear, Спасибо, все работает.


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

Спасибо Всем! Вот собственно то, что получилось совместными усилиями:
Код:
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>

#Region ### START Koda GUI section ### Form=
$_Form = GUICreate("", 339, 146, 189, 114)
$_Label_1 = GUICtrlCreateLabel("Автоматический режим", 16, 24, 125, 17)
$_Checkbox = GUICtrlCreateCheckbox("", 176, 24, 25, 17)
$_Combo = GUICtrlCreateCombo("1 мин", 176, 56, 145, 25)
GUICtrlSetData(-1, "2 мин|3 мин")
$_Label_2 = GUICtrlCreateLabel("Повторять через каждые", 16, 56, 131, 17)
$_Button = GUICtrlCreateButton("Сейчас", 104, 96, 107, 33)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Global $_Auto_Time, $_Auto_Time_Summ, $Action = "0"
$_Automatics = TimerInit()
While 1
	Switch $Action
	    Case "1"
		 	If TimerDiff($_Automatics) > $_Auto_Time_Summ Then
				_Automat()
				$_Automatics = TimerInit()
			EndIf
    EndSwitch

	$nMsg = GUIGetMsg()
		Switch $nMsg
			Case $GUI_EVENT_CLOSE
				Exit
			Case $_Button
			_Mehanic()
			Case $Action = "1"
				Switch $_Combo
					Case GUICtrlRead($_Combo) = '1 мин'
					 $_Auto_Time = '1'
					Case GUICtrlRead($_Combo) = '2 мин'
					 $_Auto_Time = '2'
					Case GUICtrlRead($_Combo) = '3 мин'
					 $_Auto_Time = '3'
				 EndSwitch
			$Action = BitAND(GUICtrlRead($_Checkbox), $GUI_CHECKED)
            $_Auto_Time_Summ = $_Auto_Time*2000
		EndSwitch
WEnd
Func _Mehanic()
	MsgBox(0,"","Механика",1)
EndFunc

Func _Automat()
	MsgBox(0,"","Автомат",1)
EndFunc
 
Верх