C9.1 и виртуальная клавиатуара

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

C9.1 и виртуальная клавиатуара

Сообщение kreator »

Смотрю новые возможности в С9.1. Вопрос к тем, кто юзал Touch Input. C9.1.11139, манифесты все включены и линкуются, Win7-64, монитор Philips 24", touch им не поддерживается. Выставляю в Global Properties приложения опцию "On Screen Keyboard" в "Auto". При работе в приложении вылезает виртуальная клавиатура, хотя в хелпе написано, что если девайс не поддерживает ввод пальцами, то клавиатуры быть не должно (правда это OC должна сигнализировать). Что не так? Винда отрабатывает не так? Ещё руками что-то надо прописывать?
И сразу ещё вопрос попутно. Эта клавиатура сама не скрывается. Это правильно? Зачем она, если я уже ушёл с поля ввода?
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: C9.1 и виртуальная клавиатуара

Сообщение Игорь Столяров »

Тут просто нужно посмотреть исходный код, который создает шаблон (и кстати там сделан не лучший вариант).
Действительно, в шаблоне режим 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
Make Clarion Great Again ! 😎
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: C9.1 и виртуальная клавиатуара

Сообщение kreator »

Чувствую, придётся убить время на доводку класса EnhancedFocusClassType. Посмотрел по тексту. Идёт вызов метода EnhancedFocusClassType.TakeEvent, который в свою очередь вызывает методы EnhancedFocusClassType.EnhanceFocusUnSelect и EnhancedFocusClassType.EnhanceFocusSelect. В EnhanceFocusUnSelect надо будет закрытие виртуальной клавиатуры сделать. Но пока разбираюсь почему она вылезает. Оказалось, что WinApi'шная функция GetSystemMetrics (используется в EnhancedFocusClassType для определения устройств с touch control'ом) возвращает мне 1, что говорит о наличии у меня какого-то устройства с тачем. Не может ведь WinApi'шная функция ошибаться? Тогда что за устройство у меня с тачем? Может, конечно, монитор так отрабатывает. Надо ещё на чём-нибудь проверить.
We are hard at work… for you. :)
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: C9.1 и виртуальная клавиатуара

Сообщение Admin »

kreator писал(а):возвращает мне 1, что говорит о наличии у меня какого-то устройства с тачем.
Это ответ на мышку скорее всего. Хотя при отключении мыши, удалении ее в устройствах и перезагрузке тоже возвращает 1.
Как описано в MSDN GetSystemMetrics(SM_MAXIMUMTOUCHES) возвращает количество точек прикосновения.
Вроде как не совсем верно использовать функцию таким образом. Стоит обратить внимание на параметр SM_TABLETPC с кодом 86 и вообще почитать тут + погуглить.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: C9.1 и виртуальная клавиатуара

Сообщение Игорь Столяров »

Ну как сказано в описании GetSystemMetrics "Извлекает метрики и НАСТРОЙКИ системы".
В Win7 поддерживается ввод Touch устройств - поэтому все верно.
Наверно значение 0 будет возвращаться там где нет такой возможности в конфигурации системы, например в WinXP ...
Make Clarion Great Again ! 😎
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: C9.1 и виртуальная клавиатуара

Сообщение kreator »

Параметр SM_TABLETPC вряд ли нужен, он не про то. Возврат 1 может быть вызван действительно мышью, я на работе проверю на другом ПК (пока в отпуске). В принципе, можно поставить условие ">1", устройства сейчас, как правило, мультитач.
А так подрихтовал класс EnhancedFocusClassType. Сейчас так. Если пользователь встаёт на поле с клавиатурным вводом (не буду их перечислять, есть для этого отдельный метод в нашем классе), то виртуальная клавиатура (ВК) выезжает (так и было). Если далее пользователь переходит на такое же поле, то ВК остаётся (было - ВК остаётся всегда). Если пользователь переходит на поле без ввода с клавиатуры, то ВК уезжает (у меня влево, за экран, виден маленький кусочек). Если пользователь закрывает окно, то тоже ВК уезжает (в классе почему-то это событие не отрабатывалось). Получилось, по крайней мере, логично, зачем всё время самому убирать ВК. Если кому надо, могу EFOCUS.CLW выложить, каждое поле каждого окна обрабатывать запаришься ведь. Отдельная благодарность Игорю за код по закрытию ВК, а то бы ещё пару дней потратил бы на поиск. Кстати, Игорь, не знаешь, можно ли управлять координатами ВК, а то она всегда выплывает в центр экрана. А, если её пристыковать, например, к низу, то она занимает столько места, что мама не горюй, на горизонтально ориентированных устройствах не красиво.
We are hard at work… for you. :)
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8031
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: C9.1 и виртуальная клавиатуара

Сообщение Игорь Столяров »

kreator писал(а):можно ли управлять координатами ВК, а то она всегда выплывает в центр экрана
Не знаю. По моему разумению - использование всплывающей клавиатуры в Win7 можно только для отладки или как демонстрация возможности.
А вот на планшете с Win8 экранная клавиатура уже совсем другая, работать с ней удобно и таких вопросов не возникает ... ;)

Именно поэтому, на мой субъективный взгляд, не совсем удобен автовызов клавиатуры на полях.
Кроме логики - есть технические ограничения и удобство использования.

Экранная клавиатура в Win8 занимает значительную часть экрана планшета (от половины до четверти) и закрывает форму ввода.
Мы сделали кнопку в форме. Если пользователю нужна клавиатура для изменения значения поля - он нажимает кнопку
вызова клавиатуры и может изменять текущее поле. Уходит с поля - клавиатура закрывается.
Автовызов используется только на полях, переход на которые сразу подразумевает ввод данных - например ввод строки поиска и т.д.
Make Clarion Great Again ! 😎
kreator
✯ Ветеран ✯
Сообщения: 5161
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: C9.1 и виртуальная клавиатуара

Сообщение kreator »

Игорь Столяров писал(а):По моему разумению - использование всплывающей клавиатуры в Win7 можно только для отладки или как демонстрация возможности.
Согласен. Надо на планшете смотреть. На работе планшет пока забрали (этап выполнен), так что либо обратно попросим, либо нужно другой купить.
Игорь Столяров писал(а):Если пользователю нужна клавиатура для изменения значения поля - он нажимает кнопку
вызова клавиатуры и может изменять текущее поле.

Я сейчас пользуюсь Windows Phone, а там так - если выбрал поле ввода, то клавиатура появляется (впрочем, на сенсорных телефонах, что я видел, везде так). Пока не представляю варианта "выбрать поле и не редактировать".
А что касается функции GetSystemMetrics, то пришла такая мысль. Сейчас же много всяких гибридных планшетов, ультрабуков 2-в-1, да и просто блютуз клавиатур. А монитор сенсорный. А пользователь будет работать обычной мышью и клавиатурой. Получается надо давать пользовательскую настройку для работы с виртуальной клавиатурой.
We are hard at work… for you. :)
Ответить