Перехват клавиши 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) был нажат.
Эта строка использует функцию GetKeyState для получения состояния клавиши Shift (VK_SHIFT). Функция HiWord используется для извлечения высокого порядка слова из результата, что указывает на то, нажата ли клавиша. Если результат не равен 0, это означает, что клавиша Shift была нажата.
Если ни одна из этих клавиш не была нажата, то заголовок лейбла будет установлен на "Никакая из управляющих клавиш не нажата" (что переводится как "None of the control keys have been pressed").
Минорное предложение: вы можете использовать оператор case вместо множества операторов if. Это может сделать код более компактным и легче для чтения:
procedureTForm1.Menu11Click(Sender:TObject);begincaseHiWord(GetKeyState(VK_SHIFT))of0:beginifHiWord(GetKeyState(VK_CONTROL))<>0thenLabel1.Caption:='Control'elseifHiWord(GetKeyState(VK_MENU))<>0thenLabel1.Caption:='Alt'elseLabel1.Caption:='Никакая из управляющих клавиш не нажата';end;elseLabel1.Caption:='Shift';end;end;
Таким образом, вы можете упростить логику и сделать ее более простой для добавления дополнительных модификаторов в будущем.
В статье описывается пример программирования на языке Delphi, где демонстрируется перехват клавиши SHIFT при выборе пункта меню.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.