Программирование в 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!'));
Поделиться:
Популярные книги
Феодал. Том 2
2. Диктатура Параметров
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Афганский рубеж 2
2. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Законы Рода. Том 10
10. Граф Берестьев
Фантастика:
юмористическая фантастика
аниме
фэнтези
5.00
рейтинг книги
Я уже царь. Книга XXIX
29. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Наследие Маозари 9
9. Наследие Маозари
Фантастика:
попаданцы
постапокалипсис
рпг
сказочная фантастика
6.25
рейтинг книги
Сапер. Том IV
4. Сапер
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Матабар VIII
8. Матабар
Проза:
магический реализм
5.00
рейтинг книги
Возвращение Безумного Бога 2
2. Возвращение Безумного Бога
Фантастика:
попаданцы
рпг
аниме
5.00
рейтинг книги
Протокол "Наследник"
1. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюционер из трущоб. Том 10
10. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Искушение генерала драконов
2. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Эпоха Опустошителя. Том V
5. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Адвокат империи
1. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
фэнтези
5.75
рейтинг книги
Наследие Маозари 5
5. Наследие Маозари
Фантастика:
фэнтези
юмористическое фэнтези
5.00