Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Перехват клавиши SHIFT во время выбора пункта меню

Delphi , Компоненты и Классы , Меню

Перехват клавиши SHIFT во время выбора пункта меню

Пришел програмист в гости к пианисту. Очень долго ходил вокруг рояля и озвучивает свои наблюдения:
- Клавиатура не стандартная - 64 клавиши вместо 101, половина из них функциональные, но вот shift ногой нажимать-оригинально!


procedure TForm1.Menu11Click(Sender: TObject);
begin
  {Проверяем нажатость клавиши Shift}
  if HiWord(GetKeyState(VK_SHIFT)) <> 0 then
    Label1.Caption := 'Shift'
  else
    {Проверяем нажатость клавиши Ctrl} if HiWord(GetKeyState(VK_CONTROL)) <> 0
      then
      Label1.Caption := 'Control'
    else
      {Проверяем нажатость клавиши Alt} if HiWord(GetKeyState(VK_MENU)) <> 0
        then
        Label1.Caption := 'Alt'
      else
        Label1.Caption := 'Никакая из управляющих клавиш не нажата';
end;

Программа на Delphi, которая поймывает нажатие клавиши Shift при выборе пункта меню! Это отличная идея.

Давайте разберемся в коде:

Процедура Menu11Click вызывается, когда пользователь выбирает пункт "Menu 11". Внутри этой процедуры мы имеем три условных проверки, чтобы определить, какой модификаторный клавиш (Shift, Ctrl или Alt) был нажат.

Вот, что каждая проверка делает:

if HiWord(GetKeyState(VK_SHIFT)) <> 0 then
  Label1.Caption := 'Shift';

Эта строка использует функцию GetKeyState для получения состояния клавиши Shift (VK_SHIFT). Функция HiWord используется для извлечения высокого порядка слова из результата, что указывает на то, нажата ли клавиша. Если результат не равен 0, это означает, что клавиша Shift была нажата.

Две другие проверки аналогичны:

if HiWord(GetKeyState(VK_CONTROL)) <> 0 then
  Label1.Caption := 'Control';

Это проверяет клавишу Ctrl (VK_CONTROL).

if HiWord(GetKeyState(VK_MENU)) <> 0 then
  Label1.Caption := 'Alt';

И это проверяет клавишу Alt (VK_MENU).

Если ни одна из этих клавиш не была нажата, то заголовок лейбла будет установлен на "Никакая из управляющих клавиш не нажата" (что переводится как "None of the control keys have been pressed").

Минорное предложение: вы можете использовать оператор case вместо множества операторов if. Это может сделать код более компактным и легче для чтения:

procedure TForm1.Menu11Click(Sender: TObject);
begin
  case HiWord(GetKeyState(VK_SHIFT)) of
    0: begin
         if HiWord(GetKeyState(VK_CONTROL)) <> 0 then
           Label1.Caption := 'Control'
         else if HiWord(GetKeyState(VK_MENU)) <> 0 then
           Label1.Caption := 'Alt'
         else
           Label1.Caption := 'Никакая из управляющих клавиш не нажата';
       end;
    else
      Label1.Caption := 'Shift';
  end;
end;

Таким образом, вы можете упростить логику и сделать ее более простой для добавления дополнительных модификаторов в будущем.

В статье описывается пример программирования на языке Delphi, где демонстрируется перехват клавиши SHIFT при выборе пункта меню.


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

Получайте свежие новости и обновления по 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 13:21:52/0.0057780742645264/1