Delphi: конвертируйте ключи в буквы, игнорируя сдвиг - PullRequest
1 голос
/ 11 ноября 2010

Я пытаюсь создать функцию поиска, где пользователь может удерживать клавишу управления и вводить текст для поиска.Я использую OnKeyDown / OnKeyUp, чтобы перехватить управляющий ключ.

Есть ли простой способ проверить, является ли ключевой параметр, данный событию onKeyUp / Down, буквальным?Или можно преобразовать символ, указанный в OnKeyPressed, удерживая нажатой клавишу управления, в тот символ, который был бы, если бы клавиша управления не была нажата?

Редактировать:
Мне нужно решение, которое может справитьсябуквы за пределами простого диапазона a..z, такие как æ, ø å.

Похоже, Delphi 2009 получил пару полезных методов в классе TCharachter;например function IsLetterOrDigit(C: Char): Boolean;

Я застрял в Delphi 2007, хотя ...

Ответы [ 3 ]

2 голосов
/ 11 ноября 2010

События OnKeyDown и OnKeyPress имеют ряд ограничений.

Скорее используйте TApplicationEvents Компонент.

В его OnShortCut Hander событий используется следующий код

procedure TFormA.ApplicationEvents1ShortCut(var Msg: TWMKey; var Handled: Boolean);
begin
  if (Msg.CharCode = Ord('B')) and (HiWord(Msg.KeyData) and KF_ALTDOWN <> 0)  then
  begin
    Handled := True;
   // Do what needs to be done;
  end;

end;

Это будет ловушка ALT-B

посмотрите на Delphi - Использование события OnShortCut TApplicationEvents для обнаружения нажатий клавиш Alt + C для получения дополнительной информации

0 голосов
/ 11 ноября 2010
0 голосов
/ 11 ноября 2010

Вы можете преобразовать параметр Key (Char) из события OnKeyPress в его порядковое значение, используя Ord (Key), однако в событии OnKeyDown вы можете выполнить следующие действия:

if CharInSet(Char(Key), ['A'..'Z']) then
  do something

, которые вы также можете захотеть воспроизвестис ShiftState, чтобы проверить, не нажаты ли клавиши ALT, CTRL и / или SHIFT ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...