1 (изменено: 1srafel, 2025-04-03 05:05:22)

Тема: AHK: Gui для ввода цифр с отбивкой разрядов

Есть ли возможность при вводе чисел в окно GUI - разряды отделять пробелом/отступом, как это сделано во встроенном калькуляторе? Напр.: 8 201 794.

Gui, +AlwaysOnTop hwndMainWin
Gui, Font, s12 w400, Tahoma
Gui, Add, Edit, x+0 yp4 w252 h24 +Center +Number vToggleLen
Gui, Show, Center w400 h100, %script_name%
return

2 (изменено: 1srafel, 2025-04-03 05:11:22)

Re: AHK: Gui для ввода цифр с отбивкой разрядов

По ссылке есть решение для точки, но с пробелом не срабатывает - ?pid=126480#p126480.

3

Re: AHK: Gui для ввода цифр с отбивкой разрядов

Все-таки, работает -

Gui, Add, Edit, w150 number hwndhEdit
obj := {h: hEdit}
obj.f := fn := Func("SetDots").Bind(obj)
GuiControl, +g, %hEdit%, % fn
Gui, Show
Return

SetDots(obj)  {
   GuiControl, -g, % obj.h
   GuiControlGet, num,, % obj.h
   num := RegExReplace(num, " ")
   GuiControl,, % obj.h, % RegExReplace(num, "\d(?=(\d{3})+$)", "$0 ")
   Send {End}
   fn := obj.f
   GuiControl, +g, % obj.h, % fn
}

4

Re: AHK: Gui для ввода цифр с отбивкой разрядов

Есть ли аналогичная "+Number" опция, для задания лимита цифр, которые можно ввести в Gui-окно - например, не более 18 цифр?

5 (изменено: 1srafel, 2025-04-03 14:48:20)

Re: AHK: Gui для ввода цифр с отбивкой разрядов

Как передать введенное число в MsgBox по нажатии кнопки OK?

Gui, +AlwaysOnTop hwndMainWin
Gui, Font, s13 w400, Tahoma
Gui, Add, Edit, w240 number hwndhEdit
Gui, Add, Button,  default, OK
obj := {h: hEdit}
obj.f := fn := Func("SetDots").Bind(obj)
GuiControl, +g, %hEdit%, % fn
Gui, Show
Return

SetDots(obj)  {
   GuiControl, -g, % obj.h
   GuiControlGet, num,, % obj.h
   num := RegExReplace(num, " ")
   GuiControl,, % obj.h, % RegExReplace(num, "\d(?=(\d{3})+$)", "$0 ")
   Send {End}
   fn := obj.f
   GuiControl, +g, % obj.h, % fn
}
GuiClose:
   ExitApp

ButtonOK:
   Gui, Submit

   MsgBox, %hEdit%

   Pause
Return

6 (изменено: Alectric, 2025-04-03 18:24:39)

Re: AHK: Gui для ввода цифр с отбивкой разрядов

Наверно так:


...
Gui, Add, Edit, w240 number vnumber hwndhEdit
...
ButtonOK:
  Gui, Submit
  MsgBox, %number%
...
Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

7 (изменено: 1srafel, 2025-04-03 20:45:24)

Re: AHK: Gui для ввода цифр с отбивкой разрядов

Alectric, спасибо!

1srafel пишет:

опция, для задания лимита цифр, которые можно ввести в Gui-окно - например, не более 18 цифр?

Gui, Add, Edit, Limit18

8

Re: AHK: Gui для ввода цифр с отбивкой разрядов

Следующий код при вводе разбивает числовые разряды пробелами и допускает ввод только цифр. Как перехватить момент вставки числа с пробелами из буфера обмена, чтобы предварительно удалить пробелы?

Gui, +AlwaysOnTop hwndMainWin
Gui, Font, s13 w400, Tahoma
Gui, Add, Edit, w240 number hwndhEdit
Gui, Add, Button,  default, OK
obj := {h: hEdit}
obj.f := fn := Func("SetDots").Bind(obj)
GuiControl, +g, %hEdit%, % fn
Gui, Show
Return

SetDots(obj)  {
   GuiControl, -g, % obj.h
   GuiControlGet, num,, % obj.h
   num := RegExReplace(num, " ")
   GuiControl,, % obj.h, % RegExReplace(num, "\d(?=(\d{3})+$)", "$0 ")
   Send {End}
   fn := obj.f
   GuiControl, +g, % obj.h, % fn
}

9

Re: AHK: Gui для ввода цифр с отбивкой разрядов

1srafel Для начала разберите каждую строку, что для чего. Тогда ясно станет всё. Если вы не понимаете элементарного, толку указывать что-то?

Win11x64, AHK v1.1.37.01 (Unicode 64-bit), AHK v2.0.17| AHK-Wiki | Переменные и выражения | RegEx101

10

Re: AHK: Gui для ввода цифр с отбивкой разрядов

__Михаил__ Я примерно догадываюсь, что там надо добавить событие для вставки из буфера, но затрудняюсь с его поиском.

11

Re: AHK: Gui для ввода цифр с отбивкой разрядов

Попробуйте так:

Gui, +AlwaysOnTop hwndMainWin
Gui, Font, s13 w400, Tahoma
Gui, Add, Edit, w240 number hwndhEdit
Gui, Add, Button,  default, OK
obj := {h: hEdit}
obj.f := fn := Func("SetDots").Bind(obj)
GuiControl, +g, %hEdit%, % fn
Gui, Show
OnMessage(0x102, "WM_CHAR")
Return

WM_CHAR(wp) {
   if (wp = 22) { ; Ctrl + V
      Clipboard := StrReplace(Clipboard, " ")
   }
}

SetDots(obj)  {
   GuiControl, -g, % obj.h
   GuiControlGet, num,, % obj.h
   num := StrReplace(num, " ")
   GuiControl,, % obj.h, % RegExReplace(num, "\d(?=(\d{3})+$)", "$0 ")
   Send {End}
   fn := obj.f
   GuiControl, +g, % obj.h, % fn
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: Gui для ввода цифр с отбивкой разрядов

Спасибо! Правильно понимаю, что событие вставки из контекстного меню не может быть так же обработано?

13

Re: AHK: Gui для ввода цифр с отбивкой разрядов

В качестве обхода невозможности отловить вставку из контекстного меню, видимо, можно удалить опцию "number" -

Gui, Add, Edit, w240 number hwndhEdit

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

WM_CHAR(wp) {
   if (wp = 22) { ; Ctrl + V
      Clipboard := StrReplace(Clipboard, " ")
   }
   Chr := Chr(wp)
   if Chr not in 0,1,2,3,4,5,6,7,8,9
      Return 0
}

Как добавить в этот список с цифрами - пробел?

14

Re: AHK: Gui для ввода цифр с отбивкой разрядов

Впрочем, эта мера не поможет, если удерживать клавишу, которой нет в списке.

15

Re: AHK: Gui для ввода цифр с отбивкой разрядов

Я бы просто предотвратил появление контекстного меню, и, если  нужно, показал бы свое с соответствующей обработкой.

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