Программирование в 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;
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.