Программирование в X Window средствами Free Pascal - [6]
2. Устанавливается соединение с Х сервером.
3. Выполняются инициализационные процедуры, связанные с Х.
4. Пока не завершились:
1. Получаем следующее событие от Х сервера.
2. Обрабатываем событие, возможно посылая различные запросы на рисование к Х серверу.
3. Если событие было завершающим, заканчиваем цикл.
5. Закрываем соединение с Х сервером.
6. Выполняем завершающие действия.
Возможных событий достаточно много; их список можно найти в файле X.pp. Каждое из них имеет свой тип и соответствующую структуру данных. Все они вместе, как было сказано выше, описываются объединением XEvent.
Как мы видели из примера в предыдущем пункте, программа для каждого из своих окон может выбрать события, которые будут ему передаваться. Делается это с помощью функции XSelectInput(). При вызове этой процедуры требуемые события идентифицируются соответствующими флагами. Так событию, ButtonPress (нажатие кнопки мыши) соответствует флаг ButtonPressMask. Когда кнопка отпускается, сервер порождает событие ButtonRelease, которому соответствует флаг - ButtonReleaseMask.
Маска выбираемых событий может составляться с помощью побитового "ИЛИ" из таких значений:
• 0 - не ожидать никаких событий
• KeyPressMask - ожидать событие нажатия клавиши
• KeyReleaseMask - ожидать событие отпускания клавиши
• ButtonPressMask - ожидать событие нажатия кнопки мыши
• ButtonReleaseMask - ожидать событие отпускания кнопки мыши
• EnterWindowMask - ожидать событие входа в окно
• LeaveWindowMask - ожидать событие выхода из окна
• PointerMotionMask - ожидать событие движения мышиного курсора
• PointerMotionHintMask - ожидать событие движения мышиного курсора с дополнительными указаниями
• Button1MotionMask - ожидать событие движения мышиного курсора при нажатой первой кнопке
• Button2MotionMask - ожидать событие движения мышиного курсора при нажатой второй кнопке
• Button3MotionMask - ожидать событие движения мышиного курсора при нажатой третьей кнопке
• ButtonMotionMask - ожидать событие движения мышиного курсора при любой нажатой кнопке
• ExposureMask - ожидать событие необходимости перерисовки окна
• VisibilityChangeMask - ожидать событие изменения видимости
• ResizeRedirectMask - ожидать событие изменения размеров окна
• FocusChangeMask - ожидать событие изменения фокуса ввода
Некоторые события посылаются окну независимо от того, выбраны они или нет. Это:
• MappingNotify - посылается, когда изменяется состояние клавиатуры (соответствие физических и логических кодов;
• ClientMessage - так идентифицируются события, посылаемые от клиента к клиенту с помощью процедуры XSendEvent();
• SelectionClear, SelectionNotify, SelectionRequest - эти события используются в стандартном механизме общения между программами, работающими в X;
• Expose, NoExpose - эти события могут посылаться, когда клиент пытается копировать содержимое одного окна в другое.
Частой ошибкой начинающих программистов является добавление кода для обработки нового события без добавления маски для этого события в XSelectInput(). Можно часам сидеть и отлаживать программу в недоумении, почему она не реагирует на отпускание кнопки, только из-за того, что для кнопок событие нажатия зарегистрировано, а событие отпускания - нет.
Программа получает события в своем основном цикле. Для этого можно использовать ряд процедур. Наиболее простая из них:
>function XNextEvent(prDisplay: PDisplay; prEvent: PXEvent): longint; cdecl; external;
Она "вынимает" из очереди событие, находящееся в ее "голове", сохраняет информацию о нем в переменной, на которую указывает параметр prEvent, и возвращается. При этом само событие удаляется из очереди. Функция XPeekEvent() также возвращает переданное сервером событие, но не удаляет его из очереди.
Процедура XPending() возвращает общее число событий в очереди программы.
Итак, если событие выбрано для окна, то оно будет передано ему на обработку. А если нет? В этом случае событие передается родителю окна. Если и тот не желает обращать внимание на данное событие, то оно отправляется дальше, вверх по иерархии окон, и так до тех пор, пока либо не будет найдено окно, выбравшее это событие, либо событие не потеряется.
Задача может влиять на этот процесс продвижения события по иерархии окон. Если программа включает флаг, соответствующий событию, в специальный атрибут окна, то оно, достигнув это окно, не будет передано родителю, а будет тут же "снято с повестки дня". Этот атрибут - do_not_propagate.
1.1.8 Атрибуты окна
Многие атрибуты окна задаются при его создании с помощью процедуры XCreateWindow() или XCreateSimpleWindow(). Впоследствии параметры можно изменить, обратившись к процедуре XChangeWindowAttributes().
Характеристики окна описываются структурами типа TXSetWindowAttributes и TXWindowAttributes. Получить их можно с помощью процедуры XGetWindowAttributes().
Все они делятся на две группы. В первую входят параметры, доступные "на чтение" и "на запись". Вторая группа представляет собой внутренние данные. Программа может прочитать их, но не может менять.
Сначала перечислим поля этих структур, которые относятся к "изменяемым" параметрам.
В учебно-методическом пособии рассматриваются основы языка программирования PL/SQL, реализованного в системе управления базами данных Oracle Database Server. Приводятся сведения о поддерживаемых типах данных, структуре программ PL/SQL и выполнении SQL-предложений в них. Отдельно рассмотрено создание хранимых в базах данных Oracle программ PL/SQL – процедур, функций, пакетов и триггеров.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
ГОСУДАРСТВЕННЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИИнформационная технологияРУКОВОДСТВО ПО УПРАВЛЕНИЮ ДОКУМЕНТИРОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯInformation technology. Guidelines for the management of software documentationИздание официальноеДата введения 1994-07-01ГОССТАНДАРТ РОССИИ Москва© Издательство стандартов, 1994.
Самоучитель UMLПервое издание.В книге рассматриваются основы UML – унифицированного языка моделирования для описания, визуализации и документирования объектно-ориентированных систем и бизнес-процессов в ходе разработки программных приложений. Подробно описываются базовые понятия UML, необходимые для построения объектно-ориентированной модели системы с использованием графической нотации. Изложение сопровождается примерами разработки отдельных диаграмм, которые необходимы для представления информационной модели системы.