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

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

Шрифт:

 if (rc = 0) then begin

 writeln('XStringListToTextProperty - нет памяти');

 halt(1);

 end;

XTextPropertyToString выполняет обратное преобразование.

1.5.2 Общение с менеджером окон

Менеджер окон - это специальный клиент, в задачи которого входит интерактивное перемещение окон по экрану, изменение их размеров, минимизация (превращение в пиктограмму) и многое другое. Чтобы облегчить менеджеру его нелегкую жизнь, программам рекомендуется при инициализации сообщить о себе определенную информацию. Передается она через предопределенные свойства, которые известны менеджеру и могут быть им прочитаны. Некоторые из свойств (так называемые стандартные) задавать обязательно. Все остальное определяется по усмотрению программы. Наиболее простой способ задать стандартные свойства - обратиться к процедурам XSetStandardProperties или XSetWMProperties.

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

Имя (заголовок) окна. Идентифицируется атомом XA_WM_NAME и имеет тип "TEXT". Данные свойства - структура TXTextProperty. Для задания свойства используется процедура XStoreName (XSetWMName). Получить его можно с помощью XFetchName (XGetWMName).

Имя пиктограммы. Идентифицируется атомом XA_WM_ICONNAME и имеет тип "TEXT". Данные свойства - структура TXTextProperty. Для задания свойства используется процедура XSetIconName (XSetWMIconName). Получить его можно с помощью XGetIconName (XGetWMIconName).

Рекомендации (hints) о геометрии окна. Идентифицируется атомом XA_WM_NORMAL_HINTS и имеет тип XA_WM_SIZE_HINTS. Данные свойства - структура типа TXSizeHints. Для задания свойства используется процедура XSetNormalHints.

В ряде случаев стоит сообщить оконному менеджеру о том, какой размер окна мы хотим получить, и в каких пределах будут изменяться его размеры. Например, для терминальной программы (такой, как xterm), хотелось бы, чтобы окно всегда содержало полное количество строк и столбцов. В других случаях нежелательно давать возможность менять размер окна (например, в диалоговых окнах). Эти пожелания можно передать оконному менеджеру, хотя ничто не помешает ему их проигнорировать. Для этого необходимо создать структуру данных, заполнить ее необходимыми данными и затем использовать функцию XSetWMNormalHints:

(* указатель на структуру рекомендаций о размерах. *)

var

 win_size_hints: PXSizeHints;

 win_size_hints:= XAllocSizeHints;

 if (win_size_hints=nil) then begin

writeln('XAllocSizeHints - нет памяти');

halt(1);

 end;

 (* Инициализация структуры *)

 (* Вначале укажем, что передаются пожелания о размерах: 
установим минимальный и начальный размеры. *)

 win_size_hints^.flags:= PSize OR PMinSize;

 (* Затем указываем требуемые границы. В
нашем случае - создаем окно минимальным размером 300x200 
пикселей и устанавливаем начальный размер в 400x250. *)

 win_size_hints^.min_width:= 300;

 win_size_hints^.min_height:= 200;

 win_size_hints^.base_width:= 400;

 win_size_hints^.base_height:= 250;

 (* Передаем пожелания о размерах оконному менеджеру. *)

 XSetWMNormalHints(display, win, win_size_hints);

 (* В конце необходимо освободить память из-под структуры. *)

 XFree(win_size_hints);

Дополнительные параметры окна: способ работы с клавиатурой, вид и положение пиктограммы. Идентифицируется атомом XA_WM_HINTS и имеет тип XA_WM_HINTS. Данные свойства - структура типа TXWMHints. Для задания свойства используется процедура XSetWMHints. Структура типа XWMHints, передаваемая функции XSetWMHints, должна быть подготовлена с помощью XAllocWMHints:

var

 win_hints: PXWMHints;

 icon_pixmap: TPixmap;

const

 icon_bitmap_width=20;

 icon_bitmap_height=20;

(* Определим битовое изображение в формате Х - 
оно может быть создано программой xpaint *)

 icon_bitmap_bits: array [0…59] of byte = (

$60, $00, $01, $b0, $00, $07, $0c, $03, $00, $04, $04, $00,

$c2, $18, $00, $03, $30, $00, $01, $60, $00, $f1, $df, $00,

  • Читать дальше
  • 1
  • ...
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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