Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо