Работа с железом
Представьте себе такую ситуацию: глупый пользователь включает тачку, а тут... светомузыка, индикаторы состояния клавиш то включатся, то погаснут... а если ещё каждую секунду проходит 500 тактов!!! Шутка, конечно злостная, но воспроизводится весьма легко.
Всё основывается на следующем коде:
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Клавиатура
Code: |
SelectNext(screen.ActiveControl, True, True); |
Разместите приведенный код в обработчике одного из собитий. SelectNext - защищенный метод TWinControl со следующим прототипом:
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Клавиатура
Как-то бухгалтер, который пользовался моей программой, заявил, что ему не удобно перескакивать пустые поля в форме кнопкой Tab, и что намного удобнее это делать обычным Enter-ом. Предлагаю посмотреть, как я решил эту проблемму.
Совместимость: Все версии Delphi. Автор: Khaled Shagrouni
Пример обработчика события:
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Клавиатура
Code: |
procedure TForm1.Button1Click(Sender: TObject); begin if GetKeyState(VK_SHIFT) < 0 then ShowMessage('Кнопка Shift нажата') else ShowMessage('Обычное нажатие кнопки'); end; |
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Клавиатура
Получаем символ, соответствующий виртуальной клавише:
Code: |
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; } |
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Клавиатура
В примере для глобального перехвата нажатия клавиши print screen регистрируется горячая клавиша (hot key).
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Клавиатура
В приведенном примере показано как определить нажата ли клавиша Shift при выборе строчки меню. Пример также содержит функции проверки состояния клавиш Alt, Ctrl.
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Клавиатура
Code: |
var i : integer; begin i := 0; {запрещаем Ctrl-Alt-Del} SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, @i, 0); end. // необходим unit WinProcs // для Alt-Tab: SPI_SETFASTTASKSWITCH |
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Клавиатура
В событиях, обрабатывающих нажатия клавишь в TForm, клавиша PrintScreen не обрабатывается. Однако проблему можно решить при помощи 'GetAsyncKeyState'. Функция GetAsyncKeyState определяет, когда клавиша была нажата или отпущена каждый раз, когда функция вызвана, а так же, когда клавиша была нажата после предыдущего вызова GetAsyncKeyState.
Событие OnIdle в TApplication как раз подходит для вызова этой API функции:
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Клавиатура
Для этого необходимо написать процедуру-обработчик для Application.OnMessage:
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Клавиатура
Следующий пример демонстрирует проверку состояния клавиши Shift (нажата она или нет), в то время когда выделен пункт меню. А так же в примере содержатся функции, позволяющие определить состояние клавишь Alt, Ctrl, и shift:
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Клавиатура
Страница 7 из 17