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

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

   XFree(child_windows);

  end;


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

  XTranslateCoordinates(display, parent_win, win_attr.root, xx, y, @scr_x, @scr_y, @child_win);


  (* перемещаем окно влево *)

  for i:=0 to 39 do begin

   dec(scr_x,3);

   XMoveWindow(display, win, scr_x, scr_y);

   XFlush(display);

   delay(20);

  end;


  (* перемещаем окно вниз *)

  for i:=0 to 39 do begin

   inc(scr_y,3);

   XMoveWindow(display, win, scr_x, scr_y);

   XFlush(display);

   delay(20);

  end;


  (* перемещаем окно вправо *)

  for i:=0 to 39 do begin

   inc(scr_x,3);

   XMoveWindow(display, win, scr_x, scr_y);

   XFlush(display);

   delay(20);

  end;


  (* перемещаем окно вверх *)

  for i:=0 to 39 do begin

   dec(scr_y,3);

   XMoveWindow(display, win, scr_x, scr_y);

   XFlush(display);

   delay(20);

  end;

 end;


 delay(1000);


 (* пример сворачивания и восстановления окна *)

 begin

  (* сворачиваем окно *)

  XIconifyWindow(display, win, XDefaultScreen(display));

  XFlush(display);

  delay(2000);

  (* восстанавливаем окно *)

  XMapWindow(display, win);

  XFlush(display);

  delay(2000);

 end;


 XFlush(display);


 (* короткая передышка *)

 delay(2000);


 (* закрываем соединение с Х сервером *)

 XCloseDisplay(display);

end.

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