powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Символ последней нажатой клавиши
9 сообщений из 9, страница 1 из 1
Символ последней нажатой клавиши
    #34520169
shanton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как получить символ последней нажатой клавиши?
...
Рейтинг: 0 / 0
Символ последней нажатой клавиши
    #34520182
pitermax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если правильно понял то его возвращает функция lastkey()
...
Рейтинг: 0 / 0
Символ последней нажатой клавиши
    #34520212
shanton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LASTKEY возвращает целое число последней нажатой клавиши. Но не символ. Хорошо, а с этого целого числа можно получить символ который ему соответсвует?
...
Рейтинг: 0 / 0
Символ последней нажатой клавиши
    #34520252
shanton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данной ситуации мне нужно ограничить ввод текста символами A-Z,0-9,_. Для этого я создал таблицу этих символов:

CREATE CURSOR CurChr (fChr C)
INDEX ON fChr TAG tChr
SET ORDER TO TAG tChr
FOR ni=0 TO 57
INSERT INTO CurChr (fChr) VALUES (chr(ni))
ENDFOR

FOR ni=65 TO 90
INSERT INTO CurChr (fChr) VALUES (chr(ni))
ENDFOR

INSERT INTO CurChr (fChr) VALUES (chr(95))

FOR ni=97 TO 122
INSERT INTO CurChr (fChr) VALUES (chr(ni))
ENDFOR

FOR ni=192 TO 255
INSERT INTO CurChr (fChr) VALUES (chr(ni))
ENDFOR

и в InteractiveChange обекта text делаю следующее:

LOCAL cThis, nLen, cText

cThis=ALLTRIM(This.Value)
nLen=LEN(cThis)
cText=RIGHT(cThis,nLen-IIF(nLen=1,0,1))

IF !SEEK(cText,[CurChr])
ThisForm.ShowError('Неверный символ в имени поля')
ENDIF

но так не совсем коректно определяет последний нажатый символ. И надо чтоб если символ не правельной, то его ввод отменялся.
...
Рейтинг: 0 / 0
Символ последней нажатой клавиши
    #34520302
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
chr(iif(between(lastkey(),  0 ,  255 ), lastkey(),  0 )

CHR() преобразовывает код символа в символ, но LASTKEY() может давать отрицательные значения (Ins, End и т.п.)
...
Рейтинг: 0 / 0
Символ последней нажатой клавиши
    #34520307
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такую обработку лучше делать в методе KeyPress(), где параметер tnkeycode тот же lastkey() но по команде NODEFAULT символ не наберется в поле ввода
...
Рейтинг: 0 / 0
Символ последней нажатой клавиши
    #34520577
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shantonLASTKEY возвращает целое число последней нажатой клавиши. Но не символ. Хорошо, а с этого целого числа можно получить символ который ему соответсвует?Преобразование точно такое же, как и в INKEY() (в хелпе по INKEY() приведена таблица), только вот не помню, за небольшими исключениями или вовсе без исключений, а исключения - у READKEY()

Кстати, использовать и то, и другое, и третье уже очень давно немодно. Да и не нужно. ;-)
...
Рейтинг: 0 / 0
Символ последней нажатой клавиши
    #34521371
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
время идет а все по старому )
и это правильно )
если речь идет о вводе текста в текстбокс, то я бы сделал немного по другому
без курсора и сика ...
во-первых все буквы в алфавите упорядочены, как и цифры поэтому курсора не надо )
нужно юзать знаки больше - меньше и комбинации And - or и все получиться
во-вторых если это все же текстбокс - то у него есть свои методы определения позиции курсора ввода. Уж извените в последнее время не практикую ))) , но если напрячся то selstart кажеться
далее берем substr и получаем сивол все в методе интерактивчейндж
в-третьих (это личная позиция) не надо насиловать юзера
ОНО должно давить клавиши и не думать о регистре, раскладке клавы и прочих докучливых, скучных мелочах )
поэтому вспоминаем функцию (мне лень(м.б. strtran)) которая преобразует символы из одного набора в другой (там два параметра= два набора ) и пусть оно давит клавиши ...
...
Рейтинг: 0 / 0
Символ последней нажатой клавиши
    #34521381
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опа а вот и плагиат

Код: plaintext
1.
pcStr="qwert -йцуке"
?CHRTRAN(UPPER(pcStr),CHRTRAN(UPPER(pcStr),"ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ -",""),"")

функция которую надо вспомнить
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Символ последней нажатой клавиши
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]