Карта сайта 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.


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

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:52:39/0.0036299228668213/0