Имитация нажатия клавиши

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Имитация нажатия клавиши

Сообщение gopstop2007 »

Для планшета сделал свою клавиатуру (MK) для поиска товара через локатор, при нажатии моих клавиш на MK с англ. символов все ясно через presskey(), а как быть с имитацией нажатием на МК не с англ. символами (например - русскими)?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Имитация нажатия клавиши

Сообщение 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  
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Имитация нажатия клавиши

Сообщение gopstop2007 »

Спасибо, Admin.
А то я по старинке через API keybd_event(Key,0,0,0) + раскладка LoadKeyboardLayout(), ждал другое решение. :)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Имитация нажатия клавиши

Сообщение kreator »

Я только не понял - зачем нужна имитация? И чем не устраивает стандартная клавиатура?
We are hard at work… for you. :)
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Имитация нажатия клавиши

Сообщение gopstop2007 »

kreator писал(а): 11 Июль 2017, 8:36Я только не понял - зачем нужна имитация? И чем не устраивает стандартная клавиатура?
Более рациональное расположение клавиш, убрано лишнее и терминальный сервер как правило с двумя раскладками языка, а если надо больше, то зачем на сервер навешивать. Плюс можно рассчитать рабочую поверхность, без клавиатуры, которая в зависимости от размера экрана может что -то закрыть и прочее...
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Имитация нажатия клавиши

Сообщение gopstop2007 »

Проблема. При нажатии 123 на виртуал. клавиатуре (выше указанной) в ЧИСЛОВОЕ (LONG) поле, результатом будет только последнее число 3. Идет перезапись нажатых чисел, если использовать обычную клавиатуру таких проблем нет. :(
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Имитация нажатия клавиши

Сообщение Admin »

В моем примере сделал поле @N10 с LONG переменной и не увидел проблемы. Все записалось как нужно.
Твоего кода - не видим :)

При SELECT(?var) все введенное же выделяется.
Может SELECT(?var) несколько раз делаешь и соответственно перезаписываешь только что введенные цифры?

Так попробовать:

Код: Выделить всё

  SELECT(?LOC:Long)
  PRESSKEY(RightKey)
  PRESSKEY(Key1)
  PRESSKEY(Key2)
  PRESSKEY(Key3)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Имитация нажатия клавиши

Сообщение gopstop2007 »

Admin писал(а): 12 Июль 2017, 8:44 ...
При SELECT(?var) все введенное же выделяется.
...
Так попробовать:
PRESSKEY(RightKey)
SELECT(?var) - у меня не работает
PRESSKEY(RightKey) - все заработало! :)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Имитация нажатия клавиши

Сообщение kreator »

gopstop2007 писал(а): 11 Июль 2017, 13:07 Более рациональное расположение клавиш, убрано лишнее и терминальный сервер как правило с двумя раскладками языка, а если надо больше, то зачем на сервер навешивать. Плюс можно рассчитать рабочую поверхность, без клавиатуры, которая в зависимости от размера экрана может что -то закрыть и прочее...
По сравнению с сенсорной клавиатурой Винды? Тогда молчу. А подсказки слов при наборе букв есть?
We are hard at work… for you. :)
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Имитация нажатия клавиши

Сообщение gopstop2007 »

kreator писал(а): 12 Июль 2017, 16:37 По сравнению с сенсорной клавиатурой Винды? Тогда молчу. А подсказки слов при наборе букв есть?
kreator, я рад всем вашим замечаниям, опыта в кларион с планшетом ноль. Вот такой вид на данном этапе :)
а какую клавиатуру используете? вызов через клашу с помощью osk (EnhancedFocusManager.SetOnScreenKeyboard) или что-то другое?
Вложения
pad.jpg
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Имитация нажатия клавиши

Сообщение kreator »

Ну да, стандартную. Класс SV чуть подправил. Сделал глобальную настройку на вызов сенсорной клавиатуры ("не вызывать никогда", "вызывать" и "вызывать и автоматически скрывать", последний режим не реализован у SV совсем, спасибо Игорю Столярову, он подсказал как убирать клаву). На данный момент нет отдельной версии для планшета. Есть спец-модуль. В принципе пользователь сам решает как ему использовать сенсорную клавиатуру. Потому что пользователи могут запустить обычный (не мобильный) модуль и использовать обычную "железячную" клаву, идущую в комплекте с планшетом. Для полноценной работы с специальным мобильным модулем, естественно, советуем включать третий режим. Кстати, SV обещала сделать автоматический сдвиг контролов при работе с сенсорной клавиатурой, если она перекрывает контролы для ввода. Ну это так, мало ли чего обещают, пять лет не дождёшься.
Есть ещё проблема - отображение подсказок слов (почему я и спрашиваю об этом). Проблема мне вообще не понятна. MS включила эту возможность в последнем релизе. У майкрософтовских программ эта фича работает. Больше нигде не работает. Ладно, я дурак. А остальные? На форуме Майкрософта мне не помогли. На sql.ru тоже. Очередной пипец. Поэтому я и говорю, что iOS - наше всё. Подсказки работают во всех программах через стандартную клаву, там же есть голосовой ввод. Эх-х...
We are hard at work… for you. :)
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Имитация нажатия клавиши

Сообщение gopstop2007 »

Освободился решил доделать,
При поиске все работает идеально, но возникли проблемы, если вышеуказанную клавиатуру использовать в числовых полях, например количество, цена
Использую

Код: Выделить всё

PRESSKEY(RightKey)  ! перемещаем вправо для введение следующего числа
PRESSKEY(Key1)
при удалении последнего введенного символа в числовом поле
при нажатии клавиши Backspace

Код: Выделить всё

PRESSKEY(BSKEY)
поведение неадекватное :)
не говорю про ввод в поле использующее числовые значения с десятичными значениями (цена)
есть ли у кого то примерчик, чтобы полностью имитировал нажатие стандартных клавиш без использования PRESSKEY()?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Имитация нажатия клавиши

Сообщение kreator »

Ну попробуй функцию press ещё. Может всё-таки стандартную подключить?
We are hard at work… for you. :)
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

Имитация нажатия клавиши

Сообщение gopstop2007 »

kreator писал(а): 13 Сентябрь 2017, 14:14 Ну попробуй функцию press ещё. Может всё-таки стандартную подключить?
спасибо насчет press упустил, насчет стандартной я не против, баба с возу кобыле легче, клиент считает по другому :)
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

Имитация нажатия клавиши

Сообщение kreator »

gopstop2007 писал(а): 13 Сентябрь 2017, 16:02 насчет стандартной я не против, баба с возу кобыле легче, клиент считает по другому
Как понять? Клиент хочет именно "свою" клавиатуру? Или чем-то стандартная не устраивает?
We are hard at work… for you. :)
Ответить