Чтение онлайн

на главную

Жанры

Программирование в X Window средствами Free Pascal

Семериков С. А.

Шрифт:

 screen_colormap:= XDefaultColormap(display, XDefaultScreen(display));

 (* выделяем черный и белый цвета *)

 rc:= XAllocNamedColor(display,
screen_colormap,
'black',
@cursor_fg,
@cursor_fg);

 if (rc = 0) then begin

writeln('XAllocNamedColor - невозможно распределить цвет "black"');

halt(1);

 end;

 rc:= XAllocNamedColor(display,
screen_colormap,
'white',
@cursor_bg,
@cursor_bg);

 if (rc = 0) then begin

writeln('XAllocNamedColor -
невозможно распределить цвет "white"');

halt(1);

 end;

 (* Наконец, создаем курсор. Горячую точку устанавливаем ближе к 
верхнему левому углу курсора - позиции (x=5, y=4). *)

 icon_cursor:= XCreatePixmapCursor(display, bitmap, bitmap,
@cursor_fg, @cursor_bg,
5, 4);

Когда мы определяем курсор, необходимо определить, какой пиксель курсора является указателем, доставляемым пользователю в различные события от мыши. Обычно, мы выберем позицию курсора, которая визуально выглядит похожей на "горячую точку". Например, на курсоре в виде стрелки конец стрелки будет определен как горячая точка.

Когда курсор больше не нужен, его необходимо освободить, используя функцию XFreeCursor:

XFreeCursor(display, icon_cursor);

После того, как курсор создан, необходимо сообщить X серверу об окне, к которому он должен быть подключен. Это делается с помощью XDefineCursor, и заставляет сервер X менять указатель мыши на форму этого курсора всякий раз, когда указатель мыши перемещается внутри этого окно. Мы можем отключить этот курсор от нашего окна с помощью функции Xlib XUndefineCursor, которая заставит отображаться встроенный курсор.

(* прикрепить курсор к окну *)

XDefineCursor(display, win, icon_cursor);

(* отключить курсор от окна *)

XUndefineCursor(display, win);

1.2.7 Лабораторная работа #2 "Текст и графика"

1. Напишите программу, выводящую текстовое сообщение в произвольную позицию (в пределах окна) произвольным цветом. Цвет и координаты должны меняться при изменении размеров окна.

2. Составьте программу, принимающую со стандартного ввода маску шрифта, выводимую строку, координаты х, у и отображающую окно с текстом согласно введенной информации.

3. Нарисуйте в окне график функции sin(x) на отрезке [-?;?]. Оси подпишите курсивом, метки

по осям - обычным шрифтом, начало координат (0) выделите жирным шрифтом.

4. Нарисуйте в окне 100 окружностей. Цвет, координаты центра и радиус выбирать случайным образом.

5. Используя StructureNotifyMask и русский шрифт, модифицируйте программу из первого задания лабораторной работы #1 таким образом, чтобы сообщение всегда отображалось в центре окна.

6. Составьте программу, выводящую в окно все символы стандартного курсорного шрифта.

1.3 Работа с внешними устройствами

1.3.1 Клавиатура

Как и большинство интерактивных программ, задачи, выполняющиеся в X Window, активно используют для ввода информации клавиатуру компьютера. Когда пользователь нажимает или отпускает клавишу, сервер получает соответствующий сигнал, который преобразуется в событие и отправляется в очередь программы, имеющей фокус ввода (input focus).

Поясним, что такое фокус ввода. Дело в том, что клавиатура у машины одна, и она разделяется всеми выполняющимися одновременно программами. Но в каждый момент времени поступающий от устройства сигнал доступен лишь одной из них, как правило, той, которой принадлежит активное окно. В этом случае говорят, что программа и ее окно имеют фокус ввода. Последний может переходить от окна к окну и от программы к программе.

Когда окно получает фокус, соответствующей программе посылается событие FocusIn, при потере - приходит событие FocusOut.

Когда пользователь нажимает клавишу клавиатуры, программа получает событие KeyPress. Сервер также может послать событие KeyRelease, когда клавиша отпускается, но это справедливо не для всех типов компьютеров.

Оба этих события сопровождаются структурой типа TXKeyEvent. Ее поле keycode содержит код нажатой клавиши, а поле state - состояние клавиш-модификаторов и кнопок мыши. Модификаторами называются такие клавиши, как Shift, Ctrl, Caps Lock. Кроме этого, X предусматривает наличие дополнительных модификаторов, которые обозначаются Mod1,…, Mod5. Каждой нажатой клавише-модификатору и кнопке мыши соответствует флаг в поле state.

Коды, передаваемые через поле keycode структуры TXKeyEvent, однозначно идентифицируют клавиши. Их конкретные значения зависят от типа машины и клавиатуры. Эти коды мы будем называть физическими. Чтобы обеспечить переносимость программ, сервер устанавливает соответствие между физическими кодами клавиш, которые могут меняться от компьютера к компьютеру, и целочисленными константами - логическими кодами (символами). Они имеют предопределенные значения, которые приведены в файле /usr/include/X11/keysymdef.h и начинаются с префикса "XK_". Так, букве "a" соответствует символ XK_a, клавише ‹Return› (‹Enter›) - символ XK_Return и т.д.

Поделиться:
Популярные книги

Сценарий сериала. Как написать историю, достойную Нетфликса

Ландау Нил
Сценарная мастерская. Секреты идеального текста
Документальная литература:
зарубежная публицистика
5.00
рейтинг книги
Сценарий сериала. Как написать историю, достойную Нетфликса

Бояръ-Аниме. Газлайтер. Том 35

Володин Григорий Григорьевич
35. История Телепата
Фантастика:
аниме
боевая фантастика
фэнтези
6.40
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 35

Все тайны Земли, которые ты должен узнать, прежде чем умрешь

Пименова В. Л.
Все тайны Земли
Научно-образовательная:
прочая научная литература
5.00
рейтинг книги
Все тайны Земли, которые ты должен узнать, прежде чем умрешь

Рин. Книга I. Звезда и жернов. Экземпляр для свободного и бесплатного распространения в интернете

Армай Макс
Фантастика:
фэнтези
5.00
рейтинг книги
Рин. Книга I. Звезда и жернов. Экземпляр для свободного и бесплатного распространения в интернете

Сборник "Туманность Андромеды"

Ефремов Иван Антонович
13. Большая серия русской фантастики
Фантастика:
научная фантастика
7.00
рейтинг книги
Сборник Туманность Андромеды

Попаданец на рыбалке. Книги 1-7

Скворцов Владимир Николаевич
Попаданец на рыбалке
Фантастика:
фэнтези
попаданцы
6.88
рейтинг книги
Попаданец на рыбалке. Книги 1-7

Ангел Спартака

Валентинов Андрей
2. Спартак
Фантастика:
альтернативная история
6.50
рейтинг книги
Ангел Спартака

Кодекс Охотника. Книга IV

Винокуров Юрий
4. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга IV

Прагматик

Володин Григорий Григорьевич
1. Император-Паук
Фантастика:
боевая фантастика
5.00
рейтинг книги
Прагматик

Я снова князь. Книга XXIII

Дрейк Сириус
23. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я снова князь. Книга XXIII

Мечи Дня и Ночи

Геммел Дэвид
11. Дренайские сказания
Фантастика:
фэнтези
7.71
рейтинг книги
Мечи Дня и Ночи

Точка Бифуркации XVI

Смит Дейлор
16. ТБ
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Точка Бифуркации XVI

Я еще не царь

Дрейк Сириус
25. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я еще не царь

Заблудший святой

Сабатини Рафаэль
Приключения:
исторические приключения
7.38
рейтинг книги
Заблудший святой