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

Читать онлайн.
Название Программирование в Delphi. Трюки и эффекты
Автор произведения Александр Чиртик
Жанр Программирование
Серия
Издательство Программирование
Год выпуска 2010
isbn 978-5-49807-118-3



Скачать книгу

можно изменить (листинг 3.15).

Листинг 3.15. Изменение начертания шрифта

      procedureTForm1. cmbItalicBoldMouseMove (Sender: TObject;

        Shift: TShiftState; X, Y: Integer);

      begin

      cmbItalicBold.Font.Style:= [fsItalic, fsBold];

      end;

      procedure TForm1.lblItalicMouseEnter(Sender: TObject);

      begin

      lblItalic.Font.Style:= [fsItalic];

      end

      В листинге 3.15 используется обработчик MouseMove для кнопки потому, что обработчики событий MouseEnter и MouseLeave для нее (по крайней мере, с вкладки Standard) не предусмотрены.

      Клавиатура

      Клавиатура является основным средством ввода информации в компьютер, поэтому не будем обходить стороной и рассмотрим некоторые не так часто используемые или не такие очевидные возможности работы с ней. В этом разделе вы научитесь определять тип клавиатуры, а также будет разработана программа опроса клавиатуры. Также будет рассказано, как программным способом имитировать нажатия клавиш, и разработана программа «Бегущие огни на клавиатуре».

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

      Начнем с небольшого примера, позволяющего определить некоторую информацию о клавиатуре (листинг 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,