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

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

Жанры

Программирование в 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!'));

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

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

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

Я не царь. Книга XXIV

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

Артефактор. Шаг в неизвестность

Седых Александр Иванович
1. Артефактор
Фантастика:
фэнтези
боевая фантастика
попаданцы
6.12
рейтинг книги
Артефактор. Шаг в неизвестность

Абсурдистан

Штейнгарт Гари
Проза:
современная проза
5.00
рейтинг книги
Абсурдистан

Тринадцатый XI

NikL
11. Видящий смерть
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Тринадцатый XI

Печать мастера

Лисина Александра
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Печать мастера

И.Бабель. Воспоминания современников

Паустовский Константин Георгиевич
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
И.Бабель. Воспоминания современников

Недотепа

Лукьяненко Сергей Васильевич
Фантастика:
фэнтези
5.80
рейтинг книги
Недотепа

Чужое наследие

Кораблев Родион
3. Другая сторона
Фантастика:
боевая фантастика
8.47
рейтинг книги
Чужое наследие

Кодекс Охотника. Книга XL

Винокуров Юрий
40. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XL

Наномашины, первоклашка! Том 4

Новиков Николай Васильевич
4. Чего смотришь? Иди книгу читай
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наномашины, первоклашка! Том 4

Мятежник

Прокофьев Роман Юрьевич
4. Стеллар
Фантастика:
боевая фантастика
7.39
рейтинг книги
Мятежник

Элизиум. Аликс и монеты

Андерсон Александр
1. Элизиум
Фантастика:
фэнтези
сказочная фантастика
8.98
рейтинг книги
Элизиум. Аликс и монеты

Звездная Кровь. Экзарх II

Рокотов Алексей
2. Экзарх
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Звездная Кровь. Экзарх II