Категории
Самые читаемые
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
Перейти на страницу:
Открыть боковую панель
Комментарии
Жанна
Жанна 27.07.2025 - 01:48
Люблю настоящих мужчин. Главный герой, именно такой.
Майя
Майя 25.07.2025 - 01:56
Благодарю за рассказ. Не растянуто и очень интересно
Руслана
Руслана 17.06.2025 - 12:59
Замечательные рекомендации по подбору персонала 👏
Елизавета
Елизавета 16.05.2025 - 16:36
Осилила только первую страницу, как можно вообще такую муть писать, не видела, случайно, в лифте, не узнала своего босса. Это же детский сад. Все как под копирку, еще застряли в лифте, случайно не