Страница 1 из 1
C9.1 и виртуальная клавиатуара
Добавлено: 29 Август 2014, 12:46
kreator
Смотрю новые возможности в С9.1. Вопрос к тем, кто юзал Touch Input. C9.1.11139, манифесты все включены и линкуются, Win7-64, монитор Philips 24", touch им не поддерживается. Выставляю в Global Properties приложения опцию "On Screen Keyboard" в "Auto". При работе в приложении вылезает виртуальная клавиатура, хотя в хелпе написано, что если девайс не поддерживает ввод пальцами, то клавиатуры быть не должно (правда это OC должна сигнализировать). Что не так? Винда отрабатывает не так? Ещё руками что-то надо прописывать?
И сразу ещё вопрос попутно. Эта клавиатура сама не скрывается. Это правильно? Зачем она, если я уже ушёл с поля ввода?
Re: C9.1 и виртуальная клавиатуара
Добавлено: 29 Август 2014, 15:30
Игорь Столяров
Тут просто нужно посмотреть исходный код, который создает шаблон (и кстати там сделан не лучший вариант).
Действительно, в шаблоне режим AUTO ничем не отличается от ON и лучше вообще его поставить в OFF.
А на нужных полях или по кнопке вызова - просто активировать экранную клавиатуру.
А что было совсем красиво - конечно нужно сделать вызов всплывающим (открыли и закрыли).
Для закрытия используем например такой код:
Код: Выделить всё
CloseKeyBoard PROCEDURE
Map ! Объявление функций WinAPI лучше вынести в Global MAP
Module('Windows')
xFindWindow_(<*CSTRING>,*CSTRING ),UNSIGNED,PASCAL,RAW,NAME('FindWindowA')
xPostMessage_(Long hWnd,unsigned nMsg, unsigned wParam, long lParam),bool,pascal,proc,name('PostMessageA')
end
end
Loc:MainTouch CSTRING(20)
Loc:WinTouch &CSTRING
Loc:TouchhWnd LONG
xWM_SYSCOMMAND_ Equate(0112H)
xSC_CLOSE_ Equate(0F060H)
CODE
Loc:MainTouch = 'IPTip_Main_Window'
Loc:WinTouch &= Null
Loc:TouchhWnd = xFindWindow_(Loc:MainTouch,Loc:WinTouch)
If Loc:TouchhWnd then xPostMessage_(Loc:TouchhWnd,xWM_SYSCOMMAND_,xSC_CLOSE_,0).
Если интересно, вот материал на эту тему:
http://social.msdn.microsoft.com/Forums ... =vbgeneral
Re: C9.1 и виртуальная клавиатуара
Добавлено: 29 Август 2014, 17:37
kreator
Чувствую, придётся убить время на доводку класса EnhancedFocusClassType. Посмотрел по тексту. Идёт вызов метода EnhancedFocusClassType.TakeEvent, который в свою очередь вызывает методы EnhancedFocusClassType.EnhanceFocusUnSelect и EnhancedFocusClassType.EnhanceFocusSelect. В EnhanceFocusUnSelect надо будет закрытие виртуальной клавиатуры сделать. Но пока разбираюсь почему она вылезает. Оказалось, что WinApi'шная функция GetSystemMetrics (используется в EnhancedFocusClassType для определения устройств с touch control'ом) возвращает мне 1, что говорит о наличии у меня какого-то устройства с тачем. Не может ведь WinApi'шная функция ошибаться? Тогда что за устройство у меня с тачем? Может, конечно, монитор так отрабатывает. Надо ещё на чём-нибудь проверить.
Re: C9.1 и виртуальная клавиатуара
Добавлено: 29 Август 2014, 19:05
Admin
kreator писал(а):возвращает мне 1, что говорит о наличии у меня какого-то устройства с тачем.
Это ответ на мышку скорее всего. Хотя при отключении мыши, удалении ее в устройствах и перезагрузке тоже возвращает 1.
Как описано в MSDN GetSystemMetrics(SM_MAXIMUMTOUCHES) возвращает количество точек прикосновения.
Вроде как не совсем верно использовать функцию таким образом. Стоит обратить внимание на параметр SM_TABLETPC с кодом 86 и вообще почитать
тут + погуглить.
Re: C9.1 и виртуальная клавиатуара
Добавлено: 29 Август 2014, 19:28
Игорь Столяров
Ну как сказано в описании GetSystemMetrics "Извлекает метрики и НАСТРОЙКИ системы".
В Win7 поддерживается ввод Touch устройств - поэтому все верно.
Наверно значение 0 будет возвращаться там где нет такой возможности в конфигурации системы, например в WinXP ...
Re: C9.1 и виртуальная клавиатуара
Добавлено: 30 Август 2014, 14:50
kreator
Параметр SM_TABLETPC вряд ли нужен, он не про то. Возврат 1 может быть вызван действительно мышью, я на работе проверю на другом ПК (пока в отпуске). В принципе, можно поставить условие ">1", устройства сейчас, как правило, мультитач.
А так подрихтовал класс EnhancedFocusClassType. Сейчас так. Если пользователь встаёт на поле с клавиатурным вводом (не буду их перечислять, есть для этого отдельный метод в нашем классе), то виртуальная клавиатура (ВК) выезжает (так и было). Если далее пользователь переходит на такое же поле, то ВК остаётся (было - ВК остаётся всегда). Если пользователь переходит на поле без ввода с клавиатуры, то ВК уезжает (у меня влево, за экран, виден маленький кусочек). Если пользователь закрывает окно, то тоже ВК уезжает (в классе почему-то это событие не отрабатывалось). Получилось, по крайней мере, логично, зачем всё время самому убирать ВК. Если кому надо, могу EFOCUS.CLW выложить, каждое поле каждого окна обрабатывать запаришься ведь. Отдельная благодарность Игорю за код по закрытию ВК, а то бы ещё пару дней потратил бы на поиск. Кстати, Игорь, не знаешь, можно ли управлять координатами ВК, а то она всегда выплывает в центр экрана. А, если её пристыковать, например, к низу, то она занимает столько места, что мама не горюй, на горизонтально ориентированных устройствах не красиво.
Re: C9.1 и виртуальная клавиатуара
Добавлено: 30 Август 2014, 15:04
Игорь Столяров
kreator писал(а):можно ли управлять координатами ВК, а то она всегда выплывает в центр экрана
Не знаю. По моему разумению - использование всплывающей клавиатуры в Win7 можно только для отладки или как демонстрация возможности.
А вот на планшете с Win8 экранная клавиатура уже совсем другая, работать с ней удобно и таких вопросов не возникает ...
Именно поэтому, на мой субъективный взгляд, не совсем удобен автовызов клавиатуры на полях.
Кроме логики - есть технические ограничения и удобство использования.
Экранная клавиатура в Win8 занимает значительную часть экрана планшета (от половины до четверти) и закрывает форму ввода.
Мы сделали кнопку в форме. Если пользователю нужна клавиатура для изменения значения поля - он нажимает кнопку
вызова клавиатуры и может изменять текущее поле. Уходит с поля - клавиатура закрывается.
Автовызов используется только на полях, переход на которые сразу подразумевает ввод данных - например ввод строки поиска и т.д.
Re: C9.1 и виртуальная клавиатуара
Добавлено: 01 Сентябрь 2014, 21:56
kreator
Игорь Столяров писал(а):По моему разумению - использование всплывающей клавиатуры в Win7 можно только для отладки или как демонстрация возможности.
Согласен. Надо на планшете смотреть. На работе планшет пока забрали (этап выполнен), так что либо обратно попросим, либо нужно другой купить.
Игорь Столяров писал(а):Если пользователю нужна клавиатура для изменения значения поля - он нажимает кнопку
вызова клавиатуры и может изменять текущее поле.
Я сейчас пользуюсь Windows Phone, а там так - если выбрал поле ввода, то клавиатура появляется (впрочем, на сенсорных телефонах, что я видел, везде так). Пока не представляю варианта "выбрать поле и не редактировать".
А что касается функции GetSystemMetrics, то пришла такая мысль. Сейчас же много всяких гибридных планшетов, ультрабуков 2-в-1, да и просто блютуз клавиатур. А монитор сенсорный. А пользователь будет работать обычной мышью и клавиатурой. Получается надо давать пользовательскую настройку для работы с виртуальной клавиатурой.