Подмена нажатия клавишы

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
muskin
Активист
Сообщения: 114
Зарегистрирован: 08 Декабрь 2009, 21:16
Откуда: РК

Подмена нажатия клавишы

Сообщение muskin »

Добрый день.
Подскажите, пожалуйста, как подменить нажатие одной клавиши другой.
На форму повесил Alert(Key2, например) и при обработке по событию PreAlert пытаюсь использовать presskey(188), например.
Получается какая-то ерунда. Коды же из keycodes.clw подсовываются нормально.
Что не так делаю?
И еще, как можно сымитировать последовательность нажатий клавиш, например, '0' '1' '8' '8' при удержанном ALT-е?
Заранее благодарен за ответ.
C6, ABC.
Всем пралитарское Спасибо и 'Желаю, чтобы ВСЕ !!!'
kreator
✯ Ветеран ✯
Сообщения: 4983
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Re: Подмена нажатия клавишы

Сообщение kreator »

Ничего не понятно. Presskey наверняка отрабатывается, только с ходу не назову чей код 188. А по второй части - presskey(Alt0), presskey(Alt1), presskey(Alt8), presskey(Alt8).
We are hard at work… for you. :)
Аватара пользователя
muskin
Активист
Сообщения: 114
Зарегистрирован: 08 Декабрь 2009, 21:16
Откуда: РК

Re: Подмена нажатия клавишы

Сообщение muskin »

По второй части я имел ввиду ввод символа через Alt-комбинацию - при удерживаемом Alt-е нажать последовательно на доп.клавиатуре 0, 1, 8 и 8.
По первой части не важно, что стоит за кодом 188 или 187 (конкретно - это символы 'ј' и '»').
Понять не могу, почему код
case keycode()
of Key2
presskey(88)
.
нормально заменяет в поле Entry 2 на x, а, например, код
case keycode()
of Key2
presskey(188)
.
- вместо символа 'ј' выводит запятую?
Всем пралитарское Спасибо и 'Желаю, чтобы ВСЕ !!!'
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Re: Подмена нажатия клавишы

Сообщение Admin »

muskin писал(а):вместо символа 'ј' выводит запятую?
В некоторых программах код 0188 не то же самое что и 188.
Можешь проверить в редакторе notepad и в программе сharmap. Зависит от шрифта и еще х.з. от чего... может от юникода.
В обоих ввод по разному работает...
Если при вводе нужно сделать подмену символов то наверное проще на событие на Entry поле повесить замену нужных символов.
Точно не помню но кажется если поставить полю IMM будет срабатывать EVENT:NewSelection
Ну и первым оператором кажется в коде нужно будет UPDATE написать, но не уверен... :)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
muskin
Активист
Сообщения: 114
Зарегистрирован: 08 Декабрь 2009, 21:16
Откуда: РК

Re: Подмена нажатия клавишы

Сообщение muskin »

Опишу свою проблему полнее.
Пытаюсь вводить и выводить символы казахского языка (к обычной кирилице добавляется еще 9 национальных знаков).
Для этого взял, например, Microsoft Sans Serif, заменил неиспользуемые символы (например, 188, 179, 190 и т.д.) на вышеупомянутые знаки.
Переименованный файл шрифта динамически загружаю в память.
Полей ввода очень много, поэтому каждое обрабатывать с помощью IMM очень громоздко, легче повесить на каждое окно Alrt-ы и обрабатывать нажатия этих девяти клавиш с помощью лишь одной глобальной процедуры.
Для события PreAlertKey назначаю код:

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

IF GetKeyboardLayout(0)=71238719 then    !kz-раскладка
          case Keycode()
            of Key2
                presskey(188) 
            of Key3
                presskey(179) 
                        .......
          end                
end
Теоретически все должно работать, судя по Help-у никаких ограничений на keycodes нет, но программа выдает не то, что хотелось бы (или не тот знак, или залипание Ctrl-a, или запуск нескольких программ и т.д.).
Хотя, если 'поле'=chr(188) или та же ALT-последовательность Alt0188 - в поле выводится нужный символ.
Не хотелось бы связываться с setclipboard().
Я в тупике. Что я не так делаю?
Всем пралитарское Спасибо и 'Желаю, чтобы ВСЕ !!!'
kreator
✯ Ветеран ✯
Сообщения: 4983
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 7 раз
Поблагодарили: 20 раз

Re: Подмена нажатия клавишы

Сообщение kreator »

Я так понимаю - здесь путаница параметров. Presskey использует одни параметры, а CHR - другие. И никак они не связаны. Кода нажатия клавиатуры 188 (00BCH) не существует ни в equates.clw ни в Windows ИМХО. Поэтому presskey не отрабатывается. Я бы сделал через IMM и chr.
We are hard at work… for you. :)
Ответить