Добрый день.
Подскажите, пожалуйста, как подменить нажатие одной клавиши другой.
На форму повесил Alert(Key2, например) и при обработке по событию PreAlert пытаюсь использовать presskey(188), например.
Получается какая-то ерунда. Коды же из keycodes.clw подсовываются нормально.
Что не так делаю?
И еще, как можно сымитировать последовательность нажатий клавиш, например, '0' '1' '8' '8' при удержанном ALT-е?
Заранее благодарен за ответ.
C6, ABC.
Подмена нажатия клавишы
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- ✯ Ветеран ✯
- Сообщения: 4983
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
Re: Подмена нажатия клавишы
Ничего не понятно. Presskey наверняка отрабатывается, только с ходу не назову чей код 188. А по второй части - presskey(Alt0), presskey(Alt1), presskey(Alt8), presskey(Alt8).
We are hard at work… for you.
Re: Подмена нажатия клавишы
По второй части я имел ввиду ввод символа через Alt-комбинацию - при удерживаемом Alt-е нажать последовательно на доп.клавиатуре 0, 1, 8 и 8.
По первой части не важно, что стоит за кодом 188 или 187 (конкретно - это символы 'ј' и '»').
Понять не могу, почему код
case keycode()
of Key2
presskey(88)
.
нормально заменяет в поле Entry 2 на x, а, например, код
case keycode()
of Key2
presskey(188)
.
- вместо символа 'ј' выводит запятую?
По первой части не важно, что стоит за кодом 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: Подмена нажатия клавишы
В некоторых программах код 0188 не то же самое что и 188.muskin писал(а):вместо символа 'ј' выводит запятую?
Можешь проверить в редакторе notepad и в программе сharmap. Зависит от шрифта и еще х.з. от чего... может от юникода.
В обоих ввод по разному работает...
Если при вводе нужно сделать подмену символов то наверное проще на событие на Entry поле повесить замену нужных символов.
Точно не помню но кажется если поставить полю IMM будет срабатывать EVENT:NewSelection
Ну и первым оператором кажется в коде нужно будет UPDATE написать, но не уверен...
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Re: Подмена нажатия клавишы
Опишу свою проблему полнее.
Пытаюсь вводить и выводить символы казахского языка (к обычной кирилице добавляется еще 9 национальных знаков).
Для этого взял, например, Microsoft Sans Serif, заменил неиспользуемые символы (например, 188, 179, 190 и т.д.) на вышеупомянутые знаки.
Переименованный файл шрифта динамически загружаю в память.
Полей ввода очень много, поэтому каждое обрабатывать с помощью IMM очень громоздко, легче повесить на каждое окно Alrt-ы и обрабатывать нажатия этих девяти клавиш с помощью лишь одной глобальной процедуры.
Для события PreAlertKey назначаю код:
Теоретически все должно работать, судя по Help-у никаких ограничений на keycodes нет, но программа выдает не то, что хотелось бы (или не тот знак, или залипание Ctrl-a, или запуск нескольких программ и т.д.).
Хотя, если 'поле'=chr(188) или та же ALT-последовательность Alt0188 - в поле выводится нужный символ.
Не хотелось бы связываться с setclipboard().
Я в тупике. Что я не так делаю?
Пытаюсь вводить и выводить символы казахского языка (к обычной кирилице добавляется еще 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
Хотя, если 'поле'=chr(188) или та же ALT-последовательность Alt0188 - в поле выводится нужный символ.
Не хотелось бы связываться с setclipboard().
Я в тупике. Что я не так делаю?
Всем пралитарское Спасибо и 'Желаю, чтобы ВСЕ !!!'
-
- ✯ Ветеран ✯
- Сообщения: 4983
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 7 раз
- Поблагодарили: 20 раз
Re: Подмена нажатия клавишы
Я так понимаю - здесь путаница параметров. Presskey использует одни параметры, а CHR - другие. И никак они не связаны. Кода нажатия клавиатуры 188 (00BCH) не существует ни в equates.clw ни в Windows ИМХО. Поэтому presskey не отрабатывается. Я бы сделал через IMM и chr.
We are hard at work… for you.