![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
VkKeyScan работает только для латинских символов [D6, XP]
Mr tray © (2006-05-20 00:33:00)VkKeyScan работает только для латинских символов. нужно ли делать транслитерацую, чтобы узнать виртуальный код клавиши с какой то русской буквой? или существует готовая функция?
Mr tray (2006-05-20 21:11:00) [1]спасибо
begin...end (2006-05-20 19:29:00) [2]> Mr tray (20.05.06 16:55) [6]
> Mr tray (20.05.06 16:56) [7]
Если Вы посылаете окну WM_KEYDOWN, то ему и придёт WM_KEYDOWN -- с виртуальным кодом клавиши, который был указан. "Напечатает" ли окно что-нибудь в ответ -- это его (окна), сугубо личное дело. Например, стандартное поле ввода (EDIT) ничего не напечатает.
Если Вы посылаете окну WM_KEYDOWN асинхронно (через PostMessage), то ему, кроме WM_KEYDOWN, придёт потом ещё и WM_CHAR, сгенерированное вызовом TranslateMessage на основе WM_KEYDOWN (если, конечно, в цикле обработки сообщений потока, которому принадлежит окно, есть вызов TranslateMessage). То, с каким кодом символа это WM_CHAR придёт -- да, зависит от раскладки клавиатуры потока во время исполнения TranslateMessage. Как реагировать на WM_CHAR -- опять решает само окно (в своей оконной процедуре). Оно может напечатать этот символ (как это делает стандартный EDIT), может напечатать какой-нибудь другой символ, а может и ничего не напечатать.
Mr tray (2006-05-20 16:56:00) [3]то есть посылаю WM_KEYDOWN
Mr tray (2006-05-20 16:55:00) [4]а если я посылаю код клавиши S (ы) на окно, у которого раскладка Ru, то у него напечатается "ы", а если En - то "s" ?
begin...end (2006-05-20 16:45:00) [5]> Mr tray (20.05.06 16:12) [2]
> Но при KLF_ACTIVATE активируется указанная мною раскладка,
> чего мне не нужно.
Тогда почему Вы указываете KLF_ACTIVATE?
У меня при выполнении кодаVkKeyScanEx('s', LoadKeyboardLayout('00000409', 0))ничего не активируется, и возвращается код 'S'.
Mr tray (2006-05-20 16:36:00) [6]
> получаем c='s'
извините.
код вот такой
c:='s';
h:=LoadKeyboardLayout('00000409',KLF_ACTIVATE);{активируется US English}
i:=vkkeyscanex(c,h);
получаем с = код клавиши S (ы)
Mr tray (2006-05-20 16:36:00) [7]
> с = код клавиши S (ы)
i = код клавиши S (ы)
Mr tray (2006-05-20 16:12:00) [8]слушайте. что то у меня не выходит. использую LoadKeyboardLayout.
c:='s';
h:=LoadKeyboardLayout('00000409',KLF_ACTIVATE);{активируется US English}
c:=chr(vkkeyscanex(c,h));
получаем c='s'. Но при KLF_ACTIVATE активируется указанная мною раскладка, чего мне не нужно. Мне надо получить только хендл раскладки. А при всех остальных флагах с='ы'. можно ли, не активируя раскладку, получить её хэндл?
begin...end (2006-05-20 10:18:00) [9]> Mr tray (20.05.06 00:33)
> VkKeyScan работает только для латинских символов.
Вы ошибаетесь. Она работает для любых символов и возвращает виртуальный код клавиши в соответствии с текущей раскладкой клавиатуры. Если нужно получать код не для текущей раскладки, а указывать её явно, используйте VkKeyScanEx.