Категории
Самые читаемые
ChitatKnigi.com » 🟢Компьютеры и Интернет » Программирование » Программирование в Delphi. Трюки и эффекты - Александр Чиртик

Программирование в Delphi. Трюки и эффекты - Александр Чиртик

Читать онлайн Программирование в Delphi. Трюки и эффекты - Александр Чиртик
1 ... 6 7 8 9 10 11 12 13 14 15
Перейти на страницу:

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать

Получение информации о клавиатуре

Начнем с небольшого примера, позволяющего определить некоторую информацию о клавиатуре (листинг 3.16). Данный пример основан на использовании API-функции GetKeyboardType.

Листинг 3.16. Получение информации о клавиатуре

procedure TForm1.FormCreate(Sender: TObject);

begin

//Определяем тип клавиатуры

case GetKeyboardType(0) of

  1: txt Type.Text:= 'PC/XT или совместимая (83 клавиши)';

2: txt Type.Text xtxt:= 'Olivetti" ICO " (102 клавиши)';

3: txt Type.Text xtxt:= 'PC/AT (84 клавиши) или похожая';

4: txt Type.Text:= 'Расширенная (101 или 102 клавиши)';

5: txt Type.Text:= 'Nokia 1050 или похожая';

6: txt Type.Text:= 'Nokia 9140 или похожая';

7: txt Type.Text:= 'японская';

end;

//Определяем код типа производителя

txtSubtype.Text:= IntToStr(GetKeyboardType(1));

//Определяем количество функциональных клавиш

  txtKeys.Text:= IntToStr(GetKeyboardType(2));

end;

При создании формы происходит заполнение текстовых полей информацией о типе клавиатуры, коде типа, присвоенном производителем, и количестве функциональных клавиш.

На рис. 3.2 показан возможный результат определения информации о клавиатуре.

Рис. 3.2. Информация о клавиатуре

Опрос клавиатуры

Существует достаточно удобная альтернатива обработке событий клавиатурного ввода, которая может оказаться особенно полезной, если необходима информация о состоянии сразу нескольких клавиш. Это может понадобиться, если пользователь должен одновременно удерживать нажатыми несколько клавиш. Например, в гоночных симуляторах, чтобы проезжать поворот, необходимо одновременно удерживать клавишу ↑ (газ) и одну из клавиш поворота (← или →).

В листинге 3.17 приведен пример обработчика события Timer1Timer, определяющего, нажаты ли клавиши ↑, ↓, ←, →, а также пробел, Enter, Ctrl (правый), Shift (правый) и Alt (правый).

Листинг 3.17. Определение состояния некоторых клавиш

procedure TForm1.Timer1Timer(Sender: TObject);

var

buttons: TKeyBoardstate;

begin

//Получаем состояния клавиш

GetKeyboardState(buttons);

//Отобразим состояния клавиш

//..пробел

if buttons[VK_SPACE] and 128 <> 0 then

SendMessage(cmbSpace.Handle, BM_SETSTATE, BST_CHECKED, 0)

else

SendMessage(cmbSpace.Handle, BM_SETSTATE, BST_UNCHECKED, 0);

//..enter

if buttons[VK_RETURN] and 128 <> 0 then

SendMessage(cmbEnter.Handle, BM_SETSTATE, BST_CHECKED, 0)

else

SendMessage(cmbEnter.Handle, BM_SETSTATE, BST_UNCHECKED, 0);

//..правый Ctrl

if buttons[VK_RCONTROL] and 128 <> 0 then

SendMessage(cmbRCtrl.Handle, BM_SETSTATE, BST_CHECKED, 0)

Конец ознакомительного фрагмента.

1 ... 6 7 8 9 10 11 12 13 14 15
Перейти на страницу:
Открыть боковую панель
Комментарии
Вита
Вита 25.04.2025 - 18:05
Прекрасная история... Страстная, ненавязчивая, и не длинная
Лена
Лена 27.03.2025 - 03:08
Горячая история 🔥 да и девчонка не простая! Умничка
Неля
Неля 25.03.2025 - 18:03
Как важно оговаривать все проблемы. Не молчать. Прекрасная история
Михаил
Михаил 16.03.2025 - 02:00
прочитал написано очень читаемо откровенно Спасибо автору и ВАМ
Сергей
Сергей 24.02.2025 - 12:28
Необычная книга