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

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

Жанры

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

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

Шрифт:

 WND_MIN_HGH=50;

 WND_BORDER_WDT=5;

 WND_TITLE='Hello!';

 WND_ICON_TITLE='Hello!';

 PRG_CLASS='Hello!';

(* SetWindowManagerHints - процедура передает информацию о свойствах программы менеджеру окон. *)

procedure SetWindowManagerHints(

 prDisplay: PDisplay; (*Указатель на структуру TDisplay *)

 psPrgClass: PChar; (*Класс
программы *)

 argv: PPChar; (*Аргументы программы *)

 argc: integer; (*Число аргументов *)

 nWnd: TWindow; (*Идентификатор окна *)

x, (*Координаты левого верхнего *)

y, (*угла окна *)

nWidth,

nHeight, (*Ширина и высота окна *)

nMinWidth,

nMinHeight:integer; (*Минимальные ширина и высота окна *)

 psTitle: PChar; (*Заголовок окна *)

 psIconTitle: PChar; (*Заголовок пиктограммы окна *)

 nIconPixmap: TPixmap (*Рисунок пиктограммы *)

);

var

 rSizeHints: TXSizeHints; (*Рекомендации о размерах окна*)

 rWMHints: TXWMHints;

 rClassHint: TXClassHint;

 prWindowName, prIconName: TXTextProperty;

begin

if (XStringListToTextProperty(@psTitle, 1, @prWindowName)=0) or

(XStringListToTextProperty(@psIconTitle, 1, @prIconName)=0) then

 begin

writeln('No memory!');

halt(1);

end;

 rSizeHints.flags:= PPosition OR PSize OR PMinSize;

 rSizeHints.min_width:= nMinWidth;

 rSizeHints.min_height:= nMinHeight;

 rWMHints.flags:= StateHint OR IconPixmapHint OR InputHint;

 rWMHints.initial_state:= NormalState;

 rWMHints.input:= True;

 rWMHints.icon_pixmap:= nIconPixmap;

 rClassHint.res_name:= argv[0];

 rClassHint.res_class:= psPrgClass;

 XSetWMProperties(prDisplay, nWnd, @prWindowName, @prIconName, argv, argc, @rSizeHints, @rWMHints, @rClassHint);

end;

(* main -
основная процедура программы
*)

//void main(int argc, char *argv[])

var

 prDisplay: PDisplay; (* Указатель на структуру Display *)

 nScreenNum: integer; (* Номер экрана *)

 prGC: TGC;

 rEvent: TXEvent;

 nWnd: TWindow;

begin

(* Устанавливаем связь с сервером *)

 prDisplay:= XOpenDisplay(nil);

if prDisplay = nil then begin

writeln('Can not connect to the X server!');

halt (1);

 end;

 (* Получаем номер основного экрана *)

 nScreenNum:= XDefaultScreen(prDisplay);

 (* Создаем окно *)

 nWnd:= XCreateSimpleWindow(prDisplay, XRootWindow (prDisplay, nScreenNum), WND_X, WND_Y, WND_WDT, WND_HGH, WND_BORDER_WDT, XBlackPixel (prDisplay, nScreenNum),

 XWhitePixel (prDisplay, nScreenNum));

 (* Задаем рекомендации для менеджера окон *)

 SetWindowManagerHints(prDisplay, PRG_CLASS, argv, argc, nWnd, WND_X, WND_Y, WND_WDT, WND_HGH, WND_MIN_WDT, WND_MIN_HGH, WND_TITLE, WND_ICON_TITLE, 0);

 (* Выбираем события, обрабатываемые программой *)

 XSelectInput(prDisplay, nWnd, ExposureMask OR KeyPressMask);

 (* Показываем окно *)

 XMapWindow(prDisplay, nWnd);

 (* Цикл получения и обработки событий *)

while (true) do begin

XNextEvent(prDisplay, @rEvent);

case (rEvent.eventtype) of

Expose:

begin

(* Запрос на перерисовку *)

if (rEvent.xexpose.count ‹› 0) then continue;

prGC:= XCreateGC (prDisplay, nWnd, 0, nil);

XSetForeground(prDisplay, prGC, XBlackPixel (prDisplay, 0));

XDrawString(prDisplay, nWnd, prGC, 10, 50, 'Hello, world!', strlen ('Hello, world!'));

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

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

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

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

Эммануэль

Арсан Эммануэль
1. Эммануэль
Любовные романы:
эро литература
7.38
рейтинг книги
Эммануэль

Темный Лекарь

Токсик Саша
1. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь

Ярар. Начало

Грехов Тимофей
1. Ярар
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ярар. Начало

Господин Хладов

Шелег Дмитрий Витальевич
4. Кровь и лёд
Фантастика:
аниме
5.00
рейтинг книги
Господин Хладов

Двойник короля 12

Скабер Артемий
12. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 12

Спасите меня, Кацураги-сан! Том 5

Аржанов Алексей
5. Токийский лекарь
Фантастика:
городское фэнтези
попаданцы
дорама
5.00
рейтинг книги
Спасите меня, Кацураги-сан! Том 5

Законы рода

Андрей Мельник
1. Граф Берестьев
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Законы рода

Душелов

Faded Emory
1. Внутренние демоны
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Душелов

Я до сих пор князь. Книга XXII

Дрейк Сириус
22. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор князь. Книга XXII

Снайпер

Поселягин Владимир Геннадьевич
3. Жнец
Фантастика:
боевая фантастика
попаданцы
5.60
рейтинг книги
Снайпер

Афганский рубеж 4

Дорин Михаил
4. Рубеж
Фантастика:
попаданцы
альтернативная история
6.00
рейтинг книги
Афганский рубеж 4

Аристократ из прошлого тысячелетия

Еслер Андрей
3. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Аристократ из прошлого тысячелетия