Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Как конвертировать виртуальную клавишу в ASCII код

Delphi , ОС и Железо , Клавиши

Как конвертировать виртуальную клавишу в ASCII код

Получаем символ, соответствующий виртуальной клавише:


function GetCharFromVKey(vkey: Word): string;
var
  keystate: TKeyboardState;
  retcode: Integer;
begin
  Win32Check(GetKeyboardState(keystate));
  SetLength(Result, 2);
  retcode := ToAscii(vkey,
    MapVirtualKey(vkey, 0),
    keystate, @Result[1],
    0);
  case retcode of
    0: Result := '';
    1: SetLength(Result, 1);
    2: ;
  else
    Result := '';
  end;
end;

// Использование:

procedure TForm1.Edit1KeyDown
  (Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  ShowMessage(GetCharFromVKey(Key));
end;

Here is the translation of the text into Russian:

Код, который вы опубликовали, - это функция Delphi для преобразования кода виртуальной клавиши в символ ASCII. Эта функция использует функции ToAscii и MapVirtualKey из Windows API, а также текущее состояние клавиатуры.

Вот как она работает:

  1. Функция GetKeyboardState заполняет запись TKeyboardState информацией о текущем состоянии клавиатуры.
  2. Процедура SetLength устанавливает длину строки Result в 2 (потому что мы будем хранить два символа).
  3. Функция ToAscii берет код виртуальной клавиши, maps ее в символ ASCII с помощью функции MapVirtualKey и хранит результат в первом элементе массива Result.
  4. Функция затем проверяет возвращаемое значение из ToAscii. Если оно равно 0, то нет карты для кода виртуальной клавиши (что unlikely), поэтому мы устанавливаем строку Result в пустую строку. Если возвращаемое значение равно 1, то одиночный символ был mapped, и мы устанавливаем длину строки Result в 1. В других случаях функция ничего не делает.

Вот пример использования этой функции в вашем коде:

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  ShowMessage(GetCharFromVKey(Key));
end;

В этом примере, когда клавиша нажата в контролле Edit1, функция GetCharFromVKey вызывается с кодом виртуальной клавиши, нажатой клавиши. Результат затем отображается в всплывающем окне.

Вот альтернативное решение, которое обрабатывает больше случаев:

function GetCharFromVKey(vkey: Word): string;
var
  keystate: TKeyboardState;
  retcode: Integer;
begin
  Win32Check(GetKeyboardState(keystate));
  SetLength(Result, 2);
  retcode := ToAscii(vkey,
    MapVirtualKey(vkey, 0),
    keystate,
    @Result[1],
    0);

  case retcode of
    0: Result := '';
    1: begin
         SetLength(Result, 1);
       end;
    2..255: Result := Copy(Chr(retcode), 1, 1);
    else
      Result := '';
  end;
end;

Альтернативная функция обрабатывает случай, когда ToAscii возвращает значение между 2 и 255 (включительно). В этом случае она использует функцию Chr для преобразования возвращаемого значения в символ ASCII и хранит его в строке Result.

Конвертация виртуальной клавиши в ASCII код позволяет получить символ, соответствующий нажатой клавише, используя функцию GetCharFromVKey.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Клавиши ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100

Время компиляции файла: 2024-05-19 17:53:24
2024-05-20 01:15:13/0.0049490928649902/2