Переключение раскладки клавиатуры в Grid_x000D_

Проблема: при вводе данных оператором в числовом поле точка (разделитель разрядов) на правой цифровой клавиатуре (ПЦК), при ее русской раскладке, не ставиться. Приходится переключаться, а это их (операторов) нервирует и тормозит работу.

Переключение раскладки клавиатуры в Grid

Переключение раскладки клавиатуры в Grid
Проблема: при вводе данных оператором в числовом поле точка (разделитель разрядов)
на правой цифровой клавиатуре (ПЦК), при ее русской раскладке, не ставиться.
Приходится переключаться, а это их (операторов) нервирует и тормозит работу.
Причем столкнулся с тем, что на некоторых машинах наоборот - точка на ПЦК
не ставиться именно при английской раскладке... не стал вникать почему (ну
не ставиться да и бог с ней)
На конференции часто встречаются вопросы по этому поводу,
а тут и мне заказчики задали задачу: "А нельзя ли...?"
Ну, естественно можно. И сделал так:
(Сразу оговорюсь, что сам ничего не придумал, все взято из материалов конференции)
*=======================================================
* В программе перед открытием формы
PRIVATE cRasklad, cRaskladDef
store '00000409' TO cRasklad && раскладка клавиатуры в числовом поле = En
store '00000419' TO cRaskladDef && раскладка клавиатуры по умолчанию = Ru
* на самом же деле эти значения я храню в ini-файле и юзер может их настроить
* под свою машину
*
* Дальше открываем форму
DO Form Форма_с_Гридом
*=======================================================
* В событии AfterRowColChange для Grid пишу:
LPARAMETERS nColIndex
DO CASE
CASE TYPE(SYS(18)) = "N"
DO a_keyb WITH 0
OTHERWISE
DO a_keyb WITH 1
ENDCASE
*=======================================================
* Вот и все.
* Пардон, забыл про a_keyb.prg, вот он:
* (Это как раз то, что я и взял из материалов конференции)
********************************
* Файл a_keyb.prg
********************************
PARAMETERS tVid
DECLARE INTEGER GetKeyboardLayoutName IN win32api STRING cKeyboard
DECLARE INTEGER LoadKeyboardLayout IN win32api STRING cp1, INTEGER np2
cKeyboard = space(100)
GetKeyboardLayoutName(@cKeyboard)

DO CASE
CASE tVid = 0 && переключить для числ. поля
if m.cKeyboard # cRasklad
LoadKeyboardLayout( cRasklad, 1)
ENDIF
CASE tVid = 1 && вернуть по умолчанию
LoadKeyboardLayout( cRaskladDef, 1)
ENDCASE
Clear DLLs GetKeyboardLayoutName,LoadKeyboardLayout
return
*******************************************
И все. Никакого торможения работы в форме я не заметил.
К сожалению не нашел метод в Форме, который бы вроде
AfterRowColChange для Grid отслеживал изменения фокусировки
объектов Формы. А в каждом объекте писать проверку что то не
хочется.
Буду рад всем замечаниям и подсказкам. Раз проблема есть,
то совместными усилиями можем получить ее нормальное разрешение.
А все, что выше, - это лишь одна из попыток.

С уважением Каратаев ddw2@yandex.ru

Автор: Каратаев

Автор публикации

не в сети 19 лет

Каратаев

0
Комментарии: 0Публикации: 4Регистрация: 04-12-2001
0
Оставить комментарий
Авторизация
*
*
Генерация пароля