Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебники 6012.doc
Скачиваний:
4
Добавлен:
01.05.2022
Размер:
126.46 Кб
Скачать

Получение типа клавиатуры и количества функциональных клавиш

Вывод типа клавиатуры осуществляется компонентой Edit1. Количество функциональных клавиш отражается компонентой Edit2. 

TEdit *Edit1;  TEdit *Edit2;  void main()  {  int keyboard_type_num;  AnsiString keyboard_type[]={"IBM® PC/XTд or compatible (83-key) keyboard",  "Olivetti® \"ICO\" (102-key) keyboard",  "IBM AT® (84-key) or similar keyboard",  "IBM enhanced (101- or 102-key) keyboard",  "Nokia® 1050 and similar keyboards",  "Nokia 9140 and similar keyboards",  "Japanese keyboard"};  keyboard_type_num=GetKeyboardType(0);  if (keyboard_type_num--) Edit1 >Text=keyboard_type[keyboard_type_num];    else Edit1->Text="Error";  Edit2->Text=GetKeyboardType(2);  } 

Получение текущего состояния клавиатуры

Компонента Edit1 выводит те клавиши из ряда от A до Z, которые нажаты. 

TEdit *Edit1;  void main ()  {  unsigned char far pbKeyState[256];  GetKeyboardState(pbKeyState);Edit1->Text="";  for (char i='A';i<='Z';++i) if (pbKeyState[i]&0x80) Edit1->Text=Edit1->Text+i;  } 

Получение состояния заданной клавиши

В зависимости от того нажата клавиша "Escape" или нет компонента CheckBox1 выставляет либо не выставляет крест. 

TCheckBox *CheckBox1;  void main (){CheckBox1->Checked=GetKeyState(VK_ESCAPE)&0x80;} 

Получение позиции курсора мыши

Компонента Edit1 выводит горизонтальную координату, а Edit2 - вертикальную координату позиции курсора мыши. 

TEdit *Edit1;  TEdit *Edit2;  void mouse_move()  {  POINT mouse_pos;  if (GetCursorPos(&mouse_pos)){Edit1->Text=(int)mouse_pos.x;Edit2->Text=(int)mouse_pos.y;}  } 

Определение наличия мыши в системе и количества кнопок мыши

В зависимости от того присутствует мышь в системе или нет, компонента Label1 меняет значение свойства Caption. Компонента Edit1 выводит количество кнопок мыши. 

TEdit *Edit1;  TLabel *Label1;  void main ()  {  if (GetSystemMetrics(SM_MOUSEPRESENT)) Label1->Caption="Мышь установлена";    else Label1->Caption="Мышь не установлена";   Edit1->Text=GetSystemMetrics(SM_CMOUSEBUTTONS);  }  

Определение скорости перемещения курсора

КомпонентыEdit1 - Edit3 выводят числовые значения определяющие скорость мыши. 

TEdit *Edit1;  TEdit *Edit2;  TEdit *Edit3;  void main ()  {  int lpiMouse[3];  if (SystemParametersInfo(SPI_GETMOUSE,0,lpiMouse,SPIF_SENDWININICHANGE))  {Edit1->Text=lpiMouse[0];Edit2->Text=lpiMouse[1];Edit3->Text=lpiMouse[2];}  } 

Управляющие функции предназначены для настройки клавиатуры и мыши. Так, например, кроме инициации нажатия и отжатия клавиш, можно включить или выключить действие клавиш: "NumLock", "CapsLock" и "ScrollLock", о чем свидетельствует соответствующая индикация. С помощью функций управления мышью программа воздействует на курсор, на кнопки мыши и скорость перемещения мыши. Основные управляющие функции для устройств ручного ввода представлены ниже.

Для клавиатуры:

  • SetKeyboardState.

SetKeyboardState устанавливает текущее состояние клавиатуры. Массив размером 256 байт соответствует состоянию каждой из 256 клавиш виртуальной таблицы. Если старший бит установлен, то клавиша нажата. Если младший бит виртуальных клавиш "NumLock", "CapsLock" или "ScrollLock" установлен, то данные клавиши задействованы, о чем свидетельствует соответствующая индикация. Код виртуальных клавиш '0' - '9' и 'A' - 'Z' соответствуют их ASCII- коду. Для остальных клавиш определены константы: "VK_F1" - "VK_F24", "VK_NUMPAD0" - "VK_NUMPAD9", "VK_NUMLOCK", "VK_SCROLL", "VK_LBUTTON" - "VK_RBUTTON"(для мыши), "VK_SHIFT", "VK_CONTROL", "VK_MENU"(Alt) и т.д. Функция возвращает true при корректном ее завершении.

Синтаксис: BOOL SetKeyboardState(lpbKeyState)

LPBYTE lpbKeyState; // указатель на массив, устанавливающий состояние клавиатуры

Для мыши:

  • ShowCursor;

  • SwapMouseButton;

  • ClipCursor;

  • SetCursorPos;

  • SystemParametersInfo (для установки скорости перемещения курсора).

ShowCursor показывает и скрывает курсор. Функция возвращает знаковое значение - счетчик. Если счетчик больше или равен нулю, курсор виден иначе, курсор скрыт. Таким образом, если n-раз вызвать функцию с параметром false, скрывающую курсор, чтобы показать курсор нужно также n-раз вызвать функцию с параметром true.

Синтаксис: int ShowCursor(bShow)

BOOL bShow; // показать или скрыть курсор

SwapMouseButton реверсирует кнопки мыши, при этом назначение левой и правой кнопок мыши меняются.  Функция возвращает значение типа BOOL, отражающее реверсирование кнопок до вызова функции.

Синтаксис: BOOL SwapMouseButton(fSwap)

BOOL fSwap; // флаг реверсирования

ClipCursor ограничивает перемещение курсора заданными границами. Функция возвращает true при корректном ее завершении.

Синтаксис: BOOL ClipCursor(lprc)

CONST RECT *lprc; // указатель на структуру прямоугольника, ограничивающего перемещение курсора

typedef struct tagRECT {

    LONG left;

    LONG top;

    LONG right;

    LONG bottom;

} RECT;

SetCursorPos устанавливает координаты курсора мыши на экране в пикселях. Функция возвращает true при корректном ее завершении.

Синтаксис: BOOL SetCursorPos(X, Y)

int X; //  значение новой позиции по горизонтали

int Y; //  значение новой позиции по вертикали

В приложениях на базе Win32 все чаще возникает необходимость использовать функции управления мышью. Это объясняется тем, что развитие операционных систем направлено на упрощение работы пользователя с ними.  Управление устройствами ручного ввода с помощью приведенных функций сводится к следующему:

  • задание состояния клавиатуры;

  • показать/скрыть курсор;

  • реверсировать кнопки мыши;

  • ограничить перемещение курсора заданной областью;

  • задание положения курсора;

  • задание скорости перемещения курсора.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]