Чтение онлайн

на главную - закладки

Жанры

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

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

Шрифт:

 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;

 (* Загрузим заданное битовое изображение 
и создадим из него пиксельную карту Х. *)

 icon_pixmap:= XCreateBitmapFromData(display, 
win,
PChar(icon_bitmap_bits),
icon_bitmap_width,
icon_bitmap_height);

 if (icon_pixmap=nil) then begin

writeln('XCreateBitmapFromData: ошибка создания пиксмапа');

halt(1);

 end;

 (* Затем детализируем желаемые изменения. *)

(* в нашем случае - сворачиваем окно, определяем его иконку 
и устанавливаем позицию иконки в левом верхнем углу экрана. *)

 win_hints^.initial_state:= IconicState;

 win_hints^.icon_pixmap:= icon_pixmap;

 win_hints^.icon_x:= 0;

 win_hints^.icon_y:= 0;

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

 XSetWMHints(display, win, win_hints);

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

 XFree(win_hints);

Получить данные свойства можно с помощью XGetWMHints.

Атрибут, характеризующий "временное" окно. Идентифицируется атомом XA_WM_TRANSIENT_FOR и имеет тип XA_STRING. Свойство задается для окон, появляющихся на экране для выполнения вспомогательных функций (диалоги, меню). Такие объекты рассматриваются менеджером по особому. Например, он может не добавлять к окну заголовок и рамку. Данные свойства - идентификатор окна родительского по отношению к данному. Задается свойство с помощью процедуры XSetTransientForHint.

Имена программы и ее класса, идентифицируется атомом XA_WM_CLASS и имеет тип XA_STRING. Данные свойства - структура типа TXClassHints. Задается свойство с помощью процедуры XSetClassHint и может быть получено с помощью XGetClassHint.

Если окно (окна) программы имеют собственную цветовую палитру, то приложение должно соответствующим образом задать для него атрибут colormap. Программа заносит идентификатор окна (идентификаторы окон) в список, ассоциированный со свойством, имя которого WM_COLORMAP_WINDOWS. Делается это процедурой XSetWMColormapWindows. Получить список, уже находящийся в свойстве, можно, обратившись к XGetWMColormapWindows.

Когда окно открыто, пользователь посредством менеджера совершает над ним разные действия. Программе может быть желательно перехватывать некоторые из них. Так, например, если окно представляет собой редактор текста, и пользователь пытается его закрыть, то разумно спросить у сидящего за компьютером человека, а не желает ли он предварительно сохранить результаты редакции. Начиная с X11R4 системой предусматривается свойство с именем WM_PROTOCOLS. Оно содержит список атомов, и каждый из них идентифицирует свойство, связанное с действиями, о которых надо оповещать программу. Эти свойства следующие:

• WM_TAKE_FOCUS - задается, если программа хочет передавать фокус ввода между своими окнами самостоятельно; в этом случае менеджер не будет управлять фокусом, ввода, а пошлет приложению событие ClientMessage, у которого поле message_type равно атому, соответствующему свойству WM_PROTOCOLS, а поле data.l[0] равно атому, соответствующему свойству WM_TAKE_FOCUS; в ответ на это событие программа должна сама обратиться к XSetInputFocus для задания окна, имеющего фокус ввода;

• WM_SAVE_YOURSELF amp;mdash задается, если программа хочет перехватить момент своего завершения; менеджер окон посылает приложению событие ClientMessage, у которого поле message_type равно атому, соответствующему свойству WM_PROTOCOLS, а поле data.l[0] равно атому, соответствующему свойству WM_SAVE_YOURSELF; в ответ программа может сохранить свое текущее состояние;

• WM_DELETE_WINDOW - задается, если программа хочет перехватить моменты, когда менеджер окон закрывает принадлежащие ей окна; менеджер окон посылает приложению событие ClientMessage, у которого поле message_type равно атому, соответствующему свойству WM_PROTOCOLS, а поле data.l[0] равно атому, соответствующему свойству WM_DELETE_WINDOW; далее программа сама решает, оставить окно на экране или удалить его с помощью XDestroyWindow.

Свойство WM_PROTOCOLS задается процедурой XSetWMProtocols и может быть получено с помощью XGetWMProtocols.

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

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVI

По прозвищу Святой. Книга вторая

Евтушенко Алексей Анатольевич
2. Святой
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
По прозвищу Святой. Книга вторая

Петля, Кадетский Корпус. Книга пятая

Алексеев Евгений Артемович
5. Петля
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Петля, Кадетский Корпус. Книга пятая

Хозяин Теней

Петров Максим Николаевич
1. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней

Сотник

Ланцов Михаил Алексеевич
4. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Сотник

Лекарь Империи 2

Карелин Сергей Витальевич
2. Лекарь Империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
попаданцы
5.00
рейтинг книги
Лекарь Империи 2

Локки 2. Потомок бога

Решетов Евгений Валерьевич
2. Локки
Фантастика:
городское фэнтези
аниме
попаданцы
5.00
рейтинг книги
Локки 2. Потомок бога

Имя нам Легион. Том 14

Дорничев Дмитрий
14. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
фантастика: прочее
5.00
рейтинг книги
Имя нам Легион. Том 14

Последний наследник

Тарс Элиан
11. Десять Принцев Российской Империи
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний наследник

Идеальный мир для Лекаря 17

Сапфир Олег
17. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 17

Хозяин Теней 4

Петров Максим Николаевич
4. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней 4

Древесный маг Орловского княжества 5

Павлов Игорь Васильевич
5. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 5

Ратник

Ланцов Михаил Алексеевич
3. Помещик
Фантастика:
альтернативная история
7.11
рейтинг книги
Ратник

Черный Маг Императора 18

Герда Александр
18. Черный маг императора
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Черный Маг Императора 18