Страница 1 из 2
Имитация нажатия клавиши
Добавлено: 10 Июль 2017, 10:08
gopstop2007
Для планшета сделал свою клавиатуру (MK) для поиска товара через локатор, при нажатии моих клавиш на MK с англ. символов все ясно через presskey(), а как быть с имитацией нажатием на МК не с англ. символами (например - русскими)?
Имитация нажатия клавиши
Добавлено: 10 Июль 2017, 13:24
Admin
Переключись в русскую раскладку принудительно и отправляй код кнопки на которой русская буква написана.
Вот сборная солянка с форума.
Код: Выделить всё
PROGRAM
HKL EQUATE(UNSIGNED)
Latin CSTRING('00000409')
Russian CSTRING('00000419')
loc:Text STRING(200)
INCLUDE('KEYCODES.CLW')
MAP
module('')
GetKeyboardLayout(DWORD),HKL,pascal
GetKeyboardLayoutNameA(*CSTRING),BOOL,pascal,raw
ActivateKeyboardLayout(HKL,UNSIGNED),HKL,pascal
END
SwitchKBD(STRING KBDLayout)
END
Window WINDOW('Russian presskey'),AT(,,299,124),GRAY,FONT('Microsoft Sans Serif',8,,, |
CHARSET:CYRILLIC)
TEXT,AT(3,2,293,100),USE(loc:Text)
BUTTON('Русский'),AT(2,107),USE(?Rus)
BUTTON('Английский'),AT(45,107),USE(?Eng)
END
CODE
OPEN(Window)
ACCEPT
CASE ACCEPTED()
OF ?Rus
SwitchKBD(Russian)
SELECT(?loc:Text)
PRESSKEY(AKey)
PRESSKEY(BKey)
PRESSKEY(CKey)
OF ?Eng
SwitchKBD(Latin)
SELECT(?loc:Text)
PRESSKEY(AKey)
PRESSKEY(BKey)
PRESSKEY(CKey)
END
END
CLOSE(Window)
SwitchKBD Procedure(STRING KBDLayout)
AKL HKL
TMP CSTRING(20)
loc:i Long
Code
loc:i = GetKeyboardLayoutNameA(Tmp)
if Tmp<>KBDLayout
AKL = ActivateKeyBoardLayout(1,0)
end
Имитация нажатия клавиши
Добавлено: 10 Июль 2017, 13:37
gopstop2007
Спасибо, Admin.
А то я по старинке через API keybd_event(Key,0,0,0) + раскладка LoadKeyboardLayout(), ждал другое решение.

Имитация нажатия клавиши
Добавлено: 11 Июль 2017, 8:36
kreator
Я только не понял - зачем нужна имитация? И чем не устраивает стандартная клавиатура?
Имитация нажатия клавиши
Добавлено: 11 Июль 2017, 13:07
gopstop2007
kreator писал(а): 11 Июль 2017, 8:36Я только не понял - зачем нужна имитация? И чем не устраивает стандартная клавиатура?
Более рациональное расположение клавиш, убрано лишнее и терминальный сервер как правило с двумя раскладками языка, а если надо больше, то зачем на сервер навешивать. Плюс можно рассчитать рабочую поверхность, без клавиатуры, которая в зависимости от размера экрана может что -то закрыть и прочее...
Имитация нажатия клавиши
Добавлено: 12 Июль 2017, 8:11
gopstop2007
Проблема. При нажатии 123 на виртуал. клавиатуре (выше указанной) в ЧИСЛОВОЕ (LONG) поле, результатом будет только последнее число 3. Идет перезапись нажатых чисел, если использовать обычную клавиатуру таких проблем нет.

Имитация нажатия клавиши
Добавлено: 12 Июль 2017, 8:44
Admin
В моем примере сделал поле @N10 с LONG переменной и не увидел проблемы. Все записалось как нужно.
Твоего кода - не видим
При SELECT(?var) все введенное же выделяется.
Может SELECT(?var) несколько раз делаешь и соответственно перезаписываешь только что введенные цифры?
Так попробовать:
Код: Выделить всё
SELECT(?LOC:Long)
PRESSKEY(RightKey)
PRESSKEY(Key1)
PRESSKEY(Key2)
PRESSKEY(Key3)
Имитация нажатия клавиши
Добавлено: 12 Июль 2017, 9:01
gopstop2007
Admin писал(а): 12 Июль 2017, 8:44
...
При SELECT(?var) все введенное же выделяется.
...
Так попробовать:
PRESSKEY(RightKey)
SELECT(?var) - у меня не работает
PRESSKEY(RightKey) - все заработало!

Имитация нажатия клавиши
Добавлено: 12 Июль 2017, 16:37
kreator
gopstop2007 писал(а): 11 Июль 2017, 13:07
Более рациональное расположение клавиш, убрано лишнее и терминальный сервер как правило с двумя раскладками языка, а если надо больше, то зачем на сервер навешивать. Плюс можно рассчитать рабочую поверхность, без клавиатуры, которая в зависимости от размера экрана может что -то закрыть и прочее...
По сравнению с сенсорной клавиатурой Винды? Тогда молчу. А подсказки слов при наборе букв есть?
Имитация нажатия клавиши
Добавлено: 12 Июль 2017, 16:54
gopstop2007
kreator писал(а): 12 Июль 2017, 16:37
По сравнению с сенсорной клавиатурой Винды? Тогда молчу. А подсказки слов при наборе букв есть?
kreator, я рад всем вашим замечаниям, опыта в кларион с планшетом ноль. Вот такой вид на данном этапе

а какую клавиатуру используете? вызов через клашу с помощью osk (EnhancedFocusManager.SetOnScreenKeyboard) или что-то другое?
Имитация нажатия клавиши
Добавлено: 12 Июль 2017, 18:29
kreator
Ну да, стандартную. Класс SV чуть подправил. Сделал глобальную настройку на вызов сенсорной клавиатуры ("не вызывать никогда", "вызывать" и "вызывать и автоматически скрывать", последний режим не реализован у SV совсем, спасибо Игорю Столярову, он подсказал как убирать клаву). На данный момент нет отдельной версии для планшета. Есть спец-модуль. В принципе пользователь сам решает как ему использовать сенсорную клавиатуру. Потому что пользователи могут запустить обычный (не мобильный) модуль и использовать обычную "железячную" клаву, идущую в комплекте с планшетом. Для полноценной работы с специальным мобильным модулем, естественно, советуем включать третий режим. Кстати, SV обещала сделать автоматический сдвиг контролов при работе с сенсорной клавиатурой, если она перекрывает контролы для ввода. Ну это так, мало ли чего обещают, пять лет не дождёшься.
Есть ещё проблема - отображение подсказок слов (почему я и спрашиваю об этом). Проблема мне вообще не понятна. MS включила эту возможность в последнем релизе. У майкрософтовских программ эта фича работает. Больше нигде не работает. Ладно, я дурак. А остальные? На форуме Майкрософта мне не помогли. На sql.ru тоже. Очередной пипец. Поэтому я и говорю, что iOS - наше всё. Подсказки работают во всех программах через стандартную клаву, там же есть голосовой ввод. Эх-х...
Имитация нажатия клавиши
Добавлено: 13 Сентябрь 2017, 12:39
gopstop2007
Освободился решил доделать,
При поиске все работает идеально, но возникли проблемы, если вышеуказанную клавиатуру использовать в числовых полях, например количество, цена
Использую
Код: Выделить всё
PRESSKEY(RightKey) ! перемещаем вправо для введение следующего числа
PRESSKEY(Key1)
при удалении последнего введенного символа в
числовом поле
при нажатии клавиши Backspace
поведение неадекватное

не говорю про ввод в поле использующее числовые значения с десятичными значениями (цена)
есть ли у кого то примерчик, чтобы полностью имитировал нажатие стандартных клавиш без использования PRESSKEY()?
Имитация нажатия клавиши
Добавлено: 13 Сентябрь 2017, 14:14
kreator
Ну попробуй функцию press ещё. Может всё-таки стандартную подключить?
Имитация нажатия клавиши
Добавлено: 13 Сентябрь 2017, 16:02
gopstop2007
kreator писал(а): 13 Сентябрь 2017, 14:14
Ну попробуй функцию press ещё. Может всё-таки стандартную подключить?
спасибо насчет press упустил, насчет стандартной я не против, баба с возу кобыле легче, клиент считает по другому

Имитация нажатия клавиши
Добавлено: 13 Сентябрь 2017, 20:11
kreator
gopstop2007 писал(а): 13 Сентябрь 2017, 16:02
насчет стандартной я не против, баба с возу кобыле легче, клиент считает по другому
Как понять? Клиент хочет именно "свою" клавиатуру? Или чем-то стандартная не устраивает?