PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » StringGadget -только цифры и #.*


StringGadget -только цифры и #.*

Сообщений 1 страница 10 из 10

1

Всех с наступающим!
Нужно в StringGadget вводить только то, что есть на клавиатуре телефона, т.е. кроме цифр ещё и #, и *. Эти два знака не входят в #PB_String_Numeric, по этому сделал не большой костыль

Код:
If #PB_EventType_Change
            text_TCP=GetGadgetText(Kod)
            s=Right(text_TCP,1)
            If s="0" Or s="1" Or s="2" Or s="3" Or s="4" Or s="5" Or s="6" Or s="7" Or s="8" Or s="9" Or s="*" Or s="#" Or s=""
            Else
               MessageRequester("ВНИМАНИЕ!", "Можно вводить только цифры ,*,#", #MB_OK|#MB_ICONERROR)
             text_TCP= RTrim(text_TCP,s)
             SetGadgetText(kod,text_TCP)
            EndIf


Т.е, если введён запрещённый символБ программа предупреждает об этом, и удаляет его. Но проблемма в том, что курсор становится в начале строки StringGadget, и становится не удобно.
К примеру, если ввести 45U, программа предупредит, удалит U,  вернёт в гаджет 45, но курсор уже будет с лева, и ввод следующей цифры, к примеру 8, даст 845, а не 458.
Как это исправить? подскажите

0

2

Код:
Procedure EditProc(hwnd, msg, wParam, lParam)
  If msg=#WM_CHAR
    If (wParam<'0' Or wParam>'9') And wParam<>'*' And wParam<>'#' And wParam<>#VK_BACK
      MessageBeep_(#MB_ICONASTERISK)
      ProcedureReturn 0
    EndIf
  EndIf
  ProcedureReturn CallWindowProc_(GetWindowLongPtr_(hwnd, #GWL_USERDATA), hwnd, msg, wParam, lParam)
EndProcedure
 
OpenWindow(1,0,0,100,40,"",#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered) 
StringGadget(1,10,10,90,20,"") 
 
SetWindowLongPtr_(GadgetID(1), #GWL_USERDATA, SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @EditProc()))
Repeat 
  Event=WaitWindowEvent() 
Until Event=#PB_Event_CloseWindow

0

3

Когда-то делал такое, но то было на WinApi.
Дай бог памяти, кажется, обрабатывал сообщения WM_CHAR и блокировал ввод неправильных символов и сообщение WM_PASTE для блокировки вставки неправильных символов из буфера обмена.

0

4

https://www.purebasic.fr/english/viewto … 35#p609935

0

5

kip96 написал(а):

Нужно в StringGadget вводить только то, что есть на клавиатуре телефона, т.е. кроме цифр ещё и #, и *. Эти два знака не входят в #PB_String_Numeric, по этому сделал не большой костыль

Очень предпочтительно, в подобных вопросах, прояснить, для каких ОС вы пишете. Вам дали ответы, связанные с Windows. Но, всё же, по прежнему осталось неизвестно, пишете ли вы свою задачу, только под одну платформу, или стремитесь к кроссплатформенному решению.

Отредактировано Webarion (02.01.2024 02:50:16)

0

6

Спасибо!
Пишу на виндовс. Пишу исключительно для себя, По большей степени для управления своих поделок на МК. Учту на будущее.

0

7

нашёл на просторах нета, может кому пригодится

SendMessage_(GadgetID(KOD),#EM_SETSEL,4,-1)

команда ставит курсор в конец выделенного текста (выделено 4 символа. Можно и больше )

0

8

Нашёл на просторах интернета:ExitProcess_(0), хотя есть End 0..

0

9

kip96
EM_... это одна из десятка, а то и больше констант принадлежащих редактору, каждая из которых имеет своё действие. Набери в гугле например EM_REPLACESEL или "winapi EM_" и получишь дерево команд с приставкой EM_.
Посмотри это

Отредактировано AZJIO (04.01.2024 08:52:45)

0

10

и тут посмотри
Программа поиска и выбора констант API

0


Вы здесь » PureBasic - форум » PureBasic для Windows » StringGadget -только цифры и #.*