Движение графических объектов в Турбо Паскаль

СОДЕРЖАНИЕ

Введение. 3

Глава 1. Использование графического режима в Турбо Паскале. 4

1.1 Основные понятия компьютерной графики в Турбо Паскале. 4

1.2 Модуль Graph. 8

1.3 Типы драйверов. 11

1.4 Инициализация графики. 12

Глава 2. Построение изображения на экране. 14

2.1 Графические примитивы.. 14

2.2 Работа с текстом. 17

2.3 Движение графических объектов в Турбо Паскаль. 21

2.4 Разработка и реализация программ в среде Турбо Паскаль «Графика». 24

Заключение. 27

Список литературы.. 28

Приложение. 29

Введение

В 1992 году фирма BorlandInternational выпустила два пакетапрограммирования, основанные на использовании языка Паскаль [1,8],- BorlandPascal 7.0 иTurboPascal 7.0.Пакет BorlandPascal 7.0 учитывает многие новейшие достижения в программировании и практике создания программ и включает в себя три режима работы: в обычном режиме операционной системы MS DOS, в защищенном режиме MS DOS и в среде Windows.Обладая расширенными возможностями, пакет BorlandPascal7.0тем не менее требует для использования всех своих возможностей довольно большую память - примерно 30 Мбайт на жестком диске и не менее 2 Мбайт оперативной памяти. Да и стоимость этого пакета довольно высокая.Пакет TurboPascal 7.0 обладает ограниченными возможностями и позволяет работать только в обычном режиме MS DOS, но может быть использован практически на любой машине и стоит существенно дешевле.Начинающему программисту, по-видимому, целесообразно начать изучение языка и среды именно с этого пакета. Рассмотрению этого пакета ипосвящено данное пособие. TurboPascal включает в себя как язык программирования – одно из расширений языка Паскаль для ЭВМ типа IBM, так и среду, предназначенную для написания, отладки и запуска программ.Язык характеризуется расширенными возможностями по сравнению со стандартом, хорошо развитой библиотекой модулей, позволяющих использовать возможности операционной системы, создавать оверлейные структуры, организовывать ввод-вывод, формировать графические изображения и т. д.

Глава 1. Использование графического режима в Турбо Паскале.

Основные понятия компьютерной графики в Турбо Паскале.

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

В стандарте Паскаля графический вывод не предусмотрен. Однако на разных типах компьютеров, в разных реализациях Паскаля существуют различные программные средства графического вывода — специальные наборы данных, функций, процедур. Несмотря на такое разнообразие, имеются общие понятия и средства, свойственные любому варианту реализации графики в любом языке программирования. В данном разделе лекций мы затронем только такие базовые средства. Начиная с четвертой версии Турбо Паскаля для IBM PC появилась мощная графическая библиотека, организованная в модуль Graph. В приложении 2 в справочной форме дано описание основных компонент этого модуля. В рассмотренных ниже примерах программ используется модуль Graph. Для его подключения в начале программы необходимо написать строку: UsesGraph;

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

Графические режимы отличаются: размером графической сетки (M x N, где М — число точек по горизонтали, N — число точек по вертикали) цветностью (число воспроизводимых на экране цветов). Допустимые режимы зависят от типа монитора и соответствующего графического драйвера, используемого на компьютере. Для установки графического режима экрана существуют соответствующие процедуры. В модуле Graph процедура установки графического режима экрана имеет следующий заголовок:

Procedure InitGraph (VarDriver,Mode: Integer; Path: String);

Здесь целая переменная Driver определяет тип графического драйвера; целая переменная Mode задает режим работы графического драйвера; Path — выражение типа String, содержащее маршрут поиска файла графического драйвера.

Вот пример программы, инициализирующей графический режим VGAHi для работы с драйвером VGA (монитор типа VGA).UsesGraph;

VarDriver,Mode: Integer;

Begin

Driver: = VGA;{драйвер}

Mode: = VGAHi;(режим работы}

InitGraph(Driver,Mode,'C:\TP\BGI');

Здесь указывается, что файл egavga.bgi с драйвером для VGA-монитора находится в каталоге C:\TP\BGI. Режим VGAHi соответствует графической сетке 640 х 480 с палитрой из 16 цветов.

Возможно также автоматическое определение типа драйвера и установка режима. Этот прием позволяет программе работать с разными типами мониторов, не внося изменений в текст:

Driver:=Detect;

InitGraph(Driver,Mode,'C:\TP\BGI');

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

В модуле Graph процедура возвращения в текстовый режим имеет заголовок:

ProcedureCloseGraph;

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

Заголовок процедуры установки цвета фона:

ProcedureSetBkColor(Color:Word);

Здесь Color — выражение целого типа, определяющее номер цвета фона.

Заголовок процедуры установки цвета линий:

ProcedureSetColor(Color:Word);

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

Графические координаты.

Положение каждого пикселя графи­ческой сетки однозначно определяется указанием его координат.

Графические оси координат рас­положены на экране так, как по­казано на

рис. 1. Движение графических объектов в Турбо Паскаль - student2.ru

Горизонтальная ось X направ­лена слева направо, вертикаль­ная ось Y — сверху вниз. На ри­сунке указаны предельные гра­фические координаты, соответ­ствующие режиму VGAHi.

Можно определить макси­мальные координаты по осям, соответствующие данному драй­веру.

Это делается с помощью двух целочисленных функций:

Function GetMaxX;

Function GetMaxY;

Графическое окно.

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

Заголовок процедуры назначения графического окна:

Procedure SetViewPort(X1,Y1,X2,Y2: Integer; Clip: Boolean);

Здесь (X1,Y2) — координаты левого верхнего угла окна; (Х2, Y2) — координаты правого нижнего угла окна;

Clip — огра­ничитель фигур; если Clip=True, то все построения производят­ся только в пределах окна, в противном случае они могут выхо­дить за его пределы.После установки окна координаты точек внутри него отсчиты­ваются от верхнего левого угла.

Существует понятие графического курсора (по аналогии с сим­вольным курсором). Но в отличие от символьного курсора графи­ческий курсор на экране не виден. Графический курсор указывает на текущую позицию на экране. При входе в графический режим координаты текущей позиции равны (0, 0).

Процедура назначения координат графического курсора:

Procedure Move To(X,Y: Integer);

Здесь X,Y— устанавливаемые координаты курсора. Координа­ты указываются относительно левого верхнего угла окна или, если окно не установлено, экрана. Процедура поставить точку — основная процедура получения изображения, поскольку любой рисунок складывается из точек. Состояние светящейся точки определяется координатами точки на экране и цветом точки.

Пример 1. Следующая программа устанавливает по центру эк­рана графическое окно размером 100х100, заливает его желтым фоном и заполняет синими точками, расположенными через 4 позиции.

Uses Graph;

Var Driver,Mode: Integer;

X,Y,X1,Y1,X2,Y2,Xc,Yc: Integer;

Begin

{Инициализация графического режима}

Driver:«Detect;

InitGraph (Driver, Mode, 'C: \TP\BGI") ;

{Определение координат центра экрана} Xc:=GetMaxX Div 2;

Yc;«GetMaxY Div 2;

{Определение координат графического окна}

Х1:=Хс-50;

Y1:=Yc-50;

X2:=Xc+50;

Y2:=Yc+50;

{Установка графического окна}

SetViewPort(X1,Y1,X2,Y2,True);

{Установка цвета фона и очистка экрана}

SetBkColor(Yellow);

ClearDevice;

{Расстановка точек в окне}

For Х:=1 То 25 Do

For Y:=l То 25 Do

Put Pixel(4*X,4*Y,Blue);

{Задержка изображения на экране до нажатия <ENTER>}ReadLn;

{Выход из графического режима в символьный}

CloseGraph;

End.

Модуль Graph

Модуль Graph представляет собой мощную библиотеку графических подпрограмм универсального назначения, рассчитанную на работу с наиболее распространенными графическими адаптерами IBM-совместимых ПК. Подпрограммы модуля Graph обеспечивают различные режимы работы многорежимных адаптеров, полностью используют их цветовые возможности и разрешающую способность.При исполнении графических программ требуется автономный драйвер графического адаптера (BGI-файл). Если программа использует штриховые шрифты, то кроме того нужен один или несколько шрифтовых файлов (CHR-файлы). При необходимости драйвер и шрифты могут быть включены в тело программы еще на этапе компиляции.

Графические драйверы поддерживают следующие графические адаптеры (и полностью совместимые с ними):

· CGA

· Hercules

· MCGA

· AT&T 400

· EGA

· 3270 PC

· VGA

· IBM-8514

Для поддержки этих аппаратных средств используются следующие драйверы:

· CGA.BGI

· Драйвер для CGA, MCGA

· EGAVGA.BGI

· Драйвер для EGA, VGA

· HERC . BGI

· Драйвер для монохромного Hercules

· ATT . BGI

· Драйвер для AT&T 6300 (400 строк)

· PC3270.BGI

· Драйвер для IBM 3270 PC

· IBM8514.BGI

· Драйвер для IBM 8514

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

Для указания пикселя используется следующая система координат: верхний левый угол графического экрана имеет координаты 0,0; горизонтальная координата X увеличивается слева направо, вертикальная координата У увеличивается сверху вниз. Например, в режиме 640x480 (адаптер VGA) правый нижний угол экрана имеет координаты 639, 479, а центр экрана -координаты 319,239.Некоторые графические подпрограммы используют понятие текущего указателя.

Указатель содержит координаты того пикселя, начиная с которого будет строиться изображение подпрограммами LineTo, LineRel, OutText и др. В этом смысле указатель подобен текстовому курсору, но, в отличие от него, не имеет видимого изображения на экране. Для вывода текстовых сообщений на графический экран модуль Graph предоставляет один матричный и 4 штриховых шрифтов. Каждый символ матричного шрифта на экране реализуется в виде матрицы из 8x8 пикселей. Штриховые шрифты для каждого символа определяют набор штрихов (векторов), с помощью которых на экране создается (вычерчивается) соответствующий символ. Штриховые шрифты позволяют изменять размеры текстовых надписей в широких пределах без существенного ухудшения качества изображения символов. Однако стандартные штриховые шрифты не содержат символы кириллицы. В модуле Graph имеется несколько процедур для рисования элементарных графических фигур - точек, линий, окружностей, дуг и т.п.

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

Типы драйверов

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

Драйвер Аппаратное обеспечение
CGA.BGI Адаптеры CGA, MCGA
EGAVGA.BGI Адаптеры EGA, VGA
HERC.BGI Монохромный адаптер Hercules
ATT.BGI AT&T 6300 (400 строк)
PC3270.BGI IBM 3270 PC
1BM8514.BGI IBM 8514

Таблица 1. Типы драйверов

Драйверы представляют собой файлы с расширением .BGI, которые обеспечивают взаимодействие программ с графическими устройствами (согласно стандартам фирмы Borland, расширение -BGIдолжны иметь файлы графического интерфейса (BorlandGraphicInterface)). При инициализации определенного графичес­кого режима подключается соответствующий драйвер. Для обеспе­чения работы программы в одном из графических режимов проце­дура InitGraphопределяет тип адаптера и загружает соответствующий BGI-файл. Процедура CloseGraphслужит для удаления графичес­кого драйвера из памяти и восстановления текстового режима работы видеоадаптера.

При работе с графикой в Турбо Паскале есть возможность подключать не только стандартные, но и пользовательские драйве­ры. Последние должны удовлетворять стандарту BorlandInterna­tional. В модуле Graphимеется процедура RegisterBGIDriver, которая обеспечивает поддержку работы с драйверами пользователя.

Инициализация графики

· заголовочный файл graphics.h,

· библиотечный файл graphics.lib,

· драйверы графических устройств (*.bgi),

· шрифты (*.chr).

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

Прежде чем использовать графические функции, необходимо переключить видеоадаптер в графический режим (по умолчанию он находится в текстовом режиме). Для инициализации графики предназначена функция initgraph().Ее прототип -voidinitgraph (int driver, int mode, char path);

где int driver – тип подключаемого драйвера, int mode – режим работы подключенного драйвера, char path – местоположение драйвера.

Функция initgraph() считывает в память указанный драйвер, устанавливает видеорежим, соответствующий аргументу mode, и определяет маршрут к директории, в которой находится файл .bgi(драйвер). Если маршрут не указан, то предполагается, что этот файл расположен в текущей директории.

При использовании initgraph() можно указать или конкретный драйвер (например, egavga.bgi), или задать автоматическое определение (детектирование) типа видеоадаптера и выбора соответствующего драйвера уже во время выполнения программы (макрос DETECT). Это позволяет без изменения переносить программы на компьютеры с другими видеоадаптерами. Например,

· int D=DETECT,M;

· initgraph;

В приведенном примере подразумевается, что файл драйвера (например, egavga.bgi) расположен в текущей директории. Эта функция очищает экран монитора и переводит его в графический режим 640*480*16 (разрешение монитора 640*480, 16 цветов).

Чтобы выйти из графического режима и перейти обратно в текстовый режим, необходимо использовать функцию

voidclosegraph (void);

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

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

· Переход в графический режим;

· Работаем с графиком;

· Выход из графического режима.

Глава 2. Построение изображения на экране.

Графические примитивы

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

Рассмотрим несколько основных процедур рисования графи­ческих примитивов, имеющихся в модуле Graph.

Линия с заданными координатами концов (XI, Y1) и (Х2, Y2):

Procedure Line(XI,Y1,Х2,Y2: Integer);

Линия от текущей точки до точки с координатами X, Y:

Procedure LineTo(X,Y: Integer);

Линий от текущей точки до точки с заданными приращениями координат DX, DY:

Procedure LineRel(DX,DY: Integer);

Прямоугольник с заданными координатами верхнего левого угла (XI, YI) и нижнего правого угла (Х2, Y2):

Procedure Rectangle(XI,Y1,X2,Y2: Integer);

Окружность с центром в точке (X, Y) и радиусом R — в пикселях:

Procedure Circle(X,Y: Integer; R: Word);

Дуга окружности с центром в точке (X, Y), радиусом R, началь­ным углом BegA и конечным углом EndA. Углы измеряются в градусах против часовой стрелки от направления оси X.

Procedure Arc(X,Y: Integer; BegA,EndA,R: Word);

Эллипсная дуга с центром в точке X,Y с начальным и конечным углами BegA и EndA, горизонтальным радиусом RX и вертикальным радиусом RY:

Procedure Ellipse (X,Y: Integer:; BegA, EndA, RX,RY: Word);

Пример. Составим программу, рисующую голову робота (рис. 32).

Рисунок содержит два прямоуголь­ника, две окружности, две дуги, эл­липс, три прямые линии и две крас­ные точки. Заранее определяются все координаты и размеры элементов ри­сунка.

Uses Graph;

Var Driver,Mode: Integer;

Begin

{Инициализация графического режима)

Driver:=Detect; i, InitGraph(Driver,Mode,'C:\TP\BGI || ;

Обведенный линией и закрашенный сектор окружности: Procedure PieSlice(X,Y:Integer; BegA,EndA: Word); Наконец, можно закрасить любую область, ограниченную зам­кнутой линией. Для этого нужно указать какую-нибудь точку внутри этой области (X, Y) и цвет граничной линии {Border). Соответству­ющая процедура выглядит следующим образом: Procedure FloodFill(X,Y: Integer; Border: Word); Модуль Graph позволяет выводить на графический экран тек­сты. Мы не будем сейчас детально обсуждать эту проблему, необ­ходимую информацию можно найти в соответствующей литера­туре. Приведем лишь пример одной текстовой процедуры, с по­мощью которой выводится в графическое окно символьная строка (Txt), начиная с указанной позиции (X,Y). Procedure OutTextXY (X, YInteger; Txt: String) ; Например, чтобы вывести под нашим рисунком строку «ЭТО РОБОТ», следует в программу добавить оператор OutTextXY(195;400,’ЭТО РОБОТ'); Как построить график функции. Одним из приложений компь­ютерной графики является наглядное представление результатов математических расчетов. Графики функций, диаграммы, линии уровней распределения пространственных зависимостей и т. п. де­лают результаты расчетов обозримее, нагляднее, понятнее. Мы рассмотрим лишь один простейший вариант математичес­кой графики — построение графика функции. Требуется составить программу построения на экране дисплея графика функции у = т.

Решение этой задачи удобно проводить в следующем порядке:

1.Определить границы значений аргумента, в пределах кото­рых будет строиться график. Обозначим их следующим образом: Xmin — нижняя граница, — верхняя граница.

2.Для данной области значений аргумента определить предель­ные значения функции: Ymin и Уmax. Эти значения необязательно должны быть точными. Они могут быть оценочными снизу и сверху соответственно.

3.Задать границы графического окна, в пределах которого бу­дет рисоваться график: [Xgmin, Xgmax], [ Ygmin, Ygmax] Поскольку в графических координатах вертикальная ось направлена вниз, то Ygmin > Ygmax.

Таким образом, мы имеем две системы координат: (X, У), ко­торую назовем системой математических координат (в литературе чаще используют термин «мировые координаты).

Здесь квадратные скобки означают округление до целого зна­чения (функция Round).Построение графика функции может производиться либо то­чечным методом, либо кусочно-линейным. При первом способе график строится как последовательность точек, расположенных максимально близко. Производится «попиксельный» перебор зна­чений аргумента в интервале [Xgmin, Xgmax] с выставлением точек с соответствующими координатами Y. При кусочно-линейном методе задается шаг АХ и рассчитыва­ется последовательность значений (Х, Y).

Пример. Составим программу построения графика функции

Uses Graph;

Var Driver,Mode: Integer;

X: Real; Xg,Yg,I: Integer;

Begin

{Инициализация графического режима}

Driver:=Detect;

InitGraph(Driver,Mode;'C:\TP\BGI');

SetColor(White);{белый цвет линий}

SetBkColor(Black);{черный цвет фона}

Line(10,90,200,90);(ось X}

Line(10,20,10,160);{ось Y}

{Построение графика функции желтыми точками}

Х:=0;

For 1:=0 То 190 Do

Begin Xg:=10+Round(95/Pi*X);

Yg:=90—Round(50*Sin(X)) ;

PutPixel(Xg,Yg,Yellow);

X:=X+Pi/95

End;

{Разметка осей, запись функции}

OutTextXY(15,30,’Y');

OutTextXY(205,90,'X');

OutTextXY(130,40,'Y=SIN(X)');

ReadLn;{задержка}

CloseGraph; {выход из графики}

End.

Работа с текстом

Вывод текста

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

OutText(Textstring:string)

Процедура OutText(Textstring : string) выводит строку текста, начиная с теку­щего положения СР.

Например: OutText('Bводите данные:');

Явный недостаток этой процедуры — нельзя указать произвольную точку на­чала вывода. Его можно устранить с помощью MoveTo, но лучше воспользоваться процедурой OutTextXY(X, Y-: integer; TextString: string), где X, Y — координаты точки начала вывода текста, TextString — константа или переменная типа string. Например, чтобы вывести сообщение "Для продолжения нажмите любую клави­шу", начиная с точки 60,100, надо записать:

OutTextXY(60,100,'Для продолжения нажмите любую клавишу...');

Вывод численных значений

В модуле GRAPH нет процедур, предназначенных для вывода численных дан­ных. Поэтому для вывода численных данных нужно сначала преобразовать число в строку с помощью процедуры Str, а затем посредством '+' подключить ее к выводи­мой OutTextXY строке. Например:

Мах:=34.56;

Str (Мах: 6:2, Smax) ; {Результат преобразования находится в Smax}

OutTextXY (4 00,40, 'Максимум = ' + Smax); {+ — конкатенация}

Преобразование целочисленных и вещественных типов данных в строки удоб­но осуществлять специализированными пользовательскими функциями IntSt и RealSt:

function IntSt(Int: integer): string; {Преобразование целочис­ленного значения в строку. Int — целочисленное значение} var Buf: s tring[10];

begin

Str(Int,Buf);

IntSt := Buf

end;

function RealSt(R: real; Dig,Dec:integer):string;

{Преобра­зование вещественного значения в строку. R — значение, Dig — ко­личество символов, Dec — количество символов после запятой}

var Buf: string[20];

begin

Str(R:Dig:Deo,Buf);

RealSt := Buf

end;

Эти функции указываются как параметры в процедурах OutText, OutTextXY и снимают все проблемы вывода цифровых данных в графических режимах с любы­ми пояснениями. Например:

X:» 5,295643871;

OutText('X « ' + RealSt(X,11,9)) ;

В результате на экране появится: X = 5.295643871

Шрифты

Вывод текста в графических режимах может осуществляться самыми различ­ными стандартными (табл. 1.) и пользовательскими шрифтами. Различают два типа шрифтов: растровые и векторные. Растровый шрифт задается матрицей точек, а векторный — рядом векторов, составляющих символ. Поэтому при увеличении растрового символа мы начинаем различать составляющие его точки, и качество изображения символа снижается, а при увеличении векторного символа качество изображения не меняется.

По умолчанию после инициализации графического режима устанавливается растровый шрифт DefauWFont, который, как правило, является шрифтом, исполь­зуемым установленным драйвером клавиатуры. Каждый его символ формируется в матрице 8x8 бит. Шрифты размещены в отдельных файлах, имеющих расширение CHR. Активизация нужного шрифта осуществляется специальной процедурой. Высота и ширина символов каждого шрифта могут изменяться с помощью специ- - альных средств.

Шрифт Файл Шрифт Файл
TriplexFont SmallFont TRIP.CHR LITT.CHR SansSerifFont GothicFont SANS.CHR GOTH.CHR

Таблица 2. Стандартные шрифты

Шрифты SmallFont, SansSerifFont, GothicFont являются векторными и не содер­жат русских символов, однако можно разработать собственные шрифты или менять отдельные символы в уже имеющихся. Разработка шрифтов — довольно сложный и трудоемкий процесс. Он может быть ускорен и упрощен, если воспользоваться специализированными пакетами TurboFont, BgiToolKit. С их помощью можно фор­мировать любое количество собственных С HR-файлов и загружать их по тому же принципу, что и стандартные.

Установка шрифта.

Качественное оформление экрана требует при выводе текста использования самых различных шрифтов. Список имеющихся в Турбо Пас­кале шрифтов приведен в табл. 2. Установить нужный шрифт можно процеду­рой

SetTextStyle(Font : word; Direction : word; CharSize: word)

где Font — выбранный шрифт, Direction — направление (горизонтальное или вер­тикальное),‘CharSize — размер выводимых символов.

Возможные значения двух первых параметров представлены в табл. 2. При организации вертикального вывода необходимо учитывать, что, если программист не установит точку начала вывода с помощью MoveTo, текст начинается с нижней строки экрана и продолжается вверх. Величину выводимых символов можно уста­навливать с помощью коэффициента CharSize. Если CharSize=l, то символ строит ся в матрице 8x8, если CharSize=2, то используется матрица 16x16 и т.д. до 10-крат- ного увеличения.

Шрифты

Константа Значение Описание
DefaultFont 8x8 битовый шрифт
TriplexFont Штриховые шрифты
SmallFont Малый шрифт
SansSerifFont Сансериф
GothicFont Готический
Константы ориентации
HorizDir Слева направо
VertDir Снизу вверх
       

Таблица 2. Шрифты

В качестве примера шрифтом DefaultFont выведем две строки: вертикальную и горизонтальную разной величины:

SetTextStyle(0,l,l);

{Буквы стандартной величины}

Outtextxy(200,200,'Вертикальная строка');

SetTextStyle(0,0,2);

{Размер букв увеличен)

Outtextxy(200,220,'Горизонтальная строка');

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

Движение графических объектов в Турбо Паскаль.

Создать видимость движения на экране можно двумя способами.

Первый способ заключается в том, что имитация движения объекта на экране создаётся за счёт многократного выполнения программой напора действий: нарисовать — пауза — стереть рисунок (нарисовать его в том же месте цветом фона)— изменить координаты изображения.

Перед началом составления программы надо продумать описание «движущегося» объекта; характер изменения координат, определяющих текущее положение объекта; диапазон изменения и шаг.

Задача 1. Организовать имитацию движения авто­мобиля по экрану компьютера.

Движение графических объектов в Турбо Паскаль - student2.ru

Движение графических объектов в Турбо Паскаль - student2.ru

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

Для хранения фрагмента удобнее всего использовать динамическую область памяти. Получить размер памяти в байтах, необходимой для сохранения образа фрагмента, позволяет функция ImageSize(X1,Yl,X2,Y2:integer): word. Здесь (X1,YI) и (X2,Y2) — координаты верхнего левого и нижнего правого углов прямоугольника. Если полученный размер памяти больше 64Кб, то значение ImageSize = 0, a GraphResult=-1. Чтобы этого избежать, следует сохранять изображение по частям.

Полученный с помощью функции ImageSize размер памяти применяют в качестве входной информации для процедурыGetMem(p,Size), которая выделяет указанный объем памяти в динамической области. Здесь р — указатель на область памяти, Size — ее размер.

Процедура GetImage(Xl,Yl,X2,Y2:integer; var BitMap: word); сохраняет образ фрагмента в памяти, где XI,Y1,X2,Y2 — координаты фрагмента, BitMap — пере­менная, которая указывает, где сохраняется образ изоб­ражения.

Процедура Putlmage(X,Y: integer; var BitMap, Mo-de:word); восстанавливает сохраненный в буфере Bit-Map прямоугольник, левый верхний угол которого задаётся координатами (X,Y). Параметр Mode задает режим вывода изображения.

Продемонстрируем имитацию движения с использованием выше описанных процедур при решении следующей задачи.

Задача 2. Построить на экране компьютера башню, имитируя процесс ее построения снизу вверх.

Движение графических объектов в Турбо Паскаль - student2.ru

Движение графических объектов в Турбо Паскаль - student2.ru

Наши рекомендации