Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1800

.pdf
Скачиваний:
5
Добавлен:
15.11.2022
Размер:
925.77 Кб
Скачать

удаляет строку, на которой находится курсор, и приподнимает все нижние строки на строку вверх. Самая нижняя строка очищается.

Процедура

procedure ClrScr;

очищает экран и помещает курсор в левый верхний угол. Процедура

procedure Delay(time : Word);

приостанавливает работу программы на время time, выраженное в миллисекундах.

Процедура

procedure GotoXY(x,y : Byte);

устанавливает курсор в точку с координатами x,y текущего окна.

Процедура

procedure InsLine;

вставляет пустую строку в позицию курсора. Процедура

procedure Sound(freq : Word);

включает звучание системного динамика с частотой freq, заданной в герцах.

Процедура

procedure NoSound;

выключает звучание системного динамика. Переменная

var CheckBreak : Вoolean;

разрешает или запрещает программе закрываться при нажатии комбинации клавиш Ctrl-Break.

Графический режим

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

80

Для эффективного программирования графического режима в комплект интегрированной среды Free Pascal введена специализированная библиотека Graph. Эта библиотека содержит огромное число графических процедур и функций. Взаимодействие с видеоадаптером и операционной системой организовано через графические драйверы, входящие в комплект интегрированной среды.

Предусмотреть запуск графического режима можно в любом месте программы. Для этого нужно подключить к программе модуль Graph и описать две вспомогательные переменные целого типа

uses graph;

var gd, gm: integer;

Переменная gd (graphic driver) используется для хранения номера (кода) графического драйвера, а gm (graphic mode) — графического режима. Имена переменных gd и gm могут быть любыми.

Перед инициализацией графики необходимо присвоить значения переменным gd и gm. Однако можно предоставить выбор наилучшего драйвера и режима самой программе, выполнив присваивание gd:=Detect; где Detect — функция автоопределдения параметров графики из модуля Graph. Присваивание значения переменной gm не требуется.

Инициализацию графического режима выполняет проце-

дура

procedure InitGraph(var gd,dm : integer; s : string);

Здесь параметр s — путь к файлу графического драйвера. При автоопределении параметров в качестве параметра s целесообразно использовать пустую строку.

При успешном выполнении процедуры InitGraph будет создано дополнительное окно графического вывода программы.

81

По окончании работы с графическим режимом него необходимо деинициализировать (закрыть) с помощью процедуры

procedure CloseGraph;

В следующем примере выполняется инициализация графического режима и его закрытие после нажатия любой клавиши.

Program Graphika; uses graph;

var gd,gm : integer; begin

gd:=Detect;

InitGraph(gd,gm,''); repeat until KeyPressed;

CloseGraph;

end.

Процесс построения изображений в графическом окне опирается на систему координат с началом в левом верхнем углу окна. Ось Х направлена вправо, ось Y — вниз. Аналогом текстового курсора в графическом режиме является невидимый текущий указатель. Зачастую рисование объектов выполняется относительно текущего указателя. Максимальное значение координат указателя зависит от разрешения (количества точек, размещаемых в окне). Получить максимально возможные координаты можно с помощью функций

function GetMaxX : Word; function GetMaxY : Word;

Цветовая схема графического режима, как правило, значительно богаче. Поэтому для кодирования цвета в модуле Graph используются переменные типа Word. Предусмотрены также символические названия цветов, приведенные в табл. 4.2.

82

Перемещение указателя

Перемещение указателя без прорисовки на экране осуществляется с помощью одной из процедур

procedure MoveTo (x,y: integer); procedure MoveRel (dx,dy: integer);

Первая из них перемещает указатель в указанные координаты, вторая смещает указатель на величины dx и dy относительно текущей позиции.

Узнать текущие координаты указателя можно с помощью функций

function GetX : Word; function GetY: Word;

Рисование точек

В библиотеке Graph вывод точки осуществляется процедурой

procedure PutPixel (x, y: integer; color:word);

где x, y: координаты расположения точки, color — цвет. Например, команда

PutPixel(GetMaxX div 2, GetMaxY div 2, Green);

выводит в центре экрана зеленую точку.

Рисование линий

Для построение отрезков прямых служат процедуры

Line, LineTo, LineRel.

Процедура

procedure Line (x1,y1,x2,y2 :integer);

где x1, y1 — координаты начала, x2,y2 — координаты конца линии. Следует заметить, что многие процедуры рисования графических примитивов, в частонсти процедура Line, не имеют параметра установки цвета. В этом случае цвет задается процедурой

procedure SetColor (color: word);

перед рисованием объекта. Например

SetColor(Red);

Line(0,0,100,200);

Функции

function GetColor : Word;

83

function GetBkColor: Word;

позволяют получить номер текущего цвета указателя и фона соответсвенно, а функция

function GetPixel(x, y : Word) : Word;

— номер цвета точки окна с указанными координатами. Процедура

procedure LineTo (x,y: integer);

строит линию из точки текущего положения указателя в точку с координатами x,y.

Процедура

procedure LineRel (dx,dy: integer);

строит линию между точкой текущего расположения указате-

ля (x, y) и точкой (x+dx, y+dy).

Допускается установка стиля линии процедурой procedure SetLineStyle(a,b,c: word);

где параметр a определяет тип линии, возможные значения которого описаны в виде констант и приведены в табл. 4.3.

Таблица 4.3

Стили линий

Константа

Значение

Описание

SolidLn

0

Непрерывная линия

DottedLn

1

Точечная линия

CenterLn

2

Штрих-пунктирная

DashedLn

3

Штриховая линия

UserBitLn

4

Стиль, задаваемый

образцом

 

 

Параметр с определяет толщину линии. Возможные значение толщины с=1 (линия в 1 пиксел) и с=3 (жирная линия толщиной в 3 пиксела).

Параметр b является образцом стиля и используется, если стиль линии равен UserBitLn (в протипном случае b=0). Образец задается в формате двухбайтового числа. Единицы соответствуют светлым участкам линии, нули — темным. Например, образец штриховой линии может выглядеть как

84

1111000011110000=$F0F0, а пунктироной линии как 1010101010101010=$AAAA. Например?

SetLineStyle(1,0,1);

Line(30,30, 555,500);

или

SetLineStyle(UserBitLn,$9898,3);

Line(30,30,555,500);

Построение прямоугольников

Прямоугольник можно построить, указав координаты его двух характерных точек, например левого верхнего (x1, y1) и правого нижнего (x2, y2) углов.

Процедура

procedure Rectangle(x1,y1,x2,y2:integer);

рисует незакрашенный прямоугольник, а процедура procedure Bar(x1,y1,x2,y2:integer);

— закрашенный прямоугольник. Процедура

procedure Bar3D(x1,y1,x2,y2,d:integer; b : boolean);

вычерчивает трехмерный закрашенный прямоугольник (параллелепипед). Параметр d определяет глубину трехмерного контура, а параметр b — закрыта ли верхняя «крышка» параллелепипеда.

Построение окружностей

Процедура

procedure Cicrle(x, y, r: word);

вычерчивает окружность с центром в точке (x, y) радиусом r. Процедура

procedure Arc(x,y: integer, , , R:integer);

рисует дуги окружностей. Параметрами x, y задается центр окружности, , — начальный и конечный углы в градусах относительно горизонтали, R – радиус дуги.

85

Построение эллипсов

Построение эллиптических дуг осуществляет процедура procedure Ellipse (x, y: integer, , , Rx, Ry: integer);

где x, y – центр эллипса, Rx, Ry — радиусы в горизонтальном

ивертикальном направлении. Для построения замкнутого эллипса начальный и конечный углы устанавливают равными 0

и360 градусов. Окружность является частным случаем эллипса при одинаковых горизонтальном и вертикальном радиусах. Так, например оператор

Ellipse(100, 100, 0, 360, 50,50);

рисует в графическом окне окружность. Процедура

procedure FillEllipse (x, y: integer, Rx, Ry: integer);

рисует закрашенный эллипс. Стиль и цвет закраски назначается процедурой

procedure SetFillStyle (style, color: word);

где style – стиль закраски, color – цвет закраски. Возможные значения стиля закраски приведены в табл. 4.4.

Таблица 4.4 Значения стилей закраски и из символические обозначения

Константа

Значение

Описание

EmptyFill

0

Сплошная закраска цве-

 

 

том фона

SolidFill

1

Сплошная закраска

LineFill

2

Заливка горизонтальными

 

 

линиями с промежутком

LtslashFill

3

Заливка наклонными // ли-

 

 

ниями нормальной толщины

 

 

с промежутками

SlashFill

4

Заливка наклонными // ли-

 

 

ниями удвоенной толщины с

 

 

промежутками

 

 

86

 

 

Продолжение табл. 4.4

 

 

 

 

BkslashFill

5

Заливка наклонными \\ ли-

 

 

ниями удвоенной толщины с

 

 

 

промежутками

 

LtbkSlahFill

6

Заливка наклонными \\ ли-

 

 

 

ниями нормальной толщины

 

 

 

с промежутками

 

HatchFill

7

Заливка клеточкой тонкими

 

 

 

линиями

 

XhatchFill

8

Заливка диагональной кле-

 

 

 

точкой тонкими линиями

 

InterLeaveFill

9

Заливка штриховкой крест-

 

 

 

накрест по диагонали ча-

 

 

 

стыми тонкими линиями

 

WideDotFill

10

Заливка редкими» точками

 

CloseDotFill

11

Заливка «частыми» точками

 

UserFill

12

Заливка по заданной пользо-

 

 

 

вателем маске.

 

Процедура

procedure PieSlice (x, y: integer;

, , R: word);

используется для построения секторов круга с заливкой. Координаты x, y – центр окружности, сектор рисуется от угла до угла .

Процедура

procedure Sector (x, y: integer;

, , Rx, Ry: word);

рисует сектор эллипса с заливкой. Координаты x, y – центр эллипса, — начальный и конечный углы сектора, Rx, Ry

— радиусы эллипса в горизонтальном и вертикальном направлении.

87

Вывод текста в графическом режиме

Для вывода на экран текстовых надписей в графическом режиме используются процедуры OutText и OutTextXY.

Процедура

procedure OutText(s: string);

выводит строку текста, начиная с текущего положения указателя. Например,

OutText(’Для продолжения нажмите Enter’);

Если необходимо указать точку начала вывода, целесообразно использовать процедуру

procedure OutTextXY(x, y: integer; s: string);

где x, y – координаты точки начала вывода текста. Например,

OutTextXY(50,100,’Для продолжения нажмите

Enter’);

Следует заметить, что для вывода на экран численных данных их необходимо предварительно перевести в строковый вид с помощью процедуры.

procedure Str(x : Real; var s : string);

где x — переменная или выражение вещественного (или целого) типа, s — параметр-переменная для возвращения результата преобразования.

Например, x:=3.14159; Str(x, s);

OutTextXY(20, 40, ‘x=’ + s);

Для задания формата преобразования числа в строку необходимо использовать параметры формата вида

Str(x:M:N, s);

где M — количество позиций, отводимых для представления числа в строковом виде, N — количество знаков после запятой, например

x:=3.14159; Str(x:6:2, s);

88

OutTextXY(20, 40, ‘x=’ + s);

Процедура

procedure SetTextStyle(Font,b,size:word);

предназначена для управления параметрами шрифта при выводе текста в графическом режиме. Здесь Font – номер шрифта (по умолчанию 0), b – направление (горизонтальное b=0 или вертикальное b=1), size – размер выводимых символов указанный в условных единицах от 1 до 10. Если size=1, то размер буквы 8х8 точек, при с=2 размер буквы — 16х16 точек и т.д.

Очистка графического окна и установка указателя в точку с координатами (0,0) осуществляет процедура

procedure ClearDevice;

Работа с мышью

Работа с мышью можно запрограммировать через прерывания. Ввиду сложности программирования мыши, к лабораторной работе прилагается модуль mouse, в котором реализованы следующие процедуры и функции.

Инициализация мыши.

procedure Reset_mouse(var mouseOK : Boolean; var button : Byte);

Устанавливает значения параметров по умолчанию, проверяет, имеется ли в наличии мышь. В результате ее работы первый параметр принимает значение true, если мышь есть. Второй параметр содержит количество кнопок у мыши.

Пример использования: reset_mouse(mouseOK,button);

{Инициализируем мышь}

if not mouseOK then begin

89

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]