Имитация нажатия клавиши
Модератор: Дед Пахом
					Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
	При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- 
				gopstop2007
- Полимат
- Сообщения: 1841
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 30 раз
- Поблагодарили: 10 раз
Имитация нажатия клавиши
Для планшета сделал свою клавиатуру (MK) для поиска товара через локатор, при нажатии моих клавиш на MK с англ. символов все ясно через presskey(), а как быть с имитацией нажатием на МК не с англ. символами (например - русскими)?
			
			
									
						“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
			
						- Admin
- Администратор
- Сообщения: 4022
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 59 раз
- Поблагодарили: 42 раза
- Контактная информация:
Имитация нажатия клавиши
Переключись в русскую раскладку принудительно и отправляй код кнопки на которой русская буква написана.
Вот сборная солянка с форума.
			
			
									
						Вот сборная солянка с форума.
Код: Выделить всё
         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
- Полимат
- Сообщения: 1841
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 30 раз
- Поблагодарили: 10 раз
Имитация нажатия клавиши
Спасибо, Admin.
А то я по старинке через API keybd_event(Key,0,0,0) + раскладка LoadKeyboardLayout(), ждал другое решение.
			
			
									
						А то я по старинке через API keybd_event(Key,0,0,0) + раскладка LoadKeyboardLayout(), ждал другое решение.

“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
			
						- 
				kreator
- ✯ Ветеран ✯
- Сообщения: 5235
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Имитация нажатия клавиши
Я только не понял - зачем нужна имитация? И чем не устраивает стандартная клавиатура?
			
			
									
						We are hard at work… for you.   
			
						
- 
				gopstop2007
- Полимат
- Сообщения: 1841
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 30 раз
- Поблагодарили: 10 раз
Имитация нажатия клавиши
Более рациональное расположение клавиш, убрано лишнее и терминальный сервер как правило с двумя раскладками языка, а если надо больше, то зачем на сервер навешивать. Плюс можно рассчитать рабочую поверхность, без клавиатуры, которая в зависимости от размера экрана может что -то закрыть и прочее...kreator писал(а): 11 Июль 2017, 8:36Я только не понял - зачем нужна имитация? И чем не устраивает стандартная клавиатура?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
			
						- 
				gopstop2007
- Полимат
- Сообщения: 1841
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 30 раз
- Поблагодарили: 10 раз
Имитация нажатия клавиши
Проблема. При нажатии 123 на виртуал. клавиатуре (выше указанной) в ЧИСЛОВОЕ (LONG) поле, результатом будет только последнее число 3. Идет перезапись нажатых чисел, если использовать обычную клавиатуру таких проблем нет.  
			
			
									
						
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
			
						- Admin
- Администратор
- Сообщения: 4022
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 59 раз
- Поблагодарили: 42 раза
- Контактная информация:
Имитация нажатия клавиши
В моем примере сделал поле @N10 с LONG переменной и не увидел проблемы. Все записалось как нужно.
Твоего кода - не видим
При SELECT(?var) все введенное же выделяется.
Может SELECT(?var) несколько раз делаешь и соответственно перезаписываешь только что введенные цифры?
Так попробовать:
			
			
									
						Твоего кода - не видим

При SELECT(?var) все введенное же выделяется.
Может SELECT(?var) несколько раз делаешь и соответственно перезаписываешь только что введенные цифры?
Так попробовать:
Код: Выделить всё
  SELECT(?LOC:Long)
  PRESSKEY(RightKey)
  PRESSKEY(Key1)
  PRESSKEY(Key2)
  PRESSKEY(Key3)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
			
						- 
				gopstop2007
- Полимат
- Сообщения: 1841
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 30 раз
- Поблагодарили: 10 раз
Имитация нажатия клавиши
SELECT(?var) - у меня не работаетAdmin писал(а): 12 Июль 2017, 8:44 ...
При SELECT(?var) все введенное же выделяется.
...
Так попробовать:
PRESSKEY(RightKey)
PRESSKEY(RightKey) - все заработало!

“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
			
						- 
				kreator
- ✯ Ветеран ✯
- Сообщения: 5235
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Имитация нажатия клавиши
По сравнению с сенсорной клавиатурой Винды? Тогда молчу. А подсказки слов при наборе букв есть?gopstop2007 писал(а): 11 Июль 2017, 13:07 Более рациональное расположение клавиш, убрано лишнее и терминальный сервер как правило с двумя раскладками языка, а если надо больше, то зачем на сервер навешивать. Плюс можно рассчитать рабочую поверхность, без клавиатуры, которая в зависимости от размера экрана может что -то закрыть и прочее...
We are hard at work… for you.   
			
						
- 
				gopstop2007
- Полимат
- Сообщения: 1841
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 30 раз
- Поблагодарили: 10 раз
Имитация нажатия клавиши
kreator, я рад всем вашим замечаниям, опыта в кларион с планшетом ноль. Вот такой вид на данном этапеkreator писал(а): 12 Июль 2017, 16:37 По сравнению с сенсорной клавиатурой Винды? Тогда молчу. А подсказки слов при наборе букв есть?

а какую клавиатуру используете? вызов через клашу с помощью osk (EnhancedFocusManager.SetOnScreenKeyboard) или что-то другое?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
			
						- 
				kreator
- ✯ Ветеран ✯
- Сообщения: 5235
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Имитация нажатия клавиши
Ну да, стандартную. Класс SV чуть подправил. Сделал глобальную настройку на вызов сенсорной клавиатуры ("не вызывать никогда", "вызывать" и "вызывать и автоматически скрывать", последний режим не реализован у SV совсем, спасибо Игорю Столярову, он подсказал как убирать клаву). На данный момент нет отдельной версии для планшета. Есть спец-модуль. В принципе пользователь сам решает как ему использовать сенсорную клавиатуру. Потому что пользователи могут запустить обычный (не мобильный) модуль и использовать обычную "железячную" клаву, идущую в комплекте с планшетом. Для полноценной работы с специальным мобильным модулем, естественно, советуем включать третий режим. Кстати, SV обещала сделать автоматический сдвиг контролов при работе с сенсорной клавиатурой, если она перекрывает контролы для ввода. Ну это так, мало ли чего обещают, пять лет не дождёшься.
Есть ещё проблема - отображение подсказок слов (почему я и спрашиваю об этом). Проблема мне вообще не понятна. MS включила эту возможность в последнем релизе. У майкрософтовских программ эта фича работает. Больше нигде не работает. Ладно, я дурак. А остальные? На форуме Майкрософта мне не помогли. На sql.ru тоже. Очередной пипец. Поэтому я и говорю, что iOS - наше всё. Подсказки работают во всех программах через стандартную клаву, там же есть голосовой ввод. Эх-х...
			
			
									
						Есть ещё проблема - отображение подсказок слов (почему я и спрашиваю об этом). Проблема мне вообще не понятна. MS включила эту возможность в последнем релизе. У майкрософтовских программ эта фича работает. Больше нигде не работает. Ладно, я дурак. А остальные? На форуме Майкрософта мне не помогли. На sql.ru тоже. Очередной пипец. Поэтому я и говорю, что iOS - наше всё. Подсказки работают во всех программах через стандартную клаву, там же есть голосовой ввод. Эх-х...
We are hard at work… for you.   
			
						
- 
				gopstop2007
- Полимат
- Сообщения: 1841
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 30 раз
- Поблагодарили: 10 раз
Имитация нажатия клавиши
Освободился решил доделать, 
При поиске все работает идеально, но возникли проблемы, если вышеуказанную клавиатуру использовать в числовых полях, например количество, цена
Использую
при удалении последнего введенного символа в числовом поле
при нажатии клавиши Backspaceповедение неадекватное 
не говорю про ввод в поле использующее числовые значения с десятичными значениями (цена)
есть ли у кого то примерчик, чтобы полностью имитировал нажатие стандартных клавиш без использования PRESSKEY()?
			
			
									
						При поиске все работает идеально, но возникли проблемы, если вышеуказанную клавиатуру использовать в числовых полях, например количество, цена
Использую
Код: Выделить всё
PRESSKEY(RightKey)  ! перемещаем вправо для введение следующего числа
PRESSKEY(Key1)при нажатии клавиши Backspace
Код: Выделить всё
PRESSKEY(BSKEY)
не говорю про ввод в поле использующее числовые значения с десятичными значениями (цена)
есть ли у кого то примерчик, чтобы полностью имитировал нажатие стандартных клавиш без использования PRESSKEY()?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
			
						- 
				kreator
- ✯ Ветеран ✯
- Сообщения: 5235
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Имитация нажатия клавиши
Ну попробуй функцию press ещё. Может всё-таки стандартную подключить?
			
			
									
						We are hard at work… for you.   
			
						
- 
				gopstop2007
- Полимат
- Сообщения: 1841
- Зарегистрирован: 25 Март 2009, 21:55
- Благодарил (а): 30 раз
- Поблагодарили: 10 раз
Имитация нажатия клавиши
спасибо насчет press упустил, насчет стандартной я не против, баба с возу кобыле легче, клиент считает по другомуkreator писал(а): 13 Сентябрь 2017, 14:14 Ну попробуй функцию press ещё. Может всё-таки стандартную подключить?

“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп
			
						- 
				kreator
- ✯ Ветеран ✯
- Сообщения: 5235
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Имитация нажатия клавиши
Как понять? Клиент хочет именно "свою" клавиатуру? Или чем-то стандартная не устраивает?gopstop2007 писал(а): 13 Сентябрь 2017, 16:02 насчет стандартной я не против, баба с возу кобыле легче, клиент считает по другому
We are hard at work… for you.   
			
						

