ГЛАВА 6. ГРАФИКА В PASCAL

 

§ 6.1. Графические библиотеки языка Паскаль

 

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

        Необходимость использовать библиотеки подпрограмм возникает, например, при рисовании на экране. При этом необходимо обычно использовать библиотеки Graph и Сrt. Для подключения этих библиотек в начале программы нужно указать их имена в директиве uses, например:

Uses CRT, GRAPH;

        Модуль CRT содержит процедуры и функции, обеспечивающие управление текстовым режимом работы экрана, работу со звуком, процедуры очистки экрана и работы с клавиатурой. Модуль GRAPH содержит обширный набор типов, констант, процедур и функций (более 50) для управления графическим режимом работы экрана.

        Указанные библиотеки содержат десятки процедур и функций, ниже приведено описание некоторых из них. Более полное описание этих модулей можно найти в литературе. В приведенном ниже описании указаны количество и тип параметров и тип функций, чтобы программист смог сориентироваться, какие данные можно использовать при вызове этих подпрограмм. Однако при написании операторов вызова, типы не указываются, как показано в примерах в следующем параграфе.

 

Состав модуля GRAPH

putpixel(x, y: integer; color: word) – рисует точку с координатами (х, у) и цветом color.

line(x1, y1, x2, y2: integer) – рисует линию, начинающуюся в точке (х1, у1) и заканчивающуюся в точке (х2, у2).

rectangle(x1, y1, x2, y2: integer) – рисует прямоугольник, (х1, у1) – координаты левого верхнего угла, (х2, у2) – правого нижнего.

bar(x1,y1,x2,y2) - рисует закрашенный прямоугольник, (х1, у1) – координаты левого верхнего угла, (х2, у2) – правого нижнего. Цвет и шаблон закраски устанавливается процедурами SetFillStyle и SetFillPattern.

circle(x, y: integer; R: word) – рисует окружность с центром в точке (х, у) и радиусом R.

arc(x,y:integer; stangle, endangle, R :word); - рисует дугу окружности, из угла stangle к endangle, с радиусом R, используя точку с координатами (х, у), как центр окружности.

ellipse(x, y: integer; stangle, endangle, xr, xy: word) – рисует дугу эллипса с центром в точке (х, у), полуосями xr, yr; stangle и endangle – начальный и конечный углы дуги (описываются от горизонтальной оси против часовой стрелки).

pieslice(x, y: integer; stangle, endangle, R :word) - строит сектор круга, закрашенный текущей штриховкой и цветом заполнения (устанавливается процедурами setfillstyle и setfillpattern). (х, у) — координаты центра сектора круга; stangle и endangle – начальный и конечный углы сектора, отсчитываемые против часовой стрелки от горизонтальной оси, направленной вправо; R — радиус сектора.

setcolor(color: word) – устанавливает цвет линии, параметр color принимает значения в диапазоне от 0 до 15.

setbkcolor(color :word); -устанавливает цвет фона color, номера цветов фона находятся в диапазоне от 0 до 15.

floodfill(x, y: integer; border : word); -закрашивает замкнутую область, используя стиль и цвет закраски, установленные процедурами setfillstyle и setfillpattern. Точка с координатами (х, у) - начальная точка внутри замкнутой области, с которой начнется закраска. Закрашивается область, ограниченная цветом с номером border.

setfillstyle(pattern :word; color :word); - устанавливает цвет сolor и стиль закраски рattern (целое число 0-12).

setfillpattern(pattern :fillpatterntype; color :word); - устанавливает цвет сolor и шаблон закраски рattern, определенный пользователем через тип fillpatterntype следующим образом:

type fillpatterntype = array [1..8] of byte;

outtextxy(x, y : integer; textstring : string); -отображает строковый параметр textstring с позиции (x,y) графического экрана.

 

Расшифровка стилей и шаблонов закраски процедуры setfillstyle

Параметр pattern может принимать следующее значения:

0 - EmptyFill - не закрашивать (фон), 1 - SolidFill - сплошная закраска, 2 – LineFillштриховка горизонтальными линиями, 3 – LtSlashFillштриховка косыми линиями //////, 4 – SlashFillутолщенные линии ///////////, 5 – BkSlashFill - утолщенные линии \\\\\\\\\\\\, 6 – LtBkSlashFillштриховка \\\\\\\\\\\,7 – HatchFill - заполнение ++++++, 8 – XhatchFillзаполнение ХХХХХХХХХ, 9 – InterleaveFill - заполнение ########, 10 - WideDotFillзаполннение редкими точками, 11 – CloseDotFillзаполнение частыми точками, 12 – UserFill – узор, определяемый пользователем. В последнем случае, для определения типа закраски необходимо использовать процедуру setfillpattern.

 

Задание цветов в графическом режиме можно выполнять различными способами:

·        Указание номера цвета цифрами от 0 до 15;

·        Указание названия цвета по-английски (без кавычек);

 

Таблица 6.1. Коды и наименования цветом для программирования в Pascal

Цвет

Номер цвета

Название

Пример

Черный

0

Black

 

Синий

1

Blue

 

Зеленый

2

Green

 

Циановый

3

Cyan

 

Красный

4

Red

 

Фиолетовый

5

Magenta

 

Коричневый

6

Brown

 

Светло-серый

7

Ligthgray

 

Темно-серый

8

Darkgray

 

Голубой

9

Ligthblue

 

Светло-зеленый

10

LigthGreen

 

Светло-циановый

11

LigthCyan

 

Розовый

12

LigthRed

 

Малиновый

13

LigthMagenta

 

Желтый

14

Yellow

 

Белый

15

White

 

 

        Более полное описание процедур модуля Graph дано в приложении М.

 

Состав модуля CRT

delay(ms:word); – процедура приостанавливает выполнение программы на ms миллисекунд.

keypressed:boolean;процедура возвращает значение TRUE, если была нажата какая-либо клавиша на клавиатуре и FALSE – если нет.

readkey:char; – функция считывает символ, соответствующий нажатой клавише. Если нажата функциональная клавиша, в первый раз функция принимает значение #0, во второй раз – значение кода этой клавиши. Если ни одна клавиша не была нажата, то функция приостанавливает работу программы и ожидает нажатия клавиши.

          Более полное описание процедур модуля Crt дано в приложении Л.

 

Другие процедуры данных модулей можно найти в литературе по языку Паскаль, а также в приложениях к данному пособию.