- •Введение
- •Управление экраном в текстовом режиме
- •Установка текстового режима
- •Установка цвета и фона
- •Управление курсором.
- •Управление строками.
- •Управление звуком.
- •Текстовые окна.
- •Использование клавиатуры.
- •Организация меню пользователя. Элементы псевдографики.
- •Виды меню
- •Использование буфера экрана.
- •Управление экраном в графическом режиме.
- •Стандартные подпрограммы для работы в графическом режиме
- •Установка графического режима.
- •InitGraph (var Driver,Mode:integer; DriverPath:string) -
- •Координаты, графические окна.
- •Выбор цвета, стиля заполнения.
- •Геометрия
- •Точки и линии.
- •Многоугольники
- •Дуги, окружности, эллипсы
- •Вывод текста
- •Сохранение и выдача изображений
- •Дополнительные стандартные подпрограммы для работы в графическом режиме. Анализ графического режима
- •Установки графических окон, страницы
- •Выбор палитры, заполнения
- •Геометрия
- •Установки вывода текста.
- •Организация библиотек пользователя
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Приложение 1. Кодировочная таблица пэвм.
- •Приложение 2. Константы графического режима.
Геометрия
При изображении геометрических фигур типа точка, линия, дуга, окружность , эллипс, прямоугольник и многоугольник используются два вида построения :
вывод контура, при этом процедуры вывода прямоугольника и
многоугольника используют стиль линии из SetLineStyle. Процедуры вывода дуги, окружности, эллипса используют сплошной вид линии. Цвет линий определяется процедурой SetColor;
вывод зашрихованных фигур с обводкой контуром. Вид шриховки задается процедурами SetFillStyle и SetFloodPattern.
Точки и линии.
PutPixel (x,y :integer; Color:word) - процедура вывода на экран пикcеля заданного цвета в точку с координатами X,Y.
GetPixel(X,Y:integer):word - функция возвращает цвет пикселя с координатами (X,Y).
Line(x1,y1,x2,y2 : integer) - вывод на экран линии от точки (x1,y1) до точки (x2,y2).
LineTo (x1,y1 : integer) - вывод на экран линии из точки, в которой находится текущий указателдь в т.(x1,y1)
LineRel(dX,dY : integer) - вывод линии от текущего положения указателя в точку на относительное расстояние, заданное dX и dY (т.е. в точку с координатами (x+dx,y+dy)).
Заметим, что следующие три варианта вывода линии эквивалентны:
1 Line(100, 100, 200, 200);
2 MoveTo(100,100);
LineTo(200, 200);
3 MoveTo(100, 100);
LineRel(100, 100);
Пример. Построение линий, проходящих через точки, заданными случайными значениями координат и цвета.
Uses Crt,Graph;
Var Driver,Mode:integer;
Begin
Driver:=Detect;
InitGraph(Driver,Mode,'');
Randomize;
if GraphResult=0 then
repeat
SetColor(succ(random(4)));
Line(Random(GetMaxX),Random(GetMaxY),
Random(GetMaxX),Random(GetMaxY));
delay(200);
until KeyPressed;
CloseGraph
End.
Многоугольники
Разрешающая способность графического режима определяется количеством выводимых пикселей по горизонтали и вертикали.
Значения эти различные, поэтому построение некоторых геометрических фигур будет происходить с искажениями. Например нарисованная окружность будет напоминать по форме эллипс. Для корректировки несоответствия размеров по вертикали и горизонтали введен коэффициент сжатия изображения, который можно получить процедурой :
GetAspectRatio(var Xasp,Yasp:word) - возвращающая максимальное разрешение по x - Xasp, и по оси y - Yasp. Коэффициент сжатия рассчитывается как отношение Xasp/Yasp.
Пример.
Uses Graph,Crt;
Var
X,Y,Driver,Mode:integer;
Xasp,Yasp:word;
Begin
Driver:=Detect;
InitGraph(Driver,Mode,'c:\bin\tp');
GetAspectRatio(Xasp,Yasp);
X:=20;
{ подгонка значения Y}
Y:=round(Xasp/Yasp)*X;
{ вывод квадрата }
Rectangle(0,0,X,Y);
readln;
CloseGraph;
End.
Rectangle(x1, y1, x2, y2 : integer) процедура вывода контура прямоугольника, установленным стилем изображения линии и заданным цветом.
Пример. Rectangle(10,10,100,100)
Bar(x1, y1, x2, y2: integer) - процедура изображения закрашенного прямоугольника. Данная процедура не производит обводку контура прямоугольника .
Пример. Bar(10,10,100,100);
Bar3D(x1, y1, x2, y2: integer; Depth:word; Top:boolean) -
процедура изображения параллелепипеда c закрашенной передней гранью. Выведенный параллепипед является прозрачным, т.к. за не закрашенными гранями можно увидеть другие элементы изображения. Где
x1, y1, x2, y2 как и в процедуре Bar.
Depth - значение в пикселях размера изображения для третьего измерения(0-16) - глубины изображения. Нулевой параметр глубины выводит закрашенный прямоугольник.
Top - способ изображения верхней грани. True - вычерчивается, False - нет. Значение Top можно задаать константами.
const
TopOn = true;
TopOff = false;
Это свойство используется для изображения параллелепипедов, поставленных друг на друга.
Пример.
Uses Crt,Graph;
Var Driver,Mode:integer;
Begin
Driver:=Detect;
InitGraph(Driver,Mode,'');
Bar3D(10,10,110,60,10,TopOn);
Bar3D(10,60,50,110,10.TopOff);
readln;
CloseGraph
End.
DrawPoly(N:word; var PolyPoints:PointType) процедура изображения ломаной линии по N точкам с координатами, заданны-ми типом PointType, определенного как:
type PointType = Record
x, y:word
end;
Для вычерчивания замкнутой фигуры с N вершинами, нужно задавать (n+1) координат, где (n+1)-ая точка совпадает с первой. Например для вычерчивания треугольника нужно задать 4 вершины.
Пример.
Uses Crt,Graph;
Const Triangle : array[1..4] of PointType =
((x:50; y:100),(x:100;y:100), { координаты точек }
(x:150;y:150),(x:50;y:100));
Var Driver,Mode:integer;
Begin
Driver:=Detect;
InitGraph(Driver,Mode,'');
DrawPoly(4,Triangle);
readln;
CloseGraph
end.
С помощью DrawPoly можно выводить на экран график функции по заданным значениям.
Процедура FillPoly(N:word; var PolyPoints:PointType) производит штриховку многоугольника и обвод его линией. Параметры N и PolyPoints аналогичны параметрам процедуры DrawPoly. Отличие от DrawPoly состоит в том, что координаты (n+1)-й точки могут не совпадать с первой. Однако эти точки будут все равно соединены и заштрихуется внутренняя область .