Читаем Программирование в X Window средствами Free Pascal полностью

 Принимает в качестве параметров дисплей, размер окна (в пикселях) и положение окна (также в пикселях). Возвращает дескриптор окна.

 Окно создается с черной рамкой шириной в 2 пикселя и автоматичсеки отображается после создания. *)

function create_simple_window(display: PDisplay; width, height, x, y: integer): TWindow;

var

 screen_num, win_border_width: integer;

 win: TWindow;

begin

 screen_num:= XDefaultScreen(display);

 win_border_width:= 2;


(* создаем простое окно как прямой потомок корневого окна экрана, используя черный и белый цвета в качестве основного и фонового, и

размещая новое окно в верхнем левом углу по заданным координатам
*)


 win:= XCreateSimpleWindow(display, XRootWindow(display, screen_num), x, y, width, height, win_border_width, XBlackPixel(display, screen_num), XWhitePixel(display, screen_num));


(* Отображаем окно на экране. *)

 XMapWindow(display, win);


(* Заставляем выполниться все запросы к Х серверу. *)

 XFlush(display);


 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);

 (* отладочная печать в стандартный вывод *)

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже