А. Полищук - Программирование в X Window средствами Free Pascal
- Название:Программирование в X Window средствами Free Pascal
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
А. Полищук - Программирование в X Window средствами Free Pascal краткое содержание
Программирование в X Window средствами Free Pascal - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
• EnterWindowMask - уведомлять, когда указатель мыши входит в любое из окон программы.
• LeaveWindowMask - уведомлять, когда указатель мыши выходит из окна программы.
В цикле обработки сообщений проверяется одно из следующих событий:
• EnterNotify - указатель мыши только что вошел в одно из окон программы.
• LeaveNotify - указатель мыши только что вышел из окна программы.
Структура для этих сообщений получается доступом к полю xcrossing объединения TXEvent и содержит, в частности, такие поля:
• window: TWindow - идентификатор окна, которому было послано сообщение от мыши (в случае, если оно было зарегистрировано для нескольких окон программы).
• subwindow: TWindow - идентификатор дочернего окна ребенка, из которого мышь перешла в текущее (в событии EnterNotify), или в которое указатель мыши переместился (в событии LeaveNotify), или None, если мышь переместилась за пределы окон программы.
• x, y: longint - координаты x и y (в пикселях) мышиного курсора в момент генерации сообщения.
• mode: longint - номер нажатой кнопки (может принимать значения Button1, Button2, Button3).
• time: TTime - время (в миллисекундах), которое длилось событие. Может использоваться для определения "двойного щелчка".
• state: cardinal - маска кнопок (или клавиш), удерживаемых во время этого события (если таковые имеются). Эта поле - побитовое "ИЛИ" любого из следующих значений: Button1Mask, Button2Mask, Button3Mask, Button4Mask, Button5Mask, ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask. Первые пять значений ссылаются на кнопки мыши, которые нажимаются, остальные соответствуют различным специальным клавишам (Mod1 - обычно клавиша Alt или Meta).
• focus: TBool - устанавливается в True, если окно имеет клавиатурный фокус, и False в противном случае.
Обычно фокус ввода может свободно переходить от окна к окну. Но иногда программе необходимо запретить передачу фокуса. Это называется захватом клавиатуры. Для того, чтобы его реализовать, используется процедура XGrabKeyboard().
Функция XGrabKey() запрещает передачу фокуса после нажатия определенной комбинации клавиш. Освободить клавиатуру можно, обратившись к процедуре XUngrabKeyboard() (XGrabKey()).
Рассмотрим поведение системы при обработке событий от мыши. Как правило, если ее кнопка нажата в момент, когда ее курсор находится в неактивном окне, то последнее активизируется, и события от мыши передаются ему. Сказанное означает, что в нормальном состоянии окно получает только те события от мыши, которые соответствуют сигналам, пришедшим тогда, когда ее курсор находится в пределах окна. Но если программа вызывает
function XGrabPointer(prDisplay: PDisplay; nGrabWnd: TWindow;
nOwnerEvents: TBool; nEventMask: cardinal;
nPointerMode: longint; nKeyboardMode: longint;
nConfineTo: TWindow; nCursor: TCursor;
nTime: TTime): longint; cdecl; external;
то положение меняется. Теперь все события будут направляться окну с дескриптором nGrabWnd. Освобождается мышь вызовом XUngrabPointer(). Процедура XGrabButton() указывает, что курсор должен быть захвачен после нажатия определенной кнопки. Обратной к ней является процедура XUngrabButton().
Процедуры, захватывающие устройство - мышь или клавиатуру - имеют ряд аргументов, влияющих на поведение системы.
Так, параметр nConfineTo есть идентификатор окна, за пределы которого не должен выходить курсор мыши, если он захвачен.
Если аргумент nOwnerEvents равен Тrue, то события мыши будут передаваться окнам программы. Если nOwnerEvents - False, или курсор находится в окне, не принадлежащем программе, то события мыши передаются окну nGrabWnd.
Если nOwnerEvents равен False, то параметр nEventMask указывает, какие события следует передавать окну nGrabWnd.
Обработка событий от клавиатуры или ныши может быть приостановлена, если nPointerMode или nKeyboardMode равен GrabModeSync. В этом случае события буферизуются сервером, пока устройство не будет освобождено с помощью XUngrabKeyboard(), XUngrabKey(), XUngrabPointer() или XUngrabButton().
Параметр nCursor задает форму курсора во время того, как мышь захвачена. Аргумент nTime указывает, когда система должна активизировать режим захвата.
1.3.3 Лабораторная работа #3 "Работа с внешними устройствами"
1. Используя функции XKeysymToString() и XKeycodeToKeysym(), напишите программу, которая реагирует на нажатие клавиш в окне выдачей в него кода символа, состояния модификаторов и символьной расшифровки нажатой клавиши.

2. Напишите программу, определяющую координаты мыши в момент нажатия кнопки и печатающую в позицию мышиного курсора координаты мыши и номер нажатой кнопки.

3. Модифицируйте предыдущую программу для рисования точек в местах нажатий мыши и при ее движении с нажатой кнопкой.

4. Модифицируйте предыдущую программу для рисования отрезков между нажатиями мыши и при ее движении с нажатой кнопкой.

5. Создайте программу, отображающую в окне содержимое текстового файла, имя которого задается в командной строке. Для скроллинга текста используйте клавиши Up, Down, Left, Right, PageUp, PageDown, Home, End.

6. Составьте программу игры "Пятнашки", выбирая перемещаемую ячейку мышью.

7. Составьте программу, которая по нажатию левой клавиши очищает рабочую область, при движении с нажатой левой клавишей рисует точку в позиции указателя мыши, а при отпускании левой клавиши соединяет все точки в рабочей области друг с другом.

1.4 Программы и их ресурсы
Многие программы имеют различные заранее подготавливаемые данные, которые в терминах X называются - ресурсами. Это могут быть цвета окон приложения, строки сообщений пользователю и т.д.
Как правило, программисты создают ресурсы каждый по-своему. В X Window сделана попытка унифицировать этот процесс.
1.4.1 Формат файла ресурсов
В X файл ресурсов есть обычный текстовый файл, каждая строка которого задает тот или иной параметр (ресурс) программы. (При этом предполагается, что программу "населяют" именованные объекты, связанные в некоторую иерархию). Общий вид строки следующий:
‹имя программы›.‹подобъект1›.‹подобъект2›. . .‹подобъектN›.‹имя ресурса›: ‹значение ресурса›
Интервал:
Закладка: