Движение графических объектов в Турбо Паскаль
СОДЕРЖАНИЕ
Введение. 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.
Горизонтальная ось 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служит для удаления графического драйвера из памяти и восстановления текстового режима работы видеоадаптера.
При работе с графикой в Турбо Паскале есть возможность подключать не только стандартные, но и пользовательские драйверы. Последние должны удовлетворять стандарту BorlandInternational. В модуле 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. Организовать имитацию движения автомобиля по экрану компьютера.
Второй способ имитации движения рисунка или его части состоит и его запоминании в отдельной области оперативной памяти с тем, чтобы в дальнейшем быстро восстановить это изображение в другом месте экрана.
Для хранения фрагмента удобнее всего использовать динамическую область памяти. Получить размер памяти в байтах, необходимой для сохранения образа фрагмента, позволяет функция 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. Построить на экране компьютера башню, имитируя процесс ее построения снизу вверх.