Программирование в X Window средствами Free Pascal - [9]
Отображение окна может быть выполнено с помощью XMapWindow(), скрытие - с помощью XUnmapWindow(). Функция отображения заставит событие Expose послаться программе, если только окно полностью не закрыто другими окнами.
Другое действие, которое можно выполнить над окнами - переместить их в другую позицию. Это может быть выполнено функцией XMoveWindow(), которая принимает новые координаты окна. Имейте в виду, что после перемещения окно может быть частично скрытым другими окнами (или наоборот, открыто ими), и таким образом, может быть сгенерировано сообщение Expose.
Изменить размер окна можно с помощью функции XResizeWindow(). Мы можем также объединить перемещение и изменение размеров, используя одну функцию XMoveResizeWindow().
Все приведенные выше функции изменяли свойства одного окна. Существует ряд свойств, связанных с данным окном и другими окнами. Одно из них - порядок засылки в стек: порядок, в котором окна располагаются друг над другом. Говорят, что окно переднего плана находится на верхе стека, а окно заднего плана - на дне стека. Перемещение окна на вершину стека осуществляет функция XRaiseWindow(), перемещение окна на дно стека - функция XLowerWindow().
С помощью функции XIconifyWindow() окно может быть свернуто, а с помощью XMapWindow() - восстановлено. Для того, чтобы понять, почему для XIconifyWindow() нет обратной функции, необходимо заметить, что, когда окно сворачивается, на самом деле оно скрывается, а вместо него отображается окно иконки. Таким образом, чтобы восстановить исходное окно, нужно просто отобразить его снова. Иконка является на самом деле другим окном, которое просто тесно связано сильно с нашим нормальным окном - это не другое состояние нашего окна.
Следующий пример демонстрирует использование операций над окнами:
>uses x,xlib,xutil,crt,dos;
>(* create_simple_window - создает окно с белым фоном заданного размера.
> Принимает в качестве параметров дисплей, размер окна (в пикселях) и положение окна (также в пикселях). Возвращает дескриптор окна.
> Окно создается с черной рамкой шириной в 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);
> (* отладочная печать в стандартный вывод *)
> 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);
В учебно-методическом пособии рассматриваются основы языка программирования PL/SQL, реализованного в системе управления базами данных Oracle Database Server. Приводятся сведения о поддерживаемых типах данных, структуре программ PL/SQL и выполнении SQL-предложений в них. Отдельно рассмотрено создание хранимых в базах данных Oracle программ PL/SQL – процедур, функций, пакетов и триггеров.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
ГОСУДАРСТВЕННЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИИнформационная технологияРУКОВОДСТВО ПО УПРАВЛЕНИЮ ДОКУМЕНТИРОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯInformation technology. Guidelines for the management of software documentationИздание официальноеДата введения 1994-07-01ГОССТАНДАРТ РОССИИ Москва© Издательство стандартов, 1994.
Самоучитель UMLПервое издание.В книге рассматриваются основы UML – унифицированного языка моделирования для описания, визуализации и документирования объектно-ориентированных систем и бизнес-процессов в ходе разработки программных приложений. Подробно описываются базовые понятия UML, необходимые для построения объектно-ориентированной модели системы с использованием графической нотации. Изложение сопровождается примерами разработки отдельных диаграмм, которые необходимы для представления информационной модели системы.