1

Тема: AHK: Деактивация строки ввода

Как сделать, чтобы при нажатии на любую область окна самого скрипта, строка ввода становилась неактивна?(т.е. не мигает палочка в строке ввода).
Пример кода:


Gui, add, edit, Center y75 x45
Gui, show, w200 h200
return
    
Guiclose:
ExitApp
AutoHotkey - 1.1.29.01

2 (изменено: qqlexa, 2018-08-11 01:59:05)

Re: AHK: Деактивация строки ввода

Если вы хотите заблокировать Edit почитайте http://www.script-coding.com/AutoHotkey … .html#edit.

Edit (редактируемое поле ввода)
ReadOnly: не позволяет пользователю изменять содержимое элемента управления. Тем не менее, текст можно прокручивать для просмотра, выделять и копировать в буфер.

3

Re: AHK: Деактивация строки ввода

qqlexa, если так, то заблокировать при нажатии на окно скрипта и снова разблокировать при нажатии на Edit.

AutoHotkey - 1.1.29.01

4

Re: AHK: Деактивация строки ввода

Пока окно активно, фокус обязательно будет на каком-нибудь элементе управления. Можно перевести фокус на какой-нибудь элемент-пустышку.

GUI, Add, Edit, Center y75 x45
GUI, Add, Picture, +HWNDdummy
GUI, Show, w200 h200

F3:: ControlFocus, , ahk_id %dummy%

Остаётся только отследить щелчок по свободной области окна.

5

Re: AHK: Деактивация строки ввода

ypppu, то, что нужно. Спасибо!
qqlexa, если Вы имели ввиду ReadOnly, то он не работает так, как мне нужно.
Спасибо за помощь!

AutoHotkey - 1.1.29.01

6

Re: AHK: Деактивация строки ввода

ypppu,плохо у меня получается отследить положение клика:



GUI, Add, Edit, Center y75 x45 w100 h20
GUI, Add, Picture, +HWNDdummy
GUI, Show, w200 h200

LButton::
{MouseGetPos,x,y
if  x!=45 or x!=46 or x!=47 or x!=48 or x!=49 or x!=50 or x!=51 or x!=52 or x!=53 or x!=54 or x!=55 or x!=56 or x!=57 or x!=58 or x!=59 or x!=60 or x!=61 or x!=62 or x!=63 or x!=64 or x!=65 or x!=66 or x!=67 or x!=68 or x!=69 or x!=70 or x!=71 or x!=72 or x!=73 or x!=74 or x!=75 or x!=76 or x!=77 or x!=78 or x!=79 or x!=80 or x!=81 or x!=82 or x!=83 or x!=84 or x!=85 or x!=86 or x!=87 or x!=88 or x!=89 or x!=90 or x!=91 or x!=92 or x!=93 or x!=94 or x!=95 or x!=96 or x!=97 or x!=98 or x!=99 or x!=100 or x!=101 or x!=102 or x!=103 or x!=104 or x!=105 or x!=106 or x!=107 or x!=108 or x!=109 or x!=110 or x!=111 or x!=112 or x!=113 or x!=114 or x!=115 or x!=116 or x!=117 or x!=118 or x!=119 or x!=120 or x!=121 or x!=122 or x!=123 or x!=124 or x!=125 or x!=126 or x!=127 or x!=128 or x!=129 or x!=130 or x!=131 or x!=132 or x!=133 or x!=134 or x!=135 or x!=136 or x!=137 or x!=138 or x!=139 or x!=140 or x!=141 or x!=142 or x!=143 or x!=144 or x!=145
	{
	if  y!=75 or y!=76 or y!=77 or y!=78 or y!=79 or y!=80 or y!=81 or y!=82 or y!=83 or y!=84 or y!=85 or y!=86 or y!=87 or y!=88 or y!=89 or y!=90 or y!=91 or y!=92 or y!=93 or y!=94 or y!=95
		{
		ControlFocus, , ahk_id %dummy%
		}
	else 
		Click
	}
}
return

F10::ExitApp

Guiclose:
ExitApp

Вычислил положения Edit1, и если клик произошёл не на нём, он фокусируется на пустышку, а если на нём... то должен был быть Click, но он не происходит.
Как же быть?

AutoHotkey - 1.1.29.01

7

Re: AHK: Деактивация строки ввода

Чтобы проверить все значения из интервала на равенство, не обязательно их все перечислять, достаточно узнать, находится ли искомое внутри него, указав для сравнения границы интервала, например:


x := 45
if (x > 44 && x < 146)
	MsgBox, x внутри диапазона
else
	MsgBox, x вне диапазона 

Полю Edit нужно присвоить переменную, тогда при клике в него "A_GuiControl" будет содержать её имя, а значит, если "A_GuiControl" не равно этому имени, а ещё лучше, пустое, то фокусироваться на пустышке, хендл которой нужно объявить глобальным, чтобы к нему можно было обращаться из тела функции DummyClick():


Global dummy
GUI, Add, Edit, Center y75 x45 w100 h20 vmyEdit
GUI, Add, Picture, +HWNDdummy
GUI, Add, Button, gNBTTN, knopka
GUI, Show, w200 h200
OnMessage(0x202, "DummyClick")
ControlFocus, , ahk_id %dummy%
Return
NBTTN:
	MsgBox,,Title, Knopka
Return
DummyClick() {
	if (A_GuiControl == "")
		ControlFocus, , ahk_id %dummy%
}

8

Re: AHK: Деактивация строки ввода

В вашем примере получится, что если будет Edit без переменной, то его нельзя будет активировать, то есть надо назначать переменные для всех контролов.

Может проще смотреть клик в окно или в заголовок, и в этом случае фокусировать пустышку.


GUI, +HWNDhGui
GUI, Add, Edit, Center w100 h20  
GUI, Add, Edit, Center xp y+5 wp hp     
GUI, Add, Edit, Center xp y+5 wp-22 hp
GUI, Add, Text, xp y+5 wp hp border
GUI, Add, Text, w0 h0 Hidden +HWNDhDummy
GUI, Add, Button, , knopka
GUI, Show 
OnMessage(0x201, "DummyClick")  ;	WM_LBUTTONDOWN 
OnMessage(0x202, "DummyClick")  ;	WM_LBUTTONUP 
OnMessage(0xA1, "DummyClick")  ;	WM_NCLBUTTONDOWN   
ControlFocus, , ahk_id %hDummy%
Return 

DummyClick(wParam, lParam, msg, hwnd) { 
	Global
	if (hwnd = hGui || msg = 0xA1)  ;	0xA1 := WM_NCLBUTTONDOWN
		ControlFocus, , ahk_id %hDummy% 
} 
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

9 (изменено: serzh82saratov, 2018-08-12 00:43:57)

Re: AHK: Деактивация строки ввода

Проще так:

Gui, Add, Edit, Center w100 h20  
Gui, Add, Edit, Center xp y+5 wp hp     
Gui, Add, Edit, Center xp y+5 wp-22 hp
Gui, Add, Text, xp y+5 wp hp border
Gui, Add, Text, w0 h0 Hidden +HWNDhDummy
Gui, Add, Button, , knopka
Gui, Show

for, k, v in {WM_LBUTTONDOWN:0x201,WM_LBUTTONUP:0x202,WM_NCLBUTTONDOWN:0xA1} 
	fn := Func("DummyClick"), OnMessage(v, fn) 
	
ControlFocus, , ahk_id %hDummy%
Return 

DummyClick(wParam, lParam, msg, hwnd) { 
	Global
	if !DllCall("GetParent", Ptr, hwnd)
		ControlFocus, , ahk_id %hDummy%
	Else
		ControlFocus, , ahk_id %hwnd%
} 

Всё таки надо добавить Else ControlFocus, , ahk_id %hwnd%, так как Static может иметь метку перехода, и быть видимым для кликов, но не перехватывать фокус.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

10

Re: AHK: Деактивация строки ввода

Всем большое спасибо за ответы. Всё получилось!

AutoHotkey - 1.1.29.01

11

Re: AHK: Деактивация строки ввода

А можно узнать, почему у вас возник такой вопрос?

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

12 (изменено: Gutalin, 2018-08-11 17:40:07)

Re: AHK: Деактивация строки ввода

serzh82saratov, используя Ваш код, возникла проблема со сменой языка в окне скрипта. Вот надо мне не "я", a "z", или наоборот, а изменить нельзя т.к. строка ввода остаётся активной и shift+alt перехватывает скрипт.

AutoHotkey - 1.1.29.01

13

Re: AHK: Деактивация строки ввода

Кстати самому это не нравилось, добавил опционально, так как это не стандартное поведение. Ищите в описании "KillFocus".

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

14

Re: AHK: Деактивация строки ввода

serzh82saratov, как бы я не вставлял

Hotkey_Arr("KillFocus", true)

перед созданием контроллов, у меня это не работает. Или я что-то не так делаю?
Беру пример из поста, после первого return вставляю библиотеку и перед созданием edit'ов вставляю эту строку

Hotkey_Arr("KillFocus", true)
Gui, Add, Edit, Center w300 r1 hwndhMyHotkey1 gWriteIni, % Hotkey_Read("MyHotkey1", "Section", PathIni)
Gui, Add, Edit, Center wp y+10 r1 hwndhMyHotkey2 gWriteIni, % Hotkey_Read("MyHotkey2", "Section", PathIni)
AutoHotkey - 1.1.29.01

15

Re: AHK: Деактивация строки ввода

Да, неправильно. Задайте вопрос по ссылке "Тема для обсуждения" из того топика, а то здесь уже совсем оффтоп.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.29.01 (Unicode 32-bit).

16

Re: AHK: Деактивация строки ввода

ypppu пишет:

Пока окно активно, фокус обязательно будет на каком-нибудь элементе управления

А в хроме не так.
Окно активно, контрол присутствует, но  фокус пустой.
Видимо зависит от того, в каком фреймворке создавать.

17

Re: AHK: Деактивация строки ввода

Я говорил про "любую область окна самого скрипта". В GUI используются стандартные элементы управления, в хроме наверно какие-то свои.

18 (изменено: Malcev, 2018-08-18 19:44:10)

Re: AHK: Деактивация строки ввода

Со стандартными, при создании окна тоже можно убрать фокус:

GUI +0x10000000 ; WS_VISIBLE
Gui, add, edit, Center y75 x45
Gui, show, w200 h200
return

Полагаю, что можно провернуть это дело и по горячей кнопке.

19

Re: AHK: Деактивация строки ввода

Проще так:

Gui, Show, w200 h200
Gui, Add, Edit
return

Но, имхо, это не вариант.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg