Программирование в X Window средствами Free Pascal - [23]

Шрифт
Интервал

Особую роль играют свойства, данные которых содержат строки текста. Они так и называются текстовыми и имеют тип "TEXT". Таковыми являются, например, имена (заголовки) окно, имена пиктограмм и т.д. Данные текстового свойства описываются структурой TXTextProperty. Процедура XStringListToTextProperty() переводит список строк в набор данных типа TXTextProperty:

>(* Эта переменная будет хранить созданное свойство. *)

>var

> window_title_property: TXTextProperty;

> rc: TStatus;


>(* Строка, преобразуемая в свойство. *)

>const

> window_title: PChar = 'hello, world';


>(* перевод строки в свойство X. *)

> rc:= XStringListToTextProperty(@window_title, >1, >@window_title_property);

>(* проверка успешности преобразования. *)

> 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,

>  $c1, $f0, $01, $82, $01, $00, $02, $03, $00, $02, $0c, $00,

>  $02, $38, $00, $04, $60, $00, $04, $e0, $00, $04, $38, $00,

>  $84, $06, $00, $14, $14, $00, $0c, $34, $00, $00, $00, $00

> );


> win_hints:= XAllocWMHints();

> if (win_hints=nil) then begin

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

>  halt(1);

> end;


> (* установим пожелания о состоянии окна, позиции его иконки >и ее виде *)

> win_hints^.flags:= StateHint OR IconPositionHint OR IconPixmapHint;


Рекомендуем почитать
Графика DirectX в Delphi

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


Вторая жизнь старых компьютеров

Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.


DirectX 8. Начинаем работу с DirectX Graphics

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.