Программирование в X Window средствами Free Pascal - [3]
1.1.4 Графические возможности X Window
Система X Window предназначена для работы на растровых дисплеях. В подобного рода устройствах изображение представляется матрицей светящихся точек - пикселей. Каждый пиксель кодируется определенным числом бит (как правило 2, 4, 8, 16 или 24). Число бит-на-пиксель называют "толщиной" или глубиной дисплея. Биты с одинаковыми номерами во всех пикселях образуют как бы плоскость, параллельную экрану. Ее называют цветовой плоскостью. X позволяет рисовать в любой цветовой плоскости (или плоскостях), не затрагивая остальные.
Значение пикселя не задает непосредственно цвет точки на экране. Последний определяется с помощью специального массива данных, называемого палитрой. Цвет есть содержимое ячейки палитры, номер которой равен значению пикселя.
X имеет большой набор процедур, позволяющих рисовать графические примитивы - точки, линии, дуги, выводить текст и работать с областями произвольной формы.
1.1.5 Свойства и атомы
В X Window встроены средства для обеспечения обмена информацией между программами-клиентами. Для этого используется механизм свойств (properties). Свойство - это порция данных, связанная с некоторым объектом (например, окном), и которая доступна всем клиентам X.
Каждое свойство имеет имя и уникальный идентификатор - атом. Обычно имена свойств записываются большими буквами, например: MY_SPECIAL_PROPERTY. Атомы используются для доступа к содержимому свойств с тем, чтобы уменьшить количество информации, пересылаемой по сети между клиентами и X сервером.
В X предусмотрен набор процедур, позволяющих перевести имя свойства в уникальный атом, и, наоборот, по атому получить необходимые данные.
Некоторые свойства и соответствующие им атомы являются предопределенными и создаются в момент инициализации сервера. Этим атомам соответствуют символические константы, определенные в файлах-заголовках библиотеки Xlib. Эти константы начинаются с префикса XA_.
1.1.6 Первый пример
Продолжая традиции многих изданий, посвященных программированию, начнем с программы, рисующей на экране строку "Hello, world!". В этом примере приведены основные шаги, необходимые для работы в X Window.
>uses x,xlib,x11,xutil,strings;
>const
> WND_X=0;
> WND_Y=0;
> WND_WDT=100;
> WND_HGH=100;
> WND_MIN_WDT=50;
> WND_MIN_HGH=50;
> WND_BORDER_WDT=5;
> WND_TITLE='Hello!';
> WND_ICON_TITLE='Hello!';
> PRG_CLASS='Hello!';
>(* SetWindowManagerHints - процедура передает информацию о свойствах программы менеджеру окон. *)
>procedure SetWindowManagerHints(
> prDisplay: PDisplay; (*Указатель на структуру TDisplay *)
> psPrgClass: PChar; (*Класс программы *)
> argv: PPChar; (*Аргументы программы *)
> argc: integer; (*Число аргументов *)
> nWnd: TWindow; (*Идентификатор окна *)
> x, (*Координаты левого верхнего *)
> y, (*угла окна *)
> nWidth,
> nHeight, (*Ширина и высота окна *)
> nMinWidth,
> nMinHeight:integer; (*Минимальные ширина и высота окна *)
> psTitle: PChar; (*Заголовок окна *)
> psIconTitle: PChar; (*Заголовок пиктограммы окна *)
> nIconPixmap: TPixmap (*Рисунок пиктограммы *)
>);
>var
> rSizeHints: TXSizeHints; (*Рекомендации о размерах окна*)
> rWMHints: TXWMHints;
> rClassHint: TXClassHint;
> prWindowName, prIconName: TXTextProperty;
>begin
>if (XStringListToTextProperty(@psTitle, 1, @prWindowName)=0) or
> (XStringListToTextProperty(@psIconTitle, 1, @prIconName)=0) then
> begin
> writeln('No memory!');
> halt(1);
>end;
> rSizeHints.flags:= PPosition OR PSize OR PMinSize;
> rSizeHints.min_width:= nMinWidth;
> rSizeHints.min_height:= nMinHeight;
> rWMHints.flags:= StateHint OR IconPixmapHint OR InputHint;
> rWMHints.initial_state:= NormalState;
> rWMHints.input:= True;
> rWMHints.icon_pixmap:= nIconPixmap;
> rClassHint.res_name:= argv[0];
> rClassHint.res_class:= psPrgClass;
> XSetWMProperties(prDisplay, nWnd, @prWindowName, @prIconName, argv, argc, @rSizeHints, @rWMHints, @rClassHint);
>end;
>(* main - основная процедура программы *)
>//void main(int argc, char *argv[])
>var
> prDisplay: PDisplay; (* Указатель на структуру Display *)
> nScreenNum: integer; (* Номер экрана *)
> prGC: TGC;
> rEvent: TXEvent;
> nWnd: TWindow;
>begin
>(* Устанавливаем связь с сервером *)
> prDisplay:= XOpenDisplay(nil);
>if prDisplay = nil then begin
> writeln('Can not connect to the X server!');
> halt (1);
> end;
> (* Получаем номер основного экрана *)
> nScreenNum:= XDefaultScreen(prDisplay);
> (* Создаем окно *)
> nWnd:= XCreateSimpleWindow(prDisplay, XRootWindow (prDisplay, nScreenNum), WND_X, WND_Y, WND_WDT, WND_HGH, WND_BORDER_WDT, XBlackPixel (prDisplay, nScreenNum),
> XWhitePixel (prDisplay, nScreenNum));
> (* Задаем рекомендации для менеджера окон *)
> SetWindowManagerHints(prDisplay, PRG_CLASS, argv, argc, nWnd, WND_X, WND_Y, WND_WDT, WND_HGH, WND_MIN_WDT, WND_MIN_HGH, WND_TITLE, WND_ICON_TITLE, 0);
> (* Выбираем события, обрабатываемые программой *)
> XSelectInput(prDisplay, nWnd, ExposureMask OR KeyPressMask);
> (* Показываем окно *)
> XMapWindow(prDisplay, nWnd);
> (* Цикл получения и обработки событий *)
>while (true) do begin
> XNextEvent(prDisplay, @rEvent);
>case (rEvent.eventtype) of
> Expose:
>begin
> (* Запрос на перерисовку *)
>if (rEvent.xexpose.count ‹› 0) then continue;
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.