Что нового

Определить последнее действие @GUI_CtrlId или @HotKeyPressed

passwd

Новичок
Сообщения
30
Репутация
0
Здравствуйте. Как можно определить, какое действие было последним. Нажатие HotKey или нажитие кнопки GUI?
Я использую GUI с Opt("GUIOnEventMode", 1). И здесь действия кнопок дублируются HotKey. Они вызывают функцию и в зависимости от того, какая кнопка была нажата, с помощью @GUI_CtrlId определяет переменную, которую будет дальше использовать в функции.

Что-то на подобие такого:
Код:
Func terminateAllActions()
	$except = @GUI_CtrlId
	If $except == $Button1 Then $except = "none"
	If $except == $Label1 Then $except = 1
	If $except == $Label2 Then $except = 2
	If $except == $Label3 Then $except = 3
	If $except == $Label4 Then $except = 4
	If $except == $Label5 Then $except = 5
;some actions
EndFunc

Func terminateAllActionsHotKey()
	$except = @HotKeyPressed
	If $except == $Button1 Then $except = "none"
	If $except == $Label1 Then $except = 1
	If $except == $Label2 Then $except = 2
	If $except == $Label3 Then $except = 3
	If $except == $Label4 Then $except = 4
	If $except == $Label5 Then $except = 5
;some actions
EndFunc


Мне приходится сейчас использовать две отдельные функции для каждого действия(button pressed, hotkey pressed).
Возможно ли это определять внутри функции?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Сделайте функцию terminateAllActionsByExcept($except, $method = 'byHotKey')
Из terminateAllActions() вызывайте ее так: terminateAllActionsByExcept(@GUI_CtrlId, 'byGui')
а из terminateAllActionsHotKey() вызывайте так: terminateAllActionsByExcept(@HotKeyPressed, 'byHotKey')

Так все действия переместятся в одну функцию, вы избавитесь от дублирования, и сможете определять, что именно вызвало terminate
 
A

Alofa

Гость
А вообще логичней все это сделать примерно вот так:
Код:
#include <GUIConstantsEx.au3> 
Opt('GUIOnEventMode', 1)  ; Включает режим OnEvent

HotKeySet('{F1}', 'OKButton') ; Назначаем функции на горячие клавиши
HotKeySet('{ESC}', '_Exit')

$mainwindow = GUICreate('Привет мир', 200, 100)
$okbutton = GUICtrlCreateButton('OK', 70, 50, 60)

GUICtrlSetOnEvent($okbutton, 'OKButton') ; Назначаем функции для выполнения при нажатии элемента управления
GUISetOnEvent($GUI_EVENT_CLOSE, '_Exit') ; ...(те же самые, что и при HotKeySet)
GUISetState() 

While Sleep(1000)
WEnd 

Func OKButton()
  MsgBox(0, 'Событие GUI', 'Вы нажали OK!') 
EndFunc 

Func _Exit() 
  Exit 
EndFunc


И не надо запариваться с макросами.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
passwd
Посмотрите еще функцию
Код:
GUISetAccelerators
 
Верх