Форум: "Начинающим";
Текущий архив: 2006.06.04;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.06 c