Программирование в X Window средствами Free Pascal
Шрифт:
…
Сервер
Первые четыре поля совпадают с аналогичными полями структуры TXKeyboardState. Поля led и led_mode позволяют сообщить серверу, какие из клавиш-модификаторов должны сопровождаться подсветкой. Если поле led не задано, и led_mode равно LedModeOn, то изменяется состояние всех клавиш, для которых поддерживается световое сопровождение. Если led_mode равно LedModeOff, то состояние клавиш не меняется. Если поле led задано, то это есть комбинация флагов, указывающих, для каких клавиш подсветку включить (led_mode равно LedModeOn) или выключить (led_mode равно LedModeOff).
Поля key и auto_repeat_mode определяют, для какой клавиши (клавиш) включить (auto_repeat_mode равно AutoRepeatModeOn) или выключить (auto_repeat_mode равно AutoRepeatModeOff) режим автоматического повтора. Если поле key задано, то автоматический повтор включается или выключается только для клавиши с кодом key.
1.3.2 Мышь
С точки зрения программы общение с мышью похоже на работу с клавиатурой. X получает сигналы от устройства, преобразует их в события и помещает последние в очередь программы. Однако есть и существенная разница. Если события от клавиатуры передаются лишь программе, окно которой имеет фокус ввода, то события от мыши могут передаваться, в принципе, любой задаче, окно (окна) которой присутствуют на экране.
Чаще всего приходится обрабатывать события нажатия (отпускания) кнопки мыши. Для регистрации такого типа событий, необходимо добавить одну из следующих масок с помощью функции XSelectInput:
• ButtonPressMask - уведомлять о нажатии любой кнопки в одном из окон программы.
• ButtonReleaseMask - уведомлять об отпускании любой кнопки в одном из окон программы.
В цикле обработки сообщений могут проверяться такие события:
• ButtonPress - нажата кнопка
• ButtonRelease - отпущена кнопка в одном из окон программы.
Структура для этих сообщений получается доступом к полю xbutton объединения TXEvent и содержит, в частности, такие поля:
• window: TWindow - идентификатор окна, которому было послано сообщение (в случае, если оно было зарегистрировано для нескольких окон программы).
• x, y: longint - координаты x и y (в пикселях) мышиного курсора в момент нажатия.
• button: cardinal - номер нажатой кнопки (может принимать значения Button1, Button2, Button3).
• time: TTime - время (в миллисекундах), которое длилось событие. Может использоваться для определения "двойного щелчка".
В качестве примера приведем фрагмент кода, в котором рисуется черный пиксель в позиции мыши всякий раз, когда мы получаем событие "нажатие кнопки" от первой кнопки мыши, и стирается пиксель (то есть рисуется белый), когда нажата вторая кнопка мыши. Предполагается существование двух GC: gc_draw с черным цветом переднего плана и gc_erase с белым цветом переднего плана.
…
…
Подобно событиям нажатия и отпускания кнопки мыши, нас также могут извещать о различных событиях перемещения мыши. Они делятся на два семейства. Первое - перемещение указателя мыши, пока никакие кнопки не нажимаются, и второе - движение указателя мыши при одной (или более) нажатых кнопках (это иногда называется операцией "перетаскивания" (drag)). Следующие маски событий должны быть добавлено в вызов XSelectInput для получения извещений о таких событиях:
Ловите конский топот. Том 1. Исхода нет, есть только выходы...
15. Одиссей покидает Итаку
Фантастика:
альтернативная история
рейтинг книги
Жизнь Дэвида Копперфилда, рассказанная им самим. Книга 2
Книга на все времена
Проза:
классическая проза
рейтинг книги
Акелдама - кровавое поле битвы. Книга 3. Часть 2
3. Акелдама - кровавое поле битвы
Фантастика:
фэнтези
рейтинг книги
Прохоровское побоище. Правда о Величайшем танковом сражении
Мифы Великой Отечественной
Документальная литература:
прочая документальная литература
рейтинг книги
Часовня погубленных душ
Детективы:
прочие детективы
рейтинг книги
Том 6. Может быть — да, может быть — нет. Леда без лебедя. Новеллы. Пескарские новеллы
6. Габриэле Д'Аннунцио Собрание сочинений в шести томах
Проза:
классическая проза
рейтинг книги
Четвертое измерение
Фантастика:
боевая фантастика
рейтинг книги
История как проблема логики. Часть первая. Материалы
Российские Пропилеи
Научно-образовательная:
история
философия
культурология
рейтинг книги
Проданная Истинная. Месть по-драконьи
Любовные романы:
любовно-фантастические романы
рейтинг книги
Газлайтер. Том 9
9. История Телепата
Фантастика:
фэнтези
попаданцы
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 33
33. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
рейтинг книги
Этносфера: история людей и история природы
Историческая библиотека
Научно-образовательная:
история
рейтинг книги