Читаем Программирование в X Window средствами Free Pascal полностью

Она "вынимает" из очереди событие, находящееся в ее "голове", сохраняет информацию о нем в переменной, на которую указывает параметр prEvent, и возвращается. При этом само событие удаляется из очереди. Функция XPeekEvent также возвращает переданное сервером событие, но не удаляет его из очереди.

Процедура XPending возвращает общее число событий в очереди программы.

Итак, если событие выбрано для окна, то оно будет передано ему на обработку. А если нет? В этом случае событие передается родителю окна. Если и тот не желает обращать внимание на данное событие, то оно отправляется дальше, вверх по иерархии окон, и так до тех пор, пока либо не будет найдено окно, выбравшее это событие, либо событие не потеряется.

Задача может влиять на этот процесс продвижения события по иерархии окон. Если программа включает флаг, соответствующий событию, в специальный атрибут окна, то оно, достигнув это окно, не будет передано родителю, а будет тут же "снято с повестки дня". Этот атрибут - do_not_propagate.

1.1.8 Атрибуты окна

Многие атрибуты окна задаются при его создании с помощью процедуры XCreateWindow или XCreateSimpleWindow. Впоследствии параметры можно изменить, обратившись к процедуре XChangeWindowAttributes.

Характеристики окна описываются структурами типа TXSetWindowAttributes и TXWindowAttributes. Получить их можно с помощью процедуры XGetWindowAttributes.

Все они делятся на две группы. В первую входят параметры, доступные "на чтение" и "на запись". Вторая группа представляет собой внутренние данные. Программа может прочитать их, но не может менять.

Сначала перечислим поля этих структур, которые относятся к "изменяемым" параметрам.

Фон окна определяется атрибутами background_pixmap и background_pixel. Первый из них задает картинку (карту пикселей), которая используется для заливки фона окна. При необходимости картина повторяется слева направо и сверху вниз. Если параметр background_pixmap равен None (задается по умолчанию), то он игнорируется. Если же при этом поле background_pixel не задано (установлено по умолчанию), то окно считается "прозрачным", в противном случае его фон заливается цветом background_pixel. Атрибуты background_pixmap и background_pixel могут также принимать значение ParentRelative. В этом случае характеристики фона заимствуются у родительского окна.

Вид края окна определяется полями border_pixmap и border_pixel. Первый атрибут определяет карту пикселей, используемую для заполнения края. Если он равен None, то край заполняется цветом border_pixel. Если же и поле border_pixel не задано, то для изображения края используются соответствующие характеристики родителя. То же самое происходит, если параметр border_pixmap равен CopyFromParent (взять у родителя). Последнее значение есть значение по умолчанию.

На перерисовку окна после изменения его размеров влияют атрибуты bit_gravity и win_gravity. Когда окно меняет размер, например, увеличивается или уменьшается, то, в принципе, нет необходимости перерисовывать все его содержимое. Часть окна остается неизменной. Правда, эта часть может поменять свое положение: переместиться вправо, влево, вверх или вниз. Поле bit_gravity говорит серверу, что делать с оставшейся частью изображения. Возможные значения параметра следующие:

• ForgetGravity - содержимое окна перерисовывается (считается значением по умолчанию);

• StaticGravity - остающаяся часть не должна менять положение по отношению к главному (корневому - root) окну сервера;

• NorthWestGravity - остающаяся часть смещается к левому верхнему углу;

• NorthGravity - остающаяся часть смещается к верху окна;

• NorthEastGravity - остающаяся часть смещается к правому верхнему углу;

• WestGravity - остающаяся часть смещается к левому краю окна;

• CenterGravity - остающаяся часть смещается к центру окна;

• EastGravity - остающаяся часть смещается к правому краю окна;

• SouthWestGravity - остающаяся часть смещается к левому нижнему углу;

• SouthGravity - остающаяся часть смещается к нижнему краю окна;

• SouthEastGravity - остающаяся часть смещается к правому нижнему углу.

Параметр win_gravity говорит о том, что делать с подокнами окна после изменения размеров последнего. Возможные значения параметра следующие (при перечислении используются следующие обозначения: H - изменение размеров окна по горизонтали, V - изменение размеров по вертикали, (H, V) - смещение подокна на H пикселей по горизонтали и на V пикселей по вертикали):

• UnmapGravity - подокна удаляются с экрана; окну посылается событие UnmapNotify, в ответ на которое оно может переместить свои подокна и показать их с помощью процедуры XMapSubWindow;

• StaticGravity - подокна остаются на месте по отношению к главному (корневому) окну сервера;

• NorthWestGravity - устанавливается по умолчанию; соответствует смещению (0, 0);

• NorthGravity - смещение (H/2, 0);

• NorthEastGravity - смещение (H, 0);

• WestGravity - смещение (0, V/2);

• CenterGravity - смещение (H/2, V/2);

• EastGravity - смещение (H, V/2);

• SouthWestGravity - смещение (0, V);

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже