Вход/Регистрация
Программирование в X Window средствами Free Pascal
вернуться

Семериков С. А.

Шрифт:

 rWndAttr.win_gravity:= StaticGravity;

…

 XChangeWindowAttributes (prDisplay, prWnd, nValMask, @rWndAttr);

…

Отдельные атрибуты окна можно изменить более просто с помощью специальных процедур. Так, например, функция XSetWindowBackground меняет фон окна, XSetWindowBorder - его край.

1.1.9 Операции над окнами

Манипулировать окнами можно не только с помощью атрибутов: Xlib предоставляет набор функций для изменения их размеров, перемещения на экране и в стеке окон, сворачивания и т.п.

Первая пара операций, которые можно применить к окну - отображение или скрытие. Отображение окна заставляют окно появиться на экране, скрытие приводит к удалению с экрана (хотя логическое окно в памяти все еще существует). Например, если в вашей программе есть диалоговое окно, вместо создания его каждый раз по запросу пользователя, мы можем создать окно один раз в скрытом режиме и, когда пользователь запросит открыть диалог, просто отобразить окно на экране. Когда пользователь нажимает "OK" или "Cancel", окно скрывается. Это значительно быстрее создания и уничтожения окна, однако стоит ресурсов, как на стороне клиента, так и на стороне X сервера.

Отображение окна может быть выполнено с помощью XMapWindow, скрытие - с помощью XUnmapWindow. Функция отображения заставит событие Expose послаться программе, если только окно полностью не закрыто другими окнами.

Другое действие, которое можно выполнить над окнами - переместить их в другую позицию. Это может быть выполнено функцией XMoveWindow, которая принимает новые координаты окна. Имейте в виду, что после перемещения окно может быть частично скрытым другими окнами (или наоборот, открыто ими), и таким образом, может быть сгенерировано сообщение Expose.

Изменить размер окна можно с помощью функции XResizeWindow. Мы можем также объединить перемещение и изменение размеров, используя одну функцию XMoveResizeWindow.

Все приведенные выше функции изменяли свойства одного окна. Существует ряд свойств, связанных с данным окном и другими окнами. Одно из них - порядок засылки в стек: порядок, в котором окна располагаются друг над другом. Говорят, что окно переднего плана находится на верхе стека, а окно заднего плана - на дне стека. Перемещение окна на вершину стека осуществляет функция XRaiseWindow, перемещение окна на дно стека - функция XLowerWindow.

С помощью функции XIconifyWindow окно может быть свернуто, а с помощью XMapWindow - восстановлено. Для того, чтобы понять, почему для XIconifyWindow нет обратной функции, необходимо заметить, что, когда окно сворачивается, на самом деле оно скрывается, а вместо него отображается окно иконки. Таким образом, чтобы восстановить исходное окно, нужно просто отобразить его снова. Иконка является на самом деле другим окном, которое просто тесно связано сильно с нашим нормальным окном - это не другое состояние нашего окна.

Следующий пример демонстрирует использование операций над окнами:

uses x,xlib,xutil,crt,dos;

(* create_simple_window - создает окно с белым фоном заданного размера.

 Принимает в качестве параметров дисплей, размер окна (в пикселях) и положение окна (также в пикселях). Возвращает дескриптор окна.

 Окно создается с черной рамкой шириной в 2 пикселя и автоматичсеки отображается после создания. *)

function create_simple_window(display: PDisplay;
width, height, x, y: integer): TWindow;

var

 screen_num, win_border_width: integer;

 win: TWindow;

begin

 screen_num:= XDefaultScreen(display);

 win_border_width:= 2;

(*
создаем простое окно как прямой потомок корневого окна экрана,
используя черный и белый цвета в качестве основного и фонового, и
размещая новое окно в верхнем левом углу по заданным координатам
*)

 win:= XCreateSimpleWindow(display, XRootWindow(display, screen_num), 
x, y, width, height, win_border_width,
XBlackPixel(display, screen_num),
XWhitePixel(display, screen_num));

(* Отображаем окно на экране. *)

 XMapWindow(display, win);

(* Заставляем выполниться все запросы к Х серверу. *)

 XFlush(display);

  • Читать дальше
  • 1
  • ...
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: