Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.04;
Скачать: CL | DM;

Вниз

VkKeyScan работает только для латинских символов   Найти похожие ветки 

 
Mr tray   (2006-05-20 00:33) [0]

VkKeyScan работает только для латинских символов. нужно ли делать транслитерацую, чтобы узнать виртуальный код клавиши с какой то русской буквой? или существует готовая функция?


 
begin...end ©   (2006-05-20 10:18) [1]

> Mr tray   (20.05.06 00:33)

> VkKeyScan работает только для латинских символов.

Вы ошибаетесь. Она работает для любых символов и возвращает виртуальный код клавиши в соответствии с текущей раскладкой клавиатуры. Если нужно получать код не для текущей раскладки, а указывать её явно, используйте VkKeyScanEx.


 
Mr tray   (2006-05-20 16:12) [2]

слушайте. что то у меня не выходит. использую LoadKeyboardLayout.
c:="s";
h:=LoadKeyboardLayout("00000409",KLF_ACTIVATE);{активируется US English}
c:=chr(vkkeyscanex(c,h));
получаем c="s". Но при KLF_ACTIVATE активируется указанная мною раскладка, чего мне не нужно. Мне надо получить только хендл раскладки. А при всех остальных флагах с="ы". можно ли, не активируя раскладку, получить её хэндл?


 
Mr tray   (2006-05-20 16:36) [3]


> получаем c="s"

извините.
код вот такой
c:="s";
h:=LoadKeyboardLayout("00000409",KLF_ACTIVATE);{активируется US English}
i:=vkkeyscanex(c,h);
получаем с = код клавиши S (ы)


 
Mr tray   (2006-05-20 16:36) [4]


> с = код клавиши S (ы)


i = код клавиши S (ы)


 
begin...end ©   (2006-05-20 16:45) [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:55) [6]

а если я посылаю код клавиши S (ы) на окно, у которого раскладка Ru, то у него напечатается "ы", а если En - то "s" ?


 
Mr tray   (2006-05-20 16:56) [7]

то есть посылаю WM_KEYDOWN


 
begin...end ©   (2006-05-20 19:29) [8]

> 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 21:11) [9]

спасибо



Страницы: 1 вся ветка

Текущий архив: 2006.06.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.047 c
15-1146669328
Leonid Troyanovsky
2006-05-03 19:15
2006.06.04
Sorry


2-1147790737
Mr tray
2006-05-16 18:45
2006.06.04
есть какие то ситуации, когда использование packed обязательно?


15-1147346800
REA
2006-05-11 15:26
2006.06.04
Все продано


2-1146751850
DAn13
2006-05-04 18:10
2006.06.04
TreeView


15-1146932102
Anatoly Podgoretsky
2006-05-06 20:15
2006.06.04
Купил монитор