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

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

Жанры

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

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

Шрифт:

Наиболее простой является процедура 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 OR KeyPressMask);

(* Получаем рисуемую строку *)

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 Межклиентское взаимодействие

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

На границе империй. Том 4

INDIGO
4. Фортуна дама переменчивая
Фантастика:
космическая фантастика
6.00
рейтинг книги
На границе империй. Том 4

Антимаг его величества. Том III

Петров Максим Николаевич
3. Модификант
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Антимаг его величества. Том III

Ст. сержант. Назад в СССР. Книга 5

Гаусс Максим
5. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ст. сержант. Назад в СССР. Книга 5

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

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

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

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

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

Лейтенант. Назад в СССР. Книга 8. Часть 1

Гаусс Максим
8. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Лейтенант. Назад в СССР. Книга 8. Часть 1

Кай из рода красных драконов

Бэд Кристиан
1. Красная кость
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кай из рода красных драконов

На границе империй. Том 8. Часть 2

INDIGO
13. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8. Часть 2

Я - злодейка в дораме. Сезон второй

Вострова Екатерина
2. Выжить в дораме
Фантастика:
уся
фэнтези
сянься
попаданцы
5.00
рейтинг книги
Я - злодейка в дораме. Сезон второй

Последний рейд

Сай Ярослав
5. Медорфенов
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Последний рейд

Хозяин Теней

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

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

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

Ермак. Противостояние. Книга одиннадцатая

Валериев Игорь
11. Ермак
Фантастика:
попаданцы
альтернативная история
4.50
рейтинг книги
Ермак. Противостояние. Книга одиннадцатая