:: Visual Foxpro, Foxpro for DOS
Как отличить нажатие {LEFT ARROW} от 5?
wow1970
Автор

Сообщений: 29
Дата регистрации: 06.12.2017
Добрый день!
Есть какой способ, чтобы отличить нажатие одной клавиши от другой в методе KeyPress?
Нужно запретить ввод символов в поле по nodefault в тестбоксе, но разрешить перемещаться, т.к. текстбокс в гриде.
Например отличить для цифр "4 и 6 "коды которых совпадают с ШИФТ+"стрелка влево/вправо".

Ну и т.п. Например контрол + b/n вбивает квадратитки в текстбокс. Нужно убрать такое поведение мне тоже.



Исправлено 2 раз(а). Последнее : wow1970, 22.02.18 11:29
Ratings: 0 negative/0 positive
Re: Как отличить нажатие {LEFT ARROW} от 5?
Sawradym

Сообщений: 2244
Откуда: Винница
Дата регистрации: 15.05.2007
Проверяй значение nShiftAltCtrl.



Исправлено 1 раз(а). Последнее : Sawradym, 23.02.18 09:37
Ratings: 0 negative/0 positive
Re: Как отличить нажатие {LEFT ARROW} от 5?
VeterVFP

Сообщений: 413
Откуда: Москва
Дата регистрации: 26.12.2006
Нужно анализировать параметр nShiftAltCtrl
Код KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
DO CASE
** Shift + ->
CASE nShiftAltCtrl= 1 AND nKeyCode= 54
=DODEFAULT()
** 6
CASE nShiftAltCtrl= 0 AND nKeyCode= 54
NODEFAULT
ENDCASE
Ratings: 0 negative/0 positive
Re: Как отличить нажатие {LEFT ARROW} от 5?
wow1970
Автор

Сообщений: 29
Дата регистрации: 06.12.2017
Просто все клавиши по которым идет перемещения в гриде символ не печатают. А нажатие на "4" выдает символ 4.
Думал что можно оличить этот факт. Т.е. если нажатие выдает печатный символ, то нодефаулт. Остальное разрешить.

Да, придется проверять нажатие функционалок.
Просто код выглядит "чудовищно".

CASE !This.IsChange .AND. !INLIST(nKeyCode,10,5,24,52,54,4,19,29,23,9,15,18,3,148,13,2,26,1,6)

А шифт + стрелки использую для выделения части текста в этом "нередактируемом" текстбоксе чтобы взять потом его в буфер.
Просто в одной колонке 2 техстбокса с разрешением редактирование и БЕЗ и задейстован динамикарентконтрол.



Исправлено 1 раз(а). Последнее : wow1970, 22.02.18 11:51
Ratings: 0 negative/0 positive
Re: Как отличить нажатие {LEFT ARROW} от 5?
VeterVFP

Сообщений: 413
Откуда: Москва
Дата регистрации: 26.12.2006
Можно попробовать от обратного: если Shift+AnyArrow - DODEFAULT(), а иначе - NODEFAULT
Ratings: 0 negative/0 positive
Re: Как отличить нажатие {LEFT ARROW} от 5?
wow1970
Автор

Сообщений: 29
Дата регистрации: 06.12.2017
Ладно, спасибо.
Пока вот так все нормально, хоть и неэлегантно.
,,,, .AND. !(INLIST(nKeyCode,10,5,24,4,19,29,23,9,15,18,3,148,13,2,26,1,6) or (INLIST(nKeyCode,52,54) AND nShiftAltCtrl = 1))
Ratings: 0 negative/0 positive
Re: Как отличить нажатие {LEFT ARROW} от 5?
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Как и писали выше, этот чудовищный код, легко превращается в
if nShiftAltCtrl =0
nodefault
endif
Или задачи не понял


------------------
Ratings: 0 negative/0 positive
Re: Как отличить нажатие {LEFT ARROW} от 5?
pasha_usue

Сообщений: 3650
Откуда: Е-бург
Дата регистрации: 06.10.2006
А Format и InputMask не решают?
Ratings: 0 negative/0 positive
Re: Как отличить нажатие {LEFT ARROW} от 5?
wow1970
Автор

Сообщений: 29
Дата регистрации: 06.12.2017
А как задать чтобы ничего нельзя было ввести в текстбокс при помощи формат и инпутмаск?
Было бы замечательно.
Свойство ReadOnly чето не помагает. Видимо колонка или грид его переводит в true.
Ratings: 0 negative/0 positive
Re: Как отличить нажатие {LEFT ARROW} от 5?
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
wow1970
Свойство ReadOnly чето не помагает. Видимо колонка или грид его переводит в true.

А ReadOnly колонки?
Ratings: 0 negative/0 positive
Re: Как отличить нажатие {LEFT ARROW} от 5?
wow1970
Автор

Сообщений: 29
Дата регистрации: 06.12.2017
В колонке 2 текстбокса + динамиккарентконтрол.
Реализация нужного поведения на кейпресах самая сложная в исполнении, но зато дает сделать любое поведение.
У меня навешано там много. Меню, фильтрация, выделение строк и прочее.
Просто не хочу всю эту навороченность потерять например сделав один из тестбоксов дисабле.

В гриде есть колонки которые можно редактировать напрямую и есть которые нельзя, но реакция на некоторые комбинации сохранена.
Опирается на свойство колонки в котором контрол находится.

А вот захотелось сделать смешанное поведение в одной колонке.
Колонка отвечает за настройку ширины колонки в гриде который настраивается. Т.е. для грида визвывается настроечная форма в которой можно выставить все свойства этого грида. Цвета, размеры шрифтов и т.п.
Вот если Resizable = .F. то низзя менять значение.

Задача простая: есть ли вариант типа Len(chr(nKeyCode)) = 0. Выдает на все комбинации =1. А хотелось бы на НЕ (букви +цифры) получить НОЛЬ.
Ясно что можно пришпандерить внешнюю функцию с СтрТран. Но не хотелось бы.



Исправлено 3 раз(а). Последнее : wow1970, 22.02.18 17:28
Ratings: 0 negative/0 positive
Re: Как отличить нажатие {LEFT ARROW} от 5?
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
wow1970
В колонке 2 текстбокса + динамиккарентконтрол.

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

Цитата:
Просто не хочу всю эту навороченность потерять например сделав один из тестбоксов дисабле.

Но ReadOnly = .T. отличается от Enabled = .F.



Исправлено 1 раз(а). Последнее : akvvohinc, 22.02.18 17:27
Ratings: 0 negative/0 positive
Re: Как отличить нажатие {LEFT ARROW} от 5?
wow1970
Автор

Сообщений: 29
Дата регистрации: 06.12.2017
Делал и так (с внешней функцией в форме), но контролы ведут себя неправильно при заходе/выходе в такое поле.

Вот скрин этого настроечного класа грида с недецкой динамикой.



Исправлено 4 раз(а). Последнее : wow1970, 22.02.18 17:56
Ratings: 0 negative/0 positive
Re: Как отличить нажатие {LEFT ARROW} от 5?
sphinx

Сообщений: 31184
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Я лет 10-15 назад писал свой интерфейс (да классов там было неного, сразу говорю, сейчас что-то пытаюсь сделать интереснее, самому нравится). Понятно дело, многие вещи самодостаточные, их приручить программеру не сложно, и комменты, как все устроено есть. Ну не запустит - беды не будет. Я всегда покажу альтернативу по реализации своих классов. Оспади, да ладно там был был кодище!Ну где-то и в чем-то надо будет немного подумать, чтобы понять мои идеи.Все ведь просто, даже не в очень замудренных отчетах - разумеется под ОО уже говорим, Эксель морально уже устарел у нашего (показал пальцем вверх)


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive
Re: Как отличить нажатие {LEFT ARROW} от 5?
sphinx

Сообщений: 31184
Откуда: Каменск-Уральски
Дата регистрации: 22.11.2006
Кольцов почти все придумал до меня. Но я пошел дальше. Класс выложу, когда причешу. И все равно косяки будут. Увы.


------------------
"Veni, vidi, vici!"(с)
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 22 _vit  (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика