А. Полищук - Программирование в X Window средствами Free Pascal
- Название:Программирование в X Window средствами Free Pascal
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
А. Полищук - Программирование в X Window средствами Free Pascal краткое содержание
Программирование в X Window средствами Free Pascal - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Подобная строка задает значение ресурса для подобъектов иерархии объектов программы. Например, запись
myprog.dialogwnd.background: Red
говорит, что в программе myprog у объекта с именем dialogwnd параметр background (цвет фона) имеет значение Red (красный цвет).
Вместо имен объектов могут указываться их классы. Обычно класс имеет то же самое имя, что и объект, но начинается с заглавной буквы, например,
Myprog.dialogwnd.Background: Red
Часть объектов или классов в левой части строки, задающей ресурс, может заменяться символом '*', например, строка
myprog*background: Red
указывает, что для всех объектов программы myprog ресурс background имеет значение Red.
Связка с помощью символа '.' имеет больший приоритет, чем связка с помощью '*'. Так, если в файле, задающем ресурсы, есть две строки
myprog*background: Red
myprog.dialogwnd.background: Green
то все объекты программы будут иметь ресурс background равный Red, кроме объекта dialogwnd, для которого этот параметр есть Green.
1.4.2 Доступ к ресурсам программ
Пусть ресурсный файл подготовлен. Как получить доступ к его данным во время работы программы? Для этого X предоставляет набор процедур, которые совокупно называются менеджер ресурсов (Resource Manager), и специальную программу xrdb, которая позволяет считать любой ресурсный файл и включить его в общую таблицу ресурсов сервера. Последняя называется базой данных ресурсов сервера, и представляет собой область памяти, ассоциированную со свойством (property) XA_RESOURCE_MANAGER корневого окна экрана дисплея.
Наиболее простой является процедура XGetDefault(). Она получает имя программы, имя ресурса и определяет значение последнего. При этом она последовательно совершает следующие шаги:
• сначала ресурс ищется в базе данных сервера (в свойстве XA_RESOURCE_MANAGER);
• если он не найден, то значение ресурса определяется по файлу ".Xdefaults", который ищется в домашней (home) директории пользователя;
• если задана переменная среды XENVIRONMENT, то ресурс ищется в файле, на который указывает эта переменная.
Если ресурс одновременно встречается в ".Xdefaults" и файле, определяемом XENVIRONMENT, то берется последнее значение.
В примере, приводимом ниже, используется XGetDefault(), чтобы получить строку, которую надо напечатать в окне программы. Предполагается, что имя программы - "hello", а строка - ресурс с именем "helloWorld", т.е. в файле ".Xdefaults" должна быть помещена, например, следующая запись:
…
hello.helloWorld: Hello, World!
…
Фрагмент программы, выполняющий чтение из файла ресурсов, будет выглядеть следующим образом:
…
prDisplay: PDisplay;
prGC: TGC;
nWnd: TWindow;
psString: PChar;
….
(* Устанавливаем связь с сервером, получаем номер экрана…*)
….
(* Выбираем события, обрабатываемые программой *)
XSelectInput (prDisplay, nWnd, ExposureMask ORKeyPressMask);
(* Получаем рисуемую строку *)
psString:= XGetDefault (prDisplay, 'hello', 'helloWorld');
….
XDrawString (prDisplay, nWnd, prGC, 10, 50, psString,
strlen (psString));
….
Обратите внимание на то, что после изменения файла ".Xdefaults" он должен быть обработан программой xrdb для того, чтобы X сервер включил в свою таблицу обновленные ресурсы.
Функция XGetDefault() проста в обращении, но недостаточно гибка. Так, например, с ее помощью нельзя прочитать содержимое произвольного файла ресурсов. Рассмотрим другие более развитые возможности.
Вызов XrmInitialize() инициализирует менеджер ресурсов. Обращение к этой функции предшествует вызовам остальных процедур.
procedure XrmParseCommand(
prDB: TXrmDatabase {database} ;
prOptRec: TXrmOptionDescList {table} ;
nOptRecNum: integer {table_count} ;
psProgName: pchar {name} ;
argc: pointer {argc_in_out} ;
argv: ppchar {argv_in_out}
); cdecl; external;
сканирует строку, с помощью которой вызвана программа, и "достает" из нее ресурсы и их значения, при этом создается специальная структура данных - база данных ресурсов. Ресурсы и их значения помещаются в нее. Указатель на базу данных передается программе через переменную prDB. Параметр psProgName содержит имя программы, argc - число опций в командной строке, argv - сами опции. Аргумент prOptRec определяет, как разбирать командную строку. nOptRecNum задает число элементов массива prOptRec.
В примере, приводимом ниже, определяется, что в командной строке опция "-bg" задает цвет фона; "-fg" - цвет переднего плана, а опция "-xrm" позволяет задать в командной строке любой ресурс программы.
….
const
rOptRec: array [0…2] of TXrmOptionDescRec = (
('-bg', '*background', XrmoptionSepArg, 'Red'),
('-fg', '*foreground', XrmoptionSepArg, 'White'),
('-xrm', NIL, XrmoptionResArg, NIL),
);
var
rDB: TXrmDatabase;
…
//void main (int argc, char **argv)
begin
…
XrmInitialize();
XrmParseCommand (rDB, rOptRec,
sizeof (rOptRec) / sizeof (rOptRec[0]),
argv[0], @argc, argv);
…
end.
Процедура XrmGetFileDataBase() позволяет считать указанный ресурсный файл и создать по нему в памяти базу данных ресурсов. Функция
function XrmGetResource(
prDB: TXrmDatabase {database} ;
psResName: pchar {str_name} ;
psResClass: pchar {str_class} ;
psResType: ppchar {str_type_return} ;
psResVal: PXrmValue {value_return}
): Tbool; cdecl; external;
считывает ресурс с именем psResName и классом psResClass из базы данных *prDB. После возврата psResType есть указатель на строку, указывающую тип ресурса. На само значение ресурса указывает psResVal.
Функция XrmPutResource() сохраняет ресурс в базе данных. XrmPutFileDatabase() записывает базу данных ресурсов в файл.
1.4.3 Лабораторная работа #4 "Программы и их ресурсы"
1. Составьте программу, считывающую из файла ресурсов маску шрифта, строку, координаты х, у и отображающую окно с текстом согласно полученной информации.

1.5 Межклиентское взаимодействие
1.5.1 Механизм свойств
Как мы уже упоминали ранее, свойство есть набор данных, ассоциированных с окном. Они хранятся в специальных таблицах в памяти компьютера, на котором работает сервер. Каждое свойство имеет имя. Разные окна могут иметь свойства с одинаковыми именами.
Поскольку передача имен - строк произвольной длины - от клиента к серверу может увеличить нагрузку на сеть, X идентифицирует свойства с помощью целых чисел - атомов. Процедура XInternAtom() включает свойство с указанным именем в таблицу сервера и возвращает соответствующий атом. Полный список реализуемых X протоколом атомов можно найти в файле /usr/include/X11/Xatom.h.
Данные свойства рассматриваются сервером как массив единиц длиной 8, 16 или 32 бита. Их конкретная интерпретация осуществляется программами-клиентами.
Каждое свойство имеет тип, который, в свою очередь, также задается тем или иным свойством. Например, свойство, соответствующее атому XA_STRING, задает тип "строка".
Читать дальшеИнтервал:
Закладка: