====== Программирование в X-Window средствами Free Pascal ====== [[index|Перейти к содержанию]] ===== 1.5. Межклиентское взаимодействие ===== ==== 1.5.1. Механизм свойств ==== Как мы уже упоминали ранее, свойство есть набор данных, ассоциированных с окном. Они хранятся в специальных таблицах в памяти компьютера, на котором работает сервер. Каждое свойство имеет имя. Разные окна могут иметь свойства с одинаковыми именами. Поскольку передача имен - строк произвольной длины - от клиента к серверу может увеличить нагрузку на сеть, X идентифицирует свойства с помощью целых чисел - атомов. Процедура ''XInternAtom()'' включает свойство с указанным именем в таблицу сервера и возвращает соответствующий атом. Полный список реализуемых X протоколом атомов можно найти в файле ''/usr/include/X11/Xatom.h''. Данные свойства рассматриваются сервером как массив единиц длиной 8, 16 или 32 бита. Их конкретная интерпретация осуществляется программами-клиентами. Каждое свойство имеет тип, который, в свою очередь, также задается тем или иным свойством. Например, свойство, соответствующее атому ''XA_STRING'', задает тип "строка". Для работы со свойствами кроме ''XInternAtom()'' используются следующие процедуры: ''XChangeProperty()'' - меняет данные свойства: ''XGetWindowProperty()'' - позволяет получить данные свойства. Особую роль играют свойства, данные которых содержат строки текста. Они так и называются текстовыми и имеют тип "''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()'' выполняет обратное преобразование.