|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Вызывать функции с параметрами |
|
[решено] Вызывать функции с параметрами
|
Новый участник Сообщения: 37 |
Профиль | Отправить PM | Цитировать
Подскажите функцию, которая может вызывать другие функции с параметрами.
Я так понял, что GUICtrlSetOnEvent не может вызывать функции с параметрами, правильно? Вот пример. Т.е., мне надо с индификатора кнопки вызвать функцию с нужными мне параметрами. |
|
Отправлено: 20:40, 05-06-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Атос:
Function GUICtrlSetOnEvent: Цитата:
|
||
Отправлено: 00:13, 06-06-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Атос:
Скрытый текст
#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) Local $bFormShow = true $MyForm = GUICreate("My Form", 588, 85, 192, 166) GUISetOnEvent($GUI_EVENT_CLOSE, "MyFormClose") $Edit = GUICtrlCreateInput("Edit", 8, 8, 569, 21) $ButtonPlay = GUICtrlCreateButton("Play", 376, 40, 97, 33) GUICtrlSetOnEvent($ButtonPlay, "ButtonPlayClick") $ButtonCancel = GUICtrlCreateButton("Cancel", 480, 40, 97, 33) GUICtrlSetOnEvent($ButtonCancel, "ButtonCancelClick") GUICtrlSetData($Edit, "C:\Enigma--Following.The.Sun.mp3") GUISetState(@SW_SHOW) While $bFormShow Sleep(100) WEnd Exit(0) Func ButtonPlayClick() Local $sValue = GUICtrlRead($Edit) ShellExecute($sValue) EndFunc Func ButtonCancelClick() $bFormShow = false EndFunc Func MyFormClose() $bFormShow = false EndFunc Выбор конкретной реализации зависит от конкретной задачи, которую Вы не озвучили. |
|
Отправлено: 00:41, 06-06-2017 | #3 |
Новый участник Сообщения: 37
|
Профиль | Отправить PM | Цитировать Iska, спасибо.
Попробую сформулировать задачу более конкретно. У меня есть цикл For To Next. StopValue - у меня будет двумерным массивом (Вернее, количеством элементов этого массива.). Внутри этого цикла есть идентификатор кнопки. С каждым новым циклом он меняется. Будет вызываться одна и та же функция, но в зависимости от этого идентификатора, параметры будут меняться. Соответственно, я не могу точно получить событие через Switch GUIGetMsg() EndSwitch. В этом вся трудность. Если бы, хотя-бы GUICtrlSetOnEvent($p, "_a1('Bavaria')") работала, то вся проблема бы ушла. Если использовать GUICtrlRead($p) вне цикла, то я буду всегда получать последний элемент, а мне нужен конкретный, в зависимости от номера цикла. Получается замкнутый круг. Вызов вне цикла - результат последний цикл. Вызов внутри цикла - есть все динамические переменные, но невозможно вызвать функцию с конкретными параметрами. Opt("GUIOnEventMode", 1) GUICreate("111") $p = 0 For $i = 0 To 7 $p = $p + $i $p = GUICtrlCreateButton('Start', 15, 20, 160, 22, 0x0100) GUICtrlSetOnEvent($p, "_a1('Bavaria')") ; GUICtrlSetOnEvent($p, "_a1") Next GUISetState() GUISetOnEvent(-3, "_CLOSE") While 1 Sleep(1000) WEnd ; Func _a1() Func _a1($a) ; MsgBox(0, "title", '1111') MsgBox(0, "title", $a) EndFunc Func _CLOSE() Exit EndFunc |
Последний раз редактировалось Атос, 06-06-2017 в 10:05. Отправлено: 09:29, 06-06-2017 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Атос, я просил озвучить задачу, а не повторно изложить выбранное Вами решение.
Вы хотите нарисовать кучу кнопок, обработка нажатия каждой из которых будет привязана к одной и той же функции, так? При этом внутри этой функции обработки события Вы хотите как-то распознавать от какой кнопки пришло нажатие и, в зависимости от этого, выполнять то или иное действие — я правильно понимаю? |
|
Отправлено: 13:59, 06-06-2017 | #5 |
Новый участник Сообщения: 37
|
Профиль | Отправить PM | Цитировать Iska, да, задача была именно такая. Мне уже показали решение.
Поэтому, задача снимается. Спасибо. |
Отправлено: 15:42, 06-06-2017 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Берёте указанную в описании самой функции GUISetOnEvent() встроенную переменную @GUI_CtrlId и пользуете. А там хоть через привязку к кнопкам, хоть через массив, хоть через Switch:
Скрытый текст
#include <MsgBoxConstants.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) Local $bFormShow = true Local $i $MyForm = GUICreate("My Form", 258, 240) GUISetOnEvent($GUI_EVENT_CLOSE, "MyFormClose") For $i = 0 To 5 GUICtrlCreateButton("Play " & $i, 20, 20 + $i * 33, 97, 33) GUICtrlSetOnEvent(-1, "ButtonPlayClick") Next $ButtonCancel = GUICtrlCreateButton("Cancel", 140, 20, 97, 33) GUICtrlSetOnEvent($ButtonCancel, "ButtonCancelClick") GUISetState(@SW_SHOW) While $bFormShow Sleep(100) WEnd Exit(0) Func ButtonPlayClick() MsgBox($IDOK, "", GUICtrlRead(@GUI_CtrlId)) Switch GUICtrlRead(@GUI_CtrlId) Case "Play 0" Case "Play 1" Case "Play 2" Case "Play 3" Case "Play 4" Case "Play 5" EndSwitch EndFunc Func ButtonCancelClick() $bFormShow = false EndFunc Func MyFormClose() $bFormShow = false EndFunc |
Последний раз редактировалось Iska, 06-06-2017 в 21:02. Причина: Описка Отправлено: 16:29, 06-06-2017 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
RDP/Citrix/Term - RDP с параметрами | Universal32 | Сетевые технологии | 1 | 07-10-2010 08:47 | |
HotKeySet и вызов функции с параметрами | r35p3ct | AutoIt | 4 | 24-09-2009 16:28 | |
Вирусы не дают редактировать реестр и вызывать диспетчер задач | Magistr_Yoda | Лечение систем от вредоносных программ | 3 | 31-03-2009 08:59 | |
Проблема с параметрами видео | slonikdva | Непонятные проблемы с Железом | 4 | 24-03-2008 14:24 | |
Прога с параметрами | Nigon | Программирование и базы данных | 7 | 19-05-2003 18:22 |
|