Что нового

[Элементы GUI] Прекращение цикла при помощи контрольных точек

Goldenx

Новичок
Сообщения
14
Репутация
0
Всем привет. По поиску на форуме нашел такое решение как наставить контрольных точек и прекратить цикл

Код:
Global  $Alarm

HotKeySet("{ESC}", "_exit")


Func Search()
	$YSector = 0
	While $YSector <= 3 AND $Find <> 1 And Not $Alarm ;<== тут
		$XSector = 0
		While $XSector <= 3 AND $Find <> 1 And Not $Alarm ;<== тут
			$AlfaX = ($EndCoordX - $StartCoordX) / 4
			$AlfaY = ($EndCoordY - $StartCoordY) / 4
			$coord = PixelSearch($StartCoordX + $AlfaX * $XSector, $StartCoordY + $AlfaY * $YSector, $StartCoordX + $AlfaX * ($XSector + 1), $StartCoordY + $AlfaY * ($YSector + 1), $SearchColor)
			If Not @error Then
				BusyTest($coord[0], $coord[1])
			EndIf
			$XSector = $XSector + 1
		WEnd
		$YSector = $YSector + 1
	 WEnd
	If $Find = 0 Then
		HuntArea()
	EndIf
EndFunc   ;==>Search

Func _exit()
   	$Alarm = True
EndFunc   ;==>_exit


Но при нажатие ESC ничего не происходит. Просто продолжает дальше функцию Search() как будто параметр $Alarm не изменен. Связанно ли это как то с Event модом, может я чего недопонимал когда читал справку.

И еще вопрос по поводу этой же функции, когда она работает невозможно работать с окном, даже просто выйти. Когда в этом же коду работают другие функции все прекрасно работает. В чем она так примечательна?
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Функция должна отрабатывать правильно.
Вероятно проблема не в представленном коде, а в оставшейся части, которую Вы не показали.

для примера эта же конструкция, но упрощенная, вполне работает
Код:
Global  $Alarm = False

HotKeySet("{ESC}", "_exit")
Search()

Func Search()
   While  Not $Alarm ;<== тут
	  Sleep(500)
   WEnd

EndFunc   ;==>Search

Func _exit()
    $Alarm = True
EndFunc   ;==>_exit


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

По поводу работы окон.
А как именно Вы работаете с окнами? какой код используете, как пытаетесь выйти (так же по ESC или иначе)?
Другими словами, без всего кода получается "гадание на кофейной гуще". Вы даете недостаточно информации.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Goldenx [?]
Но при нажатие ESC ничего не происходит
Значит у Вас не совпадают все три условия. Попробуйте поменять на
Код:
;~ ...
While ($YSector <= 3 AND $Find <> 1) Or (Not $Alarm)
        $XSector = 0
        While ($XSector <= 3 AND $Find <> 1) Or (Not $Alarm)
;~ ...
 
Автор
G

Goldenx

Новичок
Сообщения
14
Репутация
0
madmasles

Заработало вот так

Код:
While ($YSector <= 3 AND $Find <> 1) Or ($Alarm)

Что уже настораживает

А насчет второй проблемы так и не понятно, почему с этой функцией не работает основное окно. Если выведу весь код, то меня метлой погонят думаю :whistle:
 

fortages

Новичок
Сообщения
81
Репутация
3
Помогите, пожалуйста.
Есть действие, которое нужно выполнять в цикле столько раз, сколько указал пользователь.
Но если пользователь ошибся или по каким-то другим причинам работу скрипта нужно остановить, то как это сделать?
То есть, если нажата кнопка - нужно прекратить цикл, выдать сообшение и завершить работу скрипта.
Если не нажата - продолжать.
Код:
#include <IE.au3>
#include <Date.au3>
#include <MsgBoxConstants.au3>

$hop = InputBox("Test", "Введите число")
$i = 1 

		do
			{действия}
		until $hop

 Msgbox(0,"Test",'Действие завершено успешно')

Пробовала так:
Код:
#include <IE.au3>
#include <Date.au3>
#include <MsgBoxConstants.au3>


HotKeySet("{F2}", "_Exit")
$hop = InputBox("Test", "Введите число")
$yi = 1  
 IF NOT ("{F2}") THEN
  
		do
			{действия}
		until $hop
ELSE 
 Msgbox(0,"Test",'Действие остановлено по требованию пользователя')
    Exit
ENDIF
Не работает это вариант

Еще вот так:
Код:
#include <IE.au3>
#include <Date.au3>
#include <MsgBoxConstants.au3>


HotKeySet("{F2}", "_Exit")
$hop = InputBox("Test", "Введите число")
$i = 1  
WHILE NOT ("{F2}")
  
		do
			{действия}
		until $hop
WEND

Msgbox(0,"Test",'Действие остановлено по требованию пользователя')
    Exit
Но в этом варианте тоже не работает - спрашивает, сколько раз повторить цикл и сразу выдает "действие остановлено", цикл не начинается

В чем вероятная ошибка? Помогите, пожалуйста, составить условие. Не понимаю, что неправильно.
63403778.gif
 

nowost

Знающий
Сообщения
178
Репутация
17
сделай хот кей, скажем вот так
Код:
$exit=True
HotKeySet ("^{pause}",  "_exit_loop")
 Func _exit_loop ()
    $exit=False
 EndFunc

 $i=0
  Do
	ToolTip($i,500,500,'')
	$i+=1
	Until $exit=False
 

fortages

Новичок
Сообщения
81
Репутация
3
nowost огромное спасибо, все получилось, благодарю. :-[

OffTopic:
А есть где-то, где можно посмотреть список/название всех клавиш? Просто у меня на ноутбуке есть кнопка Pause Break, а на компьютере у человека, которому пишу программу - Pause совмещена с правым Shift. Вот не знаю, как у него работать будет. Может, придется какой-нибудь Insert/Delete назначать.
 

fortages

Новичок
Сообщения
81
Репутация
3
InnI и вам спасибо, как все оказалось просто... :beer:
 
Верх