Страница 1 из 1
Подмена нажатия клавишы
Добавлено: 04 Октябрь 2010, 16:48
muskin
Добрый день.
Подскажите, пожалуйста, как подменить нажатие одной клавиши другой.
На форму повесил Alert(Key2, например) и при обработке по событию PreAlert пытаюсь использовать presskey(188), например.
Получается какая-то ерунда. Коды же из keycodes.clw подсовываются нормально.
Что не так делаю?
И еще, как можно сымитировать последовательность нажатий клавиш, например, '0' '1' '8' '8' при удержанном ALT-е?
Заранее благодарен за ответ.
C6, ABC.
Re: Подмена нажатия клавишы
Добавлено: 05 Октябрь 2010, 16:45
kreator
Ничего не понятно. Presskey наверняка отрабатывается, только с ходу не назову чей код 188. А по второй части - presskey(Alt0), presskey(Alt1), presskey(Alt8), presskey(Alt8).
Re: Подмена нажатия клавишы
Добавлено: 05 Октябрь 2010, 21:10
muskin
По второй части я имел ввиду ввод символа через Alt-комбинацию - при удерживаемом Alt-е нажать последовательно на доп.клавиатуре 0, 1, 8 и 8.
По первой части не важно, что стоит за кодом 188 или 187 (конкретно - это символы 'ј' и '»').
Понять не могу, почему код
case keycode()
of Key2
presskey(88)
.
нормально заменяет в поле Entry 2 на x, а, например, код
case keycode()
of Key2
presskey(188)
.
- вместо символа 'ј' выводит запятую?
Re: Подмена нажатия клавишы
Добавлено: 06 Октябрь 2010, 10:37
Admin
muskin писал(а):вместо символа 'ј' выводит запятую?
В некоторых программах код 0188 не то же самое что и 188.
Можешь проверить в редакторе notepad и в программе сharmap. Зависит от шрифта и еще х.з. от чего... может от юникода.
В обоих ввод по разному работает...
Если при вводе нужно сделать подмену символов то наверное проще на событие на Entry поле повесить замену нужных символов.
Точно не помню но кажется если поставить полю IMM будет срабатывать EVENT:NewSelection
Ну и первым оператором кажется в коде нужно будет UPDATE написать, но не уверен...

Re: Подмена нажатия клавишы
Добавлено: 10 Октябрь 2010, 2:11
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().
Я в тупике. Что я не так делаю?
Re: Подмена нажатия клавишы
Добавлено: 14 Октябрь 2010, 19:55
kreator
Я так понимаю - здесь путаница параметров. Presskey использует одни параметры, а CHR - другие. И никак они не связаны. Кода нажатия клавиатуры 188 (00BCH) не существует ни в equates.clw ни в Windows ИМХО. Поэтому presskey не отрабатывается. Я бы сделал через IMM и chr.