Программирование в X Window средствами Free Pascal
Шрифт:
create_simple_window:=win;
end;
//void main(int argc, char* argv[])
var
display: PDisplay; (* указатель на структуру дисплея Х *)
screen_num: integer; (* количество экранов для размещения окон *)
win: TWindow; (* дескриптор создаваемого окна *)
display_width, display_height: word; (* высота и ширина Х дисплея *)
win_width, win_height: word; (* высота и ширина нового окна *)
display_name: array [0…30] of Char;
name: string;
i: integer;
win_attr: TXWindowAttributes;
xx, y, scr_x, scr_y: integer;
child_win: TWindow;
(* переменная для хранения дескриптора родительского окна *)
parent_win: TWindow;
(* эта переменная будет хранить дескриптор корневого окна
экрана, на котором отображено наше окно *) root_win: TWindow; (* эта переменная будет хранить массив дескрипторов дочерних окон нашего окна, *)
child_windows: PWindow; (* а эта - их количество *)
num_child_windows: integer;
begin
name:= getenv('DISPLAY'); (* имя Х дисплея *)
for i:=1 to byte(name[0]) do
display_name[i-1]:=name[i];
display_name[byte(name[0])]:=#0;
(* устанавливаем соединение с Х сервером *)
display:= XOpenDisplay(display_name);
if (display = NIL) then begin
writeln(paramstr(0),': не могу соединиться с Х сервером ',
display_name);
halt(1);
end;
(* получаем геометрию экрана по умолчанию для нашего дисплея *)
screen_num:= XDefaultScreen(display);
display_width:= XDisplayWidth(display, screen_num);
display_height:= XDisplayHeight(display, screen_num);
(* создаем новое окно в 1/9 площади экрана *)
win_width:= (display_width div 3);
win_height:= (display_height div 3);
(* отладочная печать в стандартный вывод *)
writeln('ширина окна - ', win_width, '; высота - ', win_height);
(* создаем простое окно как прямой потомок корневого окна экрана, используя черный и белый цвета в качестве основного и фонового, и размещая новое окно в верхнем левом углу по заданным координатам *)
win:= create_simple_window(display, win_width, win_height, 0, 0);
XFlush(display);
(* отдохнем после трудов праведных *)
delay(3000);
(* пример изменения размеров окна *)
begin
(* в цикле уменьшаем окно *)
for i:=0 to 39 do begin
dec(win_width,3);
dec(win_height,3);
XResizeWindow(display, win, win_width, win_height);
XFlush(display);
delay(20);
end;
(* в цикле увеличиваем окно *)
for i:=0 to 39 do begin
inc(win_width,3);
inc(win_height,3);
XResizeWindow(display, win, win_width, win_height);
XFlush(display);
delay(20);
end;
end;
delay(1000);
(* пример перемещения окна *)
begin
(* вначале получаем текущие атрибуты окна *)
XGetWindowAttributes(display, win, @win_attr);
xx:= win_attr.x;
y:= win_attr.y;
(* затем находим окно родителя *)
begin
(* выполним запрос необходимых значений *)
XQueryTree(display, win,
@root_win,
@parent_win,
@child_windows, @num_child_windows);
(* мы должны освободить список дочерних дескрипторов, так как он был динамически выделен XQueryTree *)
Поделиться:
Популярные книги
Симеон Гордый
4. Государи московские
Научно-образовательная:
история
7.89
рейтинг книги
Собрание сочинений. Т. 20. Плодовитость
Проза:
классическая проза
5.00
рейтинг книги
Быть Иосифом Бродским. Апофеоз одиночества
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Контртеррор
6. Ермак
Фантастика:
альтернативная история
5.00
рейтинг книги
Неучтенный элемент. Том 4
4. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Философия Науки. Хрестоматия
Научно-образовательная:
философия
5.00
рейтинг книги
Барон Бранд Берс. Том 2
2. Бранд Берс
Проза:
магический реализм
5.00
рейтинг книги
Я все еще барон
4. Дорогой барон!
Фантастика:
боевая фантастика
5.00
рейтинг книги
Стёртые буквы
Фантастика:
фэнтези
6.25
рейтинг книги
Борьба и победы Иосифа Сталина
Научно-образовательная:
история
4.00
рейтинг книги
Реальная угроза
4. Джек Райан
Детективы:
боевики
5.75
рейтинг книги
Необыкновенное лето
2. Первые радости
Проза:
историческая проза
6.00
рейтинг книги
Мать Ученья
Фантастика:
фэнтези
мистика
5.00
рейтинг книги
Золото бунта
Приключения:
исторические приключения
7.50