Основы программирования (947332), страница 46
Текст из файла (страница 46)
Процедура CloseGraph - завершает работу в графическом режиме:выгружает драйвер и восстанавливает текстовый режим. Если завершитьпрограмму, не выходя из графического режима, то нормальная работа MSDOS нарушается, так как MS DOS функционирует в текстовом режиме.Примечание. Если программа выполняется в среде программирования Borland Pascal, тосреда сама восстановит текстовый режим после завершения работы программы.5. Процедура RestoreCrtMode - осуществляет временный возврат в текстовый режим с сохранением графического изображения в видеобуфере.6.
Процедура SetGraphMode(mode:integer) - осуществляет возврат вграфический режим после временного выхода, осуществленного процедуройRestoreCrtMode.7. Функция GetGraphMode:integer - возвращает номер активного графического режима.Таким образом, временный выход в текстовый режим обычно оформляется следующим образом:2708. Управление техническими средствами и взаимодействие с MS DOSRestoreCrtMode; {переход в текстовый режим}... {выполнение обработки в текстовом режиме}SetGraphMode(GetGraphMode); {возврат в графический режим}Процедуры и функции управления цветом. Модуль Graph содержитспециальные процедуры и функции управления цветом изображения.1. Процедура GetPalette(Var Palette:PaletteTyре) - возвращает размер ицвета текущей палитры.
Палитра при этом считывается в специальную переменную типа PaletteType, также определенного в модуле Graph:ТуреPaletteType = recordsize:byte; {размер палитры}Colors:array[O..MaxColorsJ of short in t; {цвета палитры}end;Цвета палитры кодируются десятичными числами от О до 63.2. Процедура SetAllPalette(Palette: PaletteType) - осуществляет установку палитры. Новая палитра при этом записывается в переменную типаPaletteType, а цвета можно кодировать десятичными числами или использовать для их определения специальные константы:EGABlack = 0;EGABlue = 1;EGAGreen- 2;EGACyan = 3;EGARed = 4;EGAMagenta=5;EGABrown-20;EGALiglitGrey=7;{черный}{синий}{зеленый}{голубой}{красный}{фиолетовый}{коричневый}{светло-серый}EGADarkGrey=56;{темно-серый}EGALightBlue= 57; {светло-синий}EGALightGreen = 58; {светло-зеленый}EGALightCyan = 59; {светло-голубой}EGALightRed = 60; {розовый}EGALightMagenta = 61; {сиреневый}EGAYellow = 62;{желтый}EGAWhite = 63;{белый}3.
Процедура SetPalette(ColorNum,Color:word) - заменяет цвет в регистре палитры с номером ColorNum на цвет Color.4. Процедура SetBkColor(Color:word) - устанавливает новый цвет фона.При инициализации графического режима видеобуфер очищается (обнуляется). При этом все точки оказываются связаны с О регистром палитры, который и считается регистром, хранящим цвет фона. Процедура SetBkCoIor записывает в О регистр палитры цвет, указанный в параметре Color. Результатвызова этой процедуры аналогичен результату вызова процедурыSetPalette(0,Color).5.
Процедура SetColor(ColorNum:word) - объявляет цвет в регистре сномером ColorNum текущим цветом рисования.6. Процедура GetDefaultPalette(var Palette: PaletteType) - возвращаетстандартную палитру.271Часть 1. Основы алгорнтмизауии и процедурное программированиеВ качестве примера рассмотрим фрагмент программы, осуществляющий установку цвета фона и цвета рисования, а также чтение текущей палитры и вывод значений, содержащихся в регистрах палитры:SetPalette(5,18); {записываем в 5-й регистр палитрыцвет 010010 - ярко-зеленый}SetColor(5); {текущий цвет рисования - цвет 5-го регистра палитры}SetBkColor(5); {записываем в 0-й регистр палитрыцвет фона 000101 - фиолетовый: фон сразу меняет цвет}GetPalette(p); {читаем палитру в переменную р типа PaletteType}for i:=0 to p.size do Write(p.colors[i]:5); {выводим цвета палитрына экран}Процедуры и функции управления типом, толщиной линии и видомштриховки.
Модуль Graph содержит средства, позволяющие управлять типом и толщиной линии, а также образцом закраски замкнутых контуров.1. Процедура SetLineStyle(styley patterity thickness: word) - устанавливает стиль style или образец pattern линии и ее толщину thickness.Для установки стиля используют следующие константы:SolidLn=0; {сплошная}DottedLn=l; {точечная}CenterLn=2; {штрихпунктирная}DashedLn=3; {пунктирная}UserBitLn=4; {определенная программистом в образце}Если указаны стили 0..3, то образец игнорируется. Если установленстиль 4, то вид линии определяется образцом.Образец линии - 16 или 48 бит, заданных шестнадцатеричным числом,единицы и нули кодируют точки и пропуски, например: комбинация 10101010 1010 1010, которая соответствует шестнадцатеричному числу $АААА,означает линию из частых точек.
Образцы из 48 бит используют для определения вида линии тройной толщины.Толщину линии можно установить одинарной и тройной, соответствующие константы выглядят следующим образом:NormWidth=l; {нормальная толщина линии}ThickWidth=3; {тройная толщина линии }Например:SetLmeStyle(UserBitLn,$AAAA,NormWidth); {устанавливает текущийстиль линии: частые точки, линия одинарной толщины}2728. Управление техническими средствами и взаимодействие с MS DOS2. Процедура SetFUlStyle(fillstyle, color: word) - устанавливает образецfillstyle и цвет color штриховки замкнутых контуров. Для определения образцов штриховки можно использовать следующие константы:EmptyFill-O;SolidFill-l;LineFill-2;LtSlashFill-3;SlashFiU=4;BkSlashFill-5;LtBkSlashFill=6;HatchFill-J;XHatchFill=8;InterLeaveFill=9;WideDotFill=10;CloseDotFill=ll;UserFill=12;{без штриховки - прозрачный контур}{сплошная заливка}{горизонтальные линии}{НИ - тонкие линии}{НИ - толстые линии}{WW ~ толстые линии}{WW - тонкие линии}{-f+++ - клетка горизонтальная}{хххх - клетка диагональная}{+ + + - клетка редкая}{.
. . . -точки редкие}{- точ ки частые}{стиль, определенный программистом}3. Процедура SetFillPattern (:FillPatternType; color:word) - устанавливает пользовательский образец fillPatern и цвет color штриховки. Образецштриховки задают с помощью переменной специального типа:Туре FillPatternType = array[L. 8J of byte;...Переменная этого типа определяет квадрат 8x8 точек, где биту, установленному в 1, соответствует точка заданного цвета, а биту, установленному вО - точка цвета фона.Например:Const Р J .'FillPatternType = ($АА, $55, $АА, $55, $АА, $55, $АА, $55);Р1 определяет квадрат 8x8 точек следующего вида:10 10 10 100 10 10 10 110 10 10 100 10 10 10 110 10 10 100 10 10 10 110 10 10 100 10 10 10 1На экране при штриховке данным стилем мы будем видеть частые ромбы.4.
Процедура FloodFill(x, у, color: word) - закрашивает текущим образцом и цветом закраски, установленными процедурой SetFiIlStyle, область,273Часть 1. Основы алгоритмизации и процедурное программированиеограниченную контуром цвета color, внутри которой находится точка с координатами (х,у). Если контур не замкнут, то будет закрашен весь экран.Процедуры и функции рисования. Модуль Graph предоставляет программисту большой набор процедур и функций, рисующих различные примитивы (простейшие фигуры, размеры и местоположение которых определяются параметрами).1.
Процедура PutPixelfx, у, color: word) - рисует точку цветом, определенным в регистре палитры с номером color, в точке экрана с координатами(X, у).2. Функция GetPixel(x,y:word):word - возвращает номер регистра палитры, определяющего цвет точки с указанными координатами.3. Функция MoveTo(x,y:word):word- задает положение текущей точки точки, используемой в качестве исходной при рисовании линий или выводетекста.4.
Процедура MoveRel(dx,dy:word) - задает положение текущей точкиотносительно ее предыдущего положения.5. Функции GetX:word и G^/K*>v^rrf-возвращают соответственно координаты X и у текущей точки.6. Функции GetMaxX:word и GetMaxY:word - возвращают соответственно максимальные размеры экрана в точках для текущего режима.7. Процедура Line(xlyyl,x2,y2:word) - рисует линию из точки (х1,у1) вточку (х2,у2).8. Процедура LineTo(x,y:word) - рисует линию из текущей точки в точку (х,у).9. Процедура LineRel(dXydy:word) - рисует линию из текущей точки вточку, отстоящую от текущей на dx,dy.10.
Процедура Rectangle(xl,yl,x2,y2:word) - рисует прямоугольник покоординатам левого верхнего и правого нижнего углов.11. Процедура Bar(xlyyl,x2,y2:word) - рисует заштрихованный прямоугольник с заданными координатами текущим цветом и закрашивает его текущим образцом закраски.12. Процедура Bar3D(xl,yl,x2,y2,depth:word; top: boolean) - рисует параллелепипед, у которого: размер передней грани определяется координатами х1, у 1, х2, у2; глубина depth обычно задается равной 25% ширины, а параметр top определяет, рисовать ли верхнюю грань (да, если true, и нет, еслиfalse). Верхнюю грань не рисуют, если необходимо изобразить несколько параллелепипедов, стоящих друг на друге. Передняя грань закрашивается текущим образцом и цветом закраски.13. Процедура DrawPoly(numPoints:word; var PolyPolnts) - рисует ломаную линию. Первый параметр определяет количество вершин ломаной, авторой - координаты этих вершин в массиве элементов специального типаPointType:2748.
Управление техническими средствами и взаимодействие с MS DOSType PointType = recordx,y:word;end;...Например:Var MP:array[5] of PointType; {объявление массива координат точек}DrawPoly(5,MP);{рисуем ломаную линию}14. Процедура FillPoly (numPoints:word; Var PolyPoints) - рисует закрашенный многоугольник с указанными вершинами.15.
Процедура Circle (х, у, radius:word) - рисует окружность заданногорадиуса radius с центром в точке (х, у).16. Процедура Л ГС (х,уу stangle, endangle, radius: word) - рисует дугу окружности указанного радиуса radius от угла stangle до угла endangle. Углы отсчитываются от положительного направления оси абсцисс против часовойстрелки и указываются в градусах.Существует специальная процедура, которая позволяет определить координаты концов дуги.17. Процедура GetArcCoord (Var ArcCoo:ArcCoordType) - возвращаеткоординаты концов дуги через параметр-переменную специального типаArcCoordType, который описан следующим образом:Туре ArcCoordType = recordх,у{центр дуги}xstart, ystart, {начало дуги}xend, yend:word {конец дуги}end;Например, нарисуем дугу и соединим ее концы:Var ArcCoords: ArcCoordType;ArcfJOO, 100, О, 270, 30); {рисуем дугу}GetArcCoords(ArcCoords); {определяет координаты концов дуги}with ArcCoords doLinefXstart, Ystart, Xend, Yend); {рисуем соединяющую линию}18.