Что нового

Как правильно передать значение в функцию

Jotun

Новичок
Сообщения
31
Репутация
0
Доброго времени суток.

Суть вопроса такова. У меня в верхнем меню есть пункт "Options", при нажатии на него открывается дочернее окно. В этом окне есть кнопка $button01 установленная на вызов функции в которой есть FileOpenDialog .
Если я делаю так, то всё нормально:

Код:
GUICtrlSetOnEvent ( $button01, "OpenDialog" )
;-----------------------------------;
Func OpenDialog ( )
	$path01 = FileOpenDialog ("","","")
;-----------------------------------;


Если же я пытаюсь передать в функию какое либо значения, то диалог открытия файла выскакивает сразу же при нажатии на "Options"

Код:
GUICtrlSetOnEvent ( $button01, OpenDialog ( $x) )
;-----------------------------------;
Func OpenDialog ( $y )
	$path01 = FileOpenDialog ("","","")
;-----------------------------------;


или так:

Код:
GUICtrlSetOnEvent ( $button01, FileOpenDialog ("","","") )


Не мог бы кто-нибуть подсказать что я делаю не правильно?
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Jotun [?]
что я делаю не правильно?
Нарушаете синтаксис языка и не изучаете справку [box title=Из справки]Вы не можете зарегистрировать функцию, которая использует параметры
[/box]
 
Автор
J

Jotun

Новичок
Сообщения
31
Репутация
0
Если честно несовсем понятно, ведь как раз из справки я и брал пример:

Код:
$val = 10   
For $i = 1 To 10 
     $doubled = MyDouble($val) 
     MsgBox(0, "", $val & " - это удвоенное " & $doubled) 
     $val = $doubled 
Next 

Exit 


Func MyDouble($value) 
     $value = $value * 2 
     Return $value 
EndFunc
 
Автор
J

Jotun

Новичок
Сообщения
31
Репутация
0
Ясненько :smile:

У меня просто будет много таких кнопок, для открытия FileOpenDialog и взависимости от ID нажатой кнопки будет соответствующая запись пути к файлу в options.ini, а так-же в полях Input возле этих кнопок. Вот я и думаю как сделать, чтобы обойтись одной функцией и внутри неё определять какая из кнопок была нажата. Хотел сразу передавать функции какой-нибуть флаг для определения.
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Jotun [?]
внутри неё определять какая из кнопок была нажата
И это есть в справке:
При использовании вызова функций идентификатор элемента управления можно получить макросом @GUI_CtrlId.
Если нужен дескриптор окна или указатель элемента управления, то используйте @GUI_WinHandle или @GUI_CtrlHandle.

И даже пример в справке показывает, как пользоваться одной функцией.

Для вашего случая
Код:
GUICtrlSetOnEvent ( $button01, "OpenDialog" )
GUICtrlSetOnEvent ( $button02, "OpenDialog" )
GUICtrlSetOnEvent ( $button03, "OpenDialog" )

Func OpenDialog ( )
  Switch @GUI_CtrlId
    Case $button01
      $path01 = FileOpenDialog ("1","","")
    Case $button02
      $path02 = FileOpenDialog ("2","","")
    Case $button03
      $path03 = FileOpenDialog ("3","","")
  EndSwitch
EndFunc
 
Автор
J

Jotun

Новичок
Сообщения
31
Репутация
0
InnI сказал(а):
При использовании вызова функций идентификатор элемента управления можно получить макросом @GUI_CtrlId.
Если нужен дескриптор окна или указатель элемента управления, то используйте @GUI_WinHandle или @GUI_CtrlHandle.

И даже пример в справке показывает, как пользоваться одной функцией.

Для вашего случая
Код:
GUICtrlSetOnEvent ( $button01, "OpenDialog" )
GUICtrlSetOnEvent ( $button02, "OpenDialog" )
GUICtrlSetOnEvent ( $button03, "OpenDialog" )

Func OpenDialog ( )
  Switch @GUI_CtrlId
    Case $button01
      $path01 = FileOpenDialog ("1","","")
    Case $button02
      $path02 = FileOpenDialog ("2","","")
    Case $button03
      $path03 = FileOpenDialog ("3","","")
  EndSwitch
EndFunc

Да, правда ваша :smile: Всё замечательно работает.

п.с. Вы же понимаете, что даже прочитав справку от начала до конца - всего сразу не запомнишь) Я вот только что увидел что есть такая штука как Koda Form Designer - долго смеялся.
 
Верх