Что нового

Значение по умолчанию в собственной функции

Dreugh

Новичок
Сообщения
3
Репутация
0
Есть функция:
Код:
Func Coord($X1=310, $Y1=960, $X2=105, $Y2=505, $P1=50, $P2=50)
      For $i = $X1 to $Y1 Step $P1
		 For $j = $X2 to $Y2 Step $P2
                 Next
      Next
EndFunc

Не могу найти ошибку, но переменные со значениями по умолчанию не создаются совсем. Кто поможет найти ошибку?
5588384.jpg
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Dreugh [?]
Не могу найти ошибку
Так у меня нет ошибки.
Код:
Coord()

Func Coord($X1 = 310, $Y1 = 960, $X2 = 105, $Y2 = 505, $P1 = 50, $P2 = 50)
	For $i = $X1 To $Y1 Step $P1
		For $j = $X2 To $Y2 Step $P2
			ConsoleWrite($i & 'x' & $j & @LF)
		Next
	Next
EndFunc   ;==>Coord

Вы покажите как вы ее используете.
 
Автор
D

Dreugh

Новичок
Сообщения
3
Репутация
0
madmasles, большое спасибо. Удалось сократить место ошибки. Весь код привести не могу, так как вряд ли будет легко его понять даже не смотря на комментарии, но это и не нужно. Вот пример такого же кода (как у меня):
Код:
HotKeySet("l", "Coord")	
HotKeySet("{ESC}", "Terminate")

While 1
   Sleep(100)
WEnd


Func Coord($X1 = 310, $Y1 = 960, $X2 = 105, $Y2 = 505, $P1 = 50, $P2 = 50)
    MsgBox (0, $X1, $Y1)
	MsgBox (0, $X2, $Y2)
	MsgBox (0, $P1, $P2)
 EndFunc   
 
 Func Terminate()
    Exit 0
 EndFunc


Так же хотелось бы добавить. Что вызов этот для примера. Если вызывать эту функцию из другой с синтаксисом:
Код:
Coord()

То функция отрабатывает без ошибки, но и не делает то, что требуется. Если же в циклах задать эти же значения:
Код:
Func Coord()
    For $i = 310 To 960 Step 50
        For $j = 105 To 505 Step 50
            ...
        Next
    Next
EndFunc

то функция отрабатывает идеально. А нужно именно в цикле менять для рекурсивного вызова с изменившимися значениям(То есть функция выполняется первый раз и находит значение, потом вызывает себя до тех пор пока результат не будет соответствовать заданной точности. Можно конечно оставить как есть, но экономия ресурсов/времени лишней не бывает)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Dreugh,
Из справки по HotKeySet():
Вызываемая функция не может получать параметры. Они будут проигнорированы.
В Вашем случае так будет работать:
Код:
HotKeySet("1", "Coord");единица
HotKeySet("{ESC}", "Terminate")

While 1
	Sleep(100)
WEnd

Func Coord()
	Local $X1 = 310, $Y1 = 960, $X2 = 105, $Y2 = 505, $P1 = 50, $P2 = 50
	MsgBox(0, $X1, $Y1)
	MsgBox(0, $X2, $Y2)
	MsgBox(0, $P1, $P2)
EndFunc   ;==>Coord

Func Terminate()
	Exit 0
EndFunc   ;==>Terminate
Или так, с условием:
Код:
Global $fSomething
HotKeySet("1", "Coord");единица
HotKeySet("{ESC}", "Terminate")

While 1
	Sleep(100)
	If @SEC > 30 Then
		$fSomething = True
	Else
		$fSomething = False
	EndIf
WEnd

Func Coord()
	Local $X1 = 310, $Y1 = 960, $X2 = 105, $Y2 = 505, $P1 = 50, $P2 = 50
	If $fSomething Then
		$X1 += 10
		$Y1 += 10
		$X2 += 10
		$Y2 += 10
		$P1 += 10
		$P2 += 10
	EndIf
	ConsoleWrite($fSomething & @LF)
	MsgBox(0, $X1, $Y1)
	MsgBox(0, $X2, $Y2)
	MsgBox(0, $P1, $P2)
EndFunc   ;==>Coord

Func Terminate()
	Exit 0
EndFunc   ;==>Terminate
 
Автор
D

Dreugh

Новичок
Сообщения
3
Репутация
0
madmasles, ещё раз спасибо.
Сработал вот этот код:
Код:
HotKeySet("1", "Coord2")	
HotKeySet("{ESC}", "Terminate")

While 1
   Sleep(100)
WEnd


Func Coord($X1 = 310, $Y1 = 960, $X2 = 105, $Y2 = 505, $P1 = 50, $P2 = 50)
    MsgBox (0, $X1, $Y1)
	MsgBox (0, $X2, $Y2)
	MsgBox (0, $P1, $P2)
 EndFunc   ;==>Coord
 
 Func Coord2()
    Coord()
 EndFunc   ;==>Coord2
 
 Func Terminate()
    Exit 0
 EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Dreugh,
Еще так можно.
Код:
HotKeySet("1", "Coord");единица
HotKeySet("{ESC}", "Terminate")

While 1
	Sleep(100)
WEnd

Func Coord()
	Local $X1 = 310, $Y1 = 960, $X2 = 105, $Y2 = 505, $P1 = 50, $P2 = 50
	__GetX_Y_P($X1, $Y1, $X2, $Y2, $P1, $P2)
	ConsoleWrite('$X1, $Y1: ' & $X1 & 'x' & $Y1 & @LF)
	ConsoleWrite('$X2, $Y2: ' & $X2 & 'x' & $Y2 & @LF)
	ConsoleWrite('$P1, $P2: ' & $P1 & 'x' & $P1 & @LF)
	ConsoleWrite('---' & @LF)
EndFunc   ;==>Coord

Func __GetX_Y_P(ByRef $X1, ByRef $Y1, ByRef $X2, ByRef $Y2, ByRef $P1, ByRef $P2)
	Switch @SEC ;или любые другие, нужные Вам условия
		Case 10 To 19
			$X1 += 5
			$Y1 += 5
			$X2 += 5
			$Y2 += 5
			$P1 += 5
			$P2 += 5
		Case 20 To 39
			$X1 += 10
			$Y1 += 10
			$X2 += 10
			$Y2 += 10
			$P1 += 10
			$P2 += 10
		Case 40 To 59
			$X1 -= 10
			$Y1 -= 10
			$X2 -= 10
			$Y2 -= 10
			$P1 -= 10
			$P2 -= 10
	EndSwitch
EndFunc   ;==>__GetX_Y_P

Func Terminate()
	Exit 0
EndFunc   ;==>Terminate
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,487
Ох как всё сложно....

Ещё можно вот так поизвращаться:

Код:
HotKeySet("1", "Coord")
HotKeySet("{ESC}", "Terminate")

While 1
   Sleep(100)
WEnd

Func Coord($X1 = 310, $Y1 = 960, $X2 = 105, $Y2 = 505, $P1 = 50, $P2 = 50)
	If @NumParams = 0 Then
		$sTmp = Assign('X1', 310) & Assign('Y1', 960) & Assign('X2', 105) & Assign('Y2', 505) & Assign('P1', 50) & Assign('P2', 50)
	EndIf
	
	MsgBox(0, $X1, $Y1)
	MsgBox(0, $X2, $Y2)
	MsgBox(0, $P1, $P2)
 EndFunc
 
 Func Terminate()
	Exit 0
 EndFunc


:laugh:


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

Dreugh [?]
Сработал вот этот код
Это скорее всего самый правильный выход из положения.
 
Верх