Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2015, 19:04   #1
Winexcel
Форумчанин
 
Регистрация: 26.08.2013
Сообщений: 187
По умолчанию MapVirtualKeyEx получение виртуального кода клавиши

Доброго времени суток! Прошу помощи, не могу получить виртуальный код клавиши русской буквы, учитывая раскладку, как я пробовал получить:
Способ 1:
Код:
var
	i:integer;
	keybLayout: HKL;
begin
	LoadKeyboardLayout(PChar('00000419'), KLF_ACTIVATE);
	KeybLayout:=GetKeyboardLayout(0);
	i:=MapVirtualKeyEx(30, MAPVK_VSC_TO_VK, KeybLayout); 
	memo1.Lines.Add(inttostr(i));
Здесь я попытался перевести скан-код клавиши в виртуальный код, но попытки тщетны, на выходе получил :
Код:
65
Пробовал ещё и так:
Код:
c:='ф';
h:=LoadKeyboardLayout(PChar('00000419'), KLF_ACTIVATE);
i:=vkkeyscanex(c,h);
memo1.Lines.Add(inttostr(i));
Но также не обвенчалось успехом, что же я не так делаю?
Winexcel вне форума Ответить с цитированием
Старый 19.11.2015, 19:15   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
30,
Это что за 30 такое?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.11.2015, 19:18   #3
Winexcel
Форумчанин
 
Регистрация: 26.08.2013
Сообщений: 187
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это что за 30 такое?
Это скан-код клавиши
Winexcel вне форума Ответить с цитированием
Старый 21.11.2015, 09:32   #4
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

не понял, что за виртуальный код клавиши русской буквы? код ASCII-символа?
если да, то
Код:
function GetCharFromVirtualKey(Key: Word): string;
var
    keyboardState: TKeyboardState;
    asciiResult: Integer;
begin
    GetKeyboardState(keyboardState) ;

    SetLength(Result, 2) ;
    asciiResult := ToAscii(key, MapVirtualKey(key, 0), keyboardState, @Result[1], 0) ;
    case asciiResult of
      0,2: Result := '';
      1: SetLength(Result, 1) ;
      else
        Result := '';
    end;
end;

var
t,t2 : string;
b : byte;

      t := GetCharFromVirtualKey(<код клавиши>);
      b := Byte(t[1]);
      t2 := IntToStr(b);
BLACK_RAIN вне форума Ответить с цитированием
Старый 21.11.2015, 10:02   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
что за виртуальный код клавиши русской буквы?
Это код клавиши, не зависимый от раскладки клавиатуры. MapVirtualKey как раз декодирует этот сканкод (по факту это номер клавиши в процессоре клавиатурном) относительно раскладки.
Цитата:
Это скан-код клавиши
Но ты, я так понимаю, хочешь туда передавать из параметра функции код? или нет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.11.2015, 10:15   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

автор, а нафига тебе эти бубнотанцы с винапи? что у тебя за цель?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 21.11.2015, 14:33   #7
Winexcel
Форумчанин
 
Регистрация: 26.08.2013
Сообщений: 187
По умолчанию

Проблема решена. Можно закрывать, решение :
Код:
function Chr_To_Vk(symbol:Char):SmallInt;
var
VK:SmallInt;
FEarly, FLast:SmallInt;
begin
VK:=$0410;
//case Upper symbol
if UpperCase(symbol) = symbol then begin
if symbol = 'Ё' then Result := $0401 else
begin
FEarly := ord('А');
FLast := Ord(symbol);
Result := VK + (FLast - FEarly);
end;
end else
begin
if symbol = 'ё' then Result := $0451 else
begin
FEarly := ord('а');
FLast := Ord(symbol);
Result := VK + (FLast - FEarly);
end;
end;
end;
Winexcel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват нажатий клавиш и изменение кода клавиши an1s1 Win Api 1 22.09.2012 21:27
Горячие клавиши редактора кода. dimavit Общие вопросы Delphi 1 04.08.2012 11:38
Получения кода нажатой клавиши _PROGRAMM_ Win Api 8 11.02.2012 22:56
Определение кода нажатой клавиши Fataller Общие вопросы C/C++ 8 07.11.2009 19:29
Чем отличается скан-код от виртуального кода клавиши? The_Darkness Помощь студентам 2 18.07.2008 17:01