Здравствуйте, Мастера!
Пишу игрушку, но появились траблы при обработке нажатий клавиш.
Управление типа WASD, поэтому проверку нажатий осуществляю функцией:
procedure iskeydown(c: Char): boolean;
var
vk: integer;
begin
vk := VkKeyScan(c) and $FF;
if vk <> $FF then
Result := (GetAsyncKeyState(vk)<0)
else Result := False;
end;
В действии это выглядит так:
if iskeydown('w') then Player.Go(dForward);
Но по-умолчанию у многих стоит раскладка, являющаяся стандартной для проживающей страны (Русская, Украинская, Итальянская, пр...).
Чтобы избавиться от этого я в Form.Create добавил:
LoadKeyboardLayout('00000409', KLF_ACTIVATE);
При этом языковая панель Windows показывает, что текущий язык Английский, но обработка клавиш не происходит, поэтому мне приходится переключать сначала на русский язык, а потом снова на английский и только тогда программа начинает обрабатывать нажатия клавиш.