1

Тема: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

Как запретить ввод ПРОБЕЛА в поле для ввода?
В том числе и чтобы при Ctrl+V все пробелы, что были в предложении просто не проставлялись.
Те при копировании сообщения "1 2 ы 3 5 6", вставилось "12ы356"

Пример кода


#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn  ; Enable warnings to assist with detecting common errors.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
show := 1 

gui_name := "Main" 
Gui, %gui_name%: +AlwaysOnTop 
Gui, %gui_name%:Add, Edit, x5 y5 w400 h400 vEdit 
Gui, %gui_name%:Show 

SetTimer, CheckEdit, 50 
return 

CheckEdit: 
Gui, %gui_name%:Submit, NoHide 
if Edit contains gg 
{ 
GuiControl, %gui_name%:, Edit 
MsgBox, % "gg" 
} 
return 

Для чего это нужно: если в строке

if Edit contains gg

а именно к ключ.слову добавить ещё слово через пробел

if Edit contains gg as

то введя в поле для ввода as функция сработает, хотя gg не было написано.

Возможно изменить код таким образом, чтобы функция срабатывала лишь при вводе полного предложения будет легче чем запретить пробел...
Это не точно!

2

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

MirchikAhtung пишет:

Для чего это нужно: если в строке

if Edit contains gg

а именно к ключ.слову добавить ещё слово через пробел

if Edit contains gg as

то введя в поле для ввода as функция сработает, хотя gg не было написано.

Это не так:

var := "as"
if var contains gg as
   MsgBox, var contains "gg as"
else
   MsgBox, var doesn't contain "gg as"

Мало что понятно. Зачем запрещать пробел, если ложное срабатывание при вводе "as"?
Объясните лучше не что не должно быть в поле Edit, а что должно быть.

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

3

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

MirchikAhtung пишет:

SetTimer, CheckEdit, 50

Gui Add, Edit, gCheckEdit hwndhEdit
...
CheckEdit:
ControlGetText text,, ahk_id %hEdit%
...
ControlSetText

4

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

teadrinker
Нужно чтобы функция срабатывала лишь тогда, когда в поле для ввода написано gg aa, а не ИЛИ аа ИЛИ gg.
Только вместе. Чтобы срабатывало когда они написаны только вместе.

5

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

stealzy Заменить с конца кода на

Gui Add, Edit, gCheckEdit hwndhEdit
...
CheckEdit:
ControlGetText text,, ahk_id %hEdit%
...
ControlSetText

по

SetTimer, CheckEdit, 50 
return 

?
В итоге что выйдет?

6

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

MirchikAhtung пишет:

teadrinker
Нужно чтобы функция срабатывала лишь тогда, когда в поле для ввода написано gg aa, а не ИЛИ аа ИЛИ gg.
Только вместе. Чтобы срабатывало когда они написаны только вместе.

А зачем столько раз повторять одно и то же? Намекаете на моё слабоумие, или на что?

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

7 (изменено: MirchikAhtung, 2018-04-13 18:16:09)

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

teadrinker Вовсе нет ;-)
В поле должно быть gg ss
msgbox 1
Либо если в поле gg s
msgbox 2
Либо если в поле ss g
msgbox 3

8

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

У вас условия как-то слишком часто меняются.

values := ["gg ss", "gg s", "ss g"]

Gui, Add, Edit, vEdit gWatchEdit
Gui, Show
Return

WatchEdit()  {
   global values
   GuiControlGet, Edit
   for k, v in values
      if RegExMatch(Edit, "^\Q" . v . "\E$") && i := k
         break
   if i
      MsgBox, % i
}

Всё равно непонятно:

MirchikAhtung пишет:

В поле должно быть gg ss

у вас тут явно пробел между gg и ss. Если его запретить, как его вводить тогда?

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

9

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

teadrinker  А вот тут по-подробнее.
В самой теме я написал Либо запретить пробел, Либо сделать так, как выше написал.
Если запретить пробел, то там будет чуть другой способ ввода. Просто чтобы ПРОБЕЛ не считывался, те не работал при вводе.

10

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

MirchikAhtung пишет:

Либо сделать так, как выше написал.

А мой последний код не так работает?

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

11 (изменено: MirchikAhtung, 2018-04-13 22:17:17)

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

teadrinker Да, отлично работает, лишь два вопроса:
1. Можно ли поставить задержку, допустим 3 секунды, после которых срабатывают мсгбоксы, те функции.
2. Я хотел заменить мсгбоксы на другие функции и брал их лишь в пример, а в этом коде выскакивает мсгбокс по номерации ключ.слова.
Можно как-то разделить, чтобы под "gg ss" была функция " Exit:app ", под " gg s " "MsgBox привет " и.т.д. ?

12 (изменено: teadrinker, 2018-04-14 01:00:47)

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

1. Можно выполнить действие по таймеру:

values := ["gg ss", "gg s", "ss g"]

Gui, Add, Edit, vEdit gWatchEdit
Gui, Show
Return

WatchEdit()  {
   global values
   GuiControlGet, Edit
   for k, v in values
      if RegExMatch(Edit, "^\Q" . v . "\E$") && i := k
         break
      
   if i  {
      timer := Func("Action").Bind(i)
      SetTimer, % timer, -3000
   }
}

Action(i)  {
   MsgBox, % i
}

2. Можно заранее прописать для каждого значения свою функцию, которая будет выполняться:

values := [ {input: "gg ss", function: Func("FirstFunc" )}
          , {input: "gg s" , function: Func("SecondFunc")}
          , {input: "ss g" , function: Func("ThirdFunc" )} ] 

Gui, Add, Edit, vEdit gWatchEdit
Gui, Show
Return

WatchEdit()  {
   global values
   GuiControlGet, Edit
   for k, v in values
      if RegExMatch(Edit, "^\Q" . v.input . "\E$") && i := k
         break
      
   if i
      values[i].function.Call()
}

FirstFunc()  {
   ExitApp
}

SecondFunc()  {
   MsgBox, "gg s"
}

ThirdFunc()  {
   MsgBox, "ss g"
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

13

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

teadrinker

values := [ {input: "gg ss", function: Func("FirstFunc" )}
          , {input: "gg s" , function: Func("SecondFunc")}
          , {input: "ss g" , function: Func("ThirdFunc" )} ] 

Gui, Add, Edit, vEdit gWatchEdit
Gui, Show
Return

WatchEdit()  {
   global values
   GuiControlGet, Edit
   for k, v in values
      if RegExMatch(Edit, "^\Q" . v.input . "\E$") && i := k
         break
      
   if i
      values[i].function.Call()
}

   if i  {
      timer := Func("FirstFunc").Bind(i)
      SetTimer, % timer, -3000
   }

FirstFunc()  {
   ExitApp
}

SecondFunc()  {
   MsgBox, "gg s"
}

ThirdFunc()  {
   MsgBox, "ss g"
}values := [ {input: "gg ss", function: Func("FirstFunc" )}
          , {input: "gg s" , function: Func("SecondFunc")}
          , {input: "ss g" , function: Func("ThirdFunc" )} ] 

Gui, Add, Edit, vEdit gWatchEdit
Gui, Show
Return

WatchEdit()  {
   global values
   GuiControlGet, Edit
   for k, v in values
      if RegExMatch(Edit, "^\Q" . v.input . "\E$") && i := k
         break
      
   if i
      values[i].function.Call()
}

[b]   if i  {
      timer := Func("FirstFunc").Bind(i)
      SetTimer, % timer, -3000
   }[/b]

FirstFunc([b]i[/b])  {
   ExitApp
}

SecondFunc()  {
   MsgBox, "gg s"
}

ThirdFunc()  {
   MsgBox, "ss g"
}

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

14 (изменено: MirchikAhtung, 2018-04-14 19:29:01)

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

teadrinker
Добавил задержку, но вписав gg s, gg ss либо ss g - итог 1, выскакивает msgbox gg s

values := [ {input: "gg ss", function: Func("FirstFunc" )}
          , {input: "gg s" , function: Func("SecondFunc")}
          , {input: "ss g" , function: Func("ThirdFunc" )} ] 

Gui, Add, Edit, vEdit gWatchEdit
Gui, Show
Return

WatchEdit()  {
   global values
   GuiControlGet, Edit
   for k, v in values
      if RegExMatch(Edit, "^\Q" . v.input . "\E$") && i := k
         break
      
   if i  {
      timer := Func("SecondFunc").Bind(i)
      SetTimer, % timer, -3000
   }
      else if i  {
      timer := Func("ThirdFunc").Bind(i)
      SetTimer, % timer, -5000
   }
         else if i  {
      timer := Func("Firstfunc").Bind(i)
      SetTimer, % timer, -10000
   }
}

FirstFunc()  {
   ExitApp
}

SecondFunc()  {
   MsgBox, "gg s"
}

ThirdFunc()  {
   MsgBox, "ss g"
}

Где я ошибся?

15

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

MirchikAhtung пишет:

Где я ошибся?

   if i  {
      timer := Func("SecondFunc").Bind(i)
      SetTimer, % timer, -3000
   }
      else if i  {
      timer := Func("ThirdFunc").Bind(i)
      SetTimer, % timer, -5000
   }
         else if i  {
      timer := Func("Firstfunc").Bind(i)
      SetTimer, % timer, -10000
   }

Можете на словах объяснить, что у вас вот эта конструкция означает?

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

16

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

teadrinker Это я попробывал поставить таймер на все 3 функции :-(

17

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

MirchikAhtung, рукалицо.jpeg

values := [ {input: "gg ss", function: Func("FirstFunc" ), delay: 3000}
          , {input: "gg s" , function: Func("SecondFunc"), delay: 3000}
          , {input: "ss g" , function: Func("ThirdFunc" ), delay: 3000} ] 

Gui, Add, Edit, vEdit gWatchEdit
Gui, Show
Return

WatchEdit()  {
   global values
   GuiControlGet, Edit
   for k, v in values
      if RegExMatch(Edit, "^\Q" . v.input . "\E$") && i := k
         break
      
   if i  {
      obj := values[i]
      if !obj.delay
         obj.function.Call()
      else  {
         timer := obj.function
         SetTimer, % timer, % "-" . obj.delay
      }
   }
}

FirstFunc()  {
   ExitApp
}

SecondFunc()  {
   MsgBox, "gg s"
}

ThirdFunc()  {
   MsgBox, "ss g"
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

18

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

teadrinker
Вдвойне рукалицо.
GuiControl, vEdit в функции после msgbox не затирает поле для ввода, мои знания в AHK очень скудны, и помимо этого ничего не лезет в голову..


SecondFunc()  {
   MsgBox, "gg s"
GuiControl,, vEdit
}

19

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

MirchikAhtung пишет:
GuiControl,, vEdit

Ассоциированная переменная не vEdit, а просто Edit. v — это название опции.

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

20

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

teadrinker пишет:

Ассоциированная переменная не vEdit, а просто Edit. v — это название опции.

GuiControl,, Edit 


Не зачищает строку для ввода.
Использую последний код, что ты мне скинул.

21

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

У меня зачищает.

Gui, Add, Edit, vEdit w150, Текст
Gui, Show
Sleep, 1000
GuiControl,, Edit
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

22

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

teadrinker пишет:

У меня зачищает.

Gui, Add, Edit, vEdit w150, Текст
Gui, Show
Sleep, 1000
GuiControl,, Edit

Вот моё начало, я не понимаю что тут всё портит..

show := 1 

values := [ {input: "gg ss", function: Func("FirstFunc" ), delay: 300}
          , {input: "gg s" , function: Func("SecondFunc"), delay: 300}
          , {input: "ss g" , function: Func("ThirdFunc" ), delay: 300} ] 
gui_name := "Main" 
Gui, %gui_name%: +AlwaysOnTop 
Gui, %gui_name%:Add, Edit, vEdit gWatchEdit w150, Текст
Gui, %gui_name%:Show
GuiControl,, %gui_name%:Edit
Return

23

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

MirchikAhtung пишет:
GuiControl,, %gui_name%:Edit

%gui_name% не в том месте. Читайте хелп внимательнее.

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

24

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

teadrinker
Про шерстил с конца до середины https://autohotkey.com/docs/commands/GuiControl.htm
Я себе пару нервных клеток убил, но результата не дало.
Напишите прямой ответ! Захочу - не найду.

25 (изменено: teadrinker, 2018-04-16 01:05:52)

Re: AHK: Как запретить ввод ПРОБЕЛА в поле для ввода?

GuiControl, %gui_name%:, Edit

Ссылка на пример в хэлпе.

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