1

Тема: AHK: #IF в Class

А возможно разместить #IF в теле метода, указав условие как другой метод этого класса?

Class ClassName {
	Method1() {
		#IF this.Method2()
		1::MsgBox #IF work in class!!!
		#IF
	}
	Method2() {
		Return 1
	}
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

2 (изменено: stealzy, 2019-01-29 01:15:48)

Re: AHK: #IF в Class


Hotkey команда есть.
# и :: исполняются безусловно перед секцией автовыполнения.

3

Re: AHK: #IF в Class

И...

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

4

Re: AHK: #IF в Class

К чему будет относится this. ? С таким же успехом можно вне класса размещать.
Впрочем это все мои домыслы, будет интересно если я ошибаюсь.

5 (изменено: serzh82saratov, 2019-01-29 01:30:28)

Re: AHK: #IF в Class

ClassName объект, пусть он будет указан.


ClassName.Method1()

Class ClassName {
	Method1() {
		#IF ClassName.Method2() 
		#IF
		Hotkey, IF, ClassName.Method2()  
		Hotkey, 1, % ObjBindMethod(ClassName, "Method3"), On
		Hotkey, IF
	}
	Method2() {
		Return 1
	}
	Method3() {
		MsgBox #IF work in class!!!
	}
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

6

Re: AHK: #IF в Class

А зачем #IF внутри класса находится?

7

Re: AHK: #IF в Class

Хочется упаковать именно так. Если есть пример вне класса, то тоже интересно, но разницы быть не должно, это же директива.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

8

Re: AHK: #IF в Class

Разобрался.


ClassName.Method1()

Class ClassName {
	Method1() {
		#IF ClassName.Method2()
		#IF
		hMethod := ObjBindMethod(ClassName, "Method3")
		Hotkey, IF, ClassName.Method2()
		Hotkey, 1, % hMethod, On
		Hotkey, IF
	}
	Method2() { 
		Return 1
	}
	Method3() {
		MsgBox #IF work in class!!!
	}
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

9

Re: AHK: #IF в Class

ClassName.Method1()
x := 1
#IF x
#IF

Class ClassName {
	Method1() {
		Hotkey, IF, x  
		t := ObjBindMethod(this, "_Method3")
		Hotkey, 1, % t, On
		Hotkey, IF
	}
	Method2() {
		Return 1
	}
	_Method3() {
		MsgBox #IF work in class!!!
	}
}

10 (изменено: stealzy, 2019-01-29 01:46:25)

Re: AHK: #IF в Class

С SetTimer та же история, нужна переменная посредник.

serzh82saratov пишет:

Хочется упаковать именно так

Будет вызывать ложное ощущение что #IF использует локальный контекст, тогда как работает в глобальном. Или что исполняется по вызову метода.

11

Re: AHK: #IF в Class

stealzy пишет:

нужна переменная посредник.

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

12 (изменено: stealzy, 2019-01-29 02:32:51)

Re: AHK: #IF в Class

serzh82saratov пишет:

MsgBox #IF work in class!!!

#IF work in global!!!

13

Re: AHK: #IF в Class

Почему global, если в качестве условия выступает метод класса (8 пост). И это пример, на практике Method1 будет вызываться экземпляром.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

14

Re: AHK: #IF в Class

Вот именно, у экземпляра Method2() может возвращать иное значение, чем чем вызов этого же метода из глобального контекста (глобальный экземпляр, который не требует создания с помощью new).
Нужно было бы использовать #IF this.Method2(), а это невозможно потому что this не существует в глобальном контексте.

15

Re: AHK: #IF в Class

Так не надо его вызывать из глобального контекста. Method2 будет вызываться экземпляром по ссылке из ObjBindMethod, и тут уже легко понять кто вызывает этот метод.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

16 (изменено: serzh82saratov, 2019-01-29 10:57:46)

Re: AHK: #IF в Class

Запутался на ночь глядя. Вызываться по ссылке из ObjBindMethod будет конечно Method3. А Method2, да, он из глобального контекста.
С директивой понятно что ничего не поделаешь, но периодически раздражает что для Hotkey IF, в принципе требуется наличие директивы с таким же условием.
И в случае глобального контекста нельзя будет просто изменить название класса.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

17

Re: AHK: #IF в Class

Ну директива ведь не какая-то там магия, можно и самостоятельно вкл/откл хоткеи, вычисляя условие по хуку/таймеру/вызову метода.

18

Re: AHK: #IF в Class

Не очень понял что вы имели ввиду.
Вопрос в том, как задать условие для Hotkey в методе класса используя экземпляр, а не сам класс.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

19 (изменено: stealzy, 2019-01-31 21:59:05)

Re: AHK: #IF в Class

Не понял что вы не поняли. Если у вас есть условие, вы можете сами включать и отключать хоткеи, не отдавая это на откуп магии #If.

20

Re: AHK: #IF в Class

Это ещё более загадочно.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

21

Re: AHK: #IF в Class

serzh82saratov пишет:

С директивой понятно что ничего не поделаешь, но периодически раздражает

Что мешает реализовать ее механизм самостоятельно?

Или так тоже непонятно?

22

Re: AHK: #IF в Class

Не хочу использовать самодельный хук.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

23

Re: AHK: #IF в Class

Я про WH_KEYBOARD_LL в SetWindowsHookEx.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui