Программирование в X Window средствами Free Pascal - [10]
> 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.
1.1.10 Лабораторная работа #1 "Основные понятия Xlib"
1. Используя компилятор командной строки, выполните компиляцию примера из п. 1.1 и выполните полученную программу.
2. Настройте интегрированную среду Анюта для работы с кириллицей и выполните компиляцию в ней предыдущей программы.
3. На основе примера напишите программу, которая при нажатии клавиши мыши пишет сообщение Pressed, а при отпускании - Released.
4. Используя функции XFlush() / XSync() и delay(), напишите программу без цикла обработки сообщений, отображающую черное окно размером 100х100 пикселей в течение 5 секунд.
1.2 Текст и графика
В данном разделе описываются возможности, которые имеет программист для вывода текста и произвольных графических изображений. Особенностью X является то, что рисовать можно не только в окне, но и в специально подготовленной области памяти. Данная область называется картой пикселей и идентифицируется целым числом, имеющим тип TPixmap. Карта толщиной в один бит имеет специальное название - битовая.
1.2.1 Графический контекст
Прежде чем начать работу с графикой, программа должна выделить себе специальную структуру данных и получить указатель на нее. Эта структура называется графическим контекстом (Graphic Context (GC)). Указатель на GC используется в качестве одного из параметров при вызове "рисующих" функций X. Графический контекст содержит ряд атрибутов, влияющих на отображение объектов: текста, линий, фигур и др. Выделенный GC должен быть освобожден до завершения работы программы.
Графический контекст создается процедурой XCreateGC(), имеющей следующий прототип:
>function XCreateGC(prDisplay: PDisplay; nDrawable: TDrawable; nValueMask: cardinal; prValues: PXGCValues): TGC; cdecl; external;
Первый аргумент - это указатель на структуру типа TDisplay, который программа получает после вызова XOpenDisplay(); второй - идентификатор окна (или карты пикселей), в котором программа будет рисовать; третий - битовая маска, определяющая, какие атрибуты GC задаются; последний аргумент - структура типа TXGCValues, определяемая следующим образом:
>TXGCValues = record
> Xfunction: longint; {Renamed function to Xfunction}
> plane_mask: cardinal;
> foreground: cardinal;
> background: cardinal;
> line_width: longint;
> line_style: longint;
> cap_style: longint;
> join_style: longint;
> fill_style: longint;
> fill_rule: longint;
> arc_mode: longint;
> tile: TPixmap;
> stipple: TPixmap;
> ts_x_origin: longint;
> ts_y_origin: longint;
> font: TFont;
> subwindow_mode: longint;
> graphics_exposures: TBool;
> clip_x_origin: longint;
> clip_y_origin: longint;
> clip_mask: TPixmap;
> dash_offset: longint;
> dashes: char;
>end;
>PXGCValues = ^TXGCValues;
Значения полей данной структуры будут объяснены ниже. Каждому из них соответствует бит в маске, которая передается в качестве третьего параметра при вызове процедуры XCreateGC(). Эти биты обозначаются символическими константами, определенными в модуле X. Если бит установлен, то значение соответствующего атрибута должно быть взято из переданной функции XCreateGC() структуры TXGCValues. Если бит сброшен, то атрибут принимает значение по умолчанию.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.