| Тема: Использование библиотеки подпрограмм. 
 Цели работы: 1.Научиться подключать модули
 
 2. Научиться работать с библиотекой подпрограмм.
 
 Оборудование: IBM PC
 
 Программное обеспечение: WINDOWS, PascalABC
 
 Контрольные вопросы:
 
 1. Как называется, и как подключается библиотека графических процедур и функций?
 
 2.Как инициализируется графический режим?
 
 3. Какие графические примитивы содержит модуль GraphABC?
 4. Какими процедурами задают цвет и толщину пера?
 5. Какими процедурами задают цвет кисти?
 6. Какие процедуры используют при выводе и форматировании текста в
 графическом окне?
 
 Краткая теория.
 
 Библиотека стандартных графических процедур и функций хранится в модуле GraphABC. При работе с графикой эту библиотеку необходимо подключать в разделе описаний с помощью зарезервированного слова Uses (подключить).
 
 Изображение на экране монитора формируется из точек (пикселей) определенного цвета. Положение каждой точки задается ее координатами. В качестве экранных координат используют порядковые номера пикселов по горизонтали и вертикали. Они могут принимать только целочисленныезначения.
 
 Началом отсчета является левый верхний угол экрана. Значения координаты x (абсциссы) отсчитывается слева направо, а значения у (ординаты) — сверху вниз.
 В среде PascalABC рисование осуществляется в графическом окне.
 Начало системы координат находится в левом верхнем углу окна, ось абсцисс направлена вправо, а ось ординат – вниз (рис.1)
 
 
  
 рис.1
 
 Размеры графического окна можно задавать с помощью процедуры
 SetWindowSize(w,h), гдеw и h – ширина и высота окна. Значения координат принимают только целочисленные значения: x от 0 до w, а y от 0 до h.
 Основные инструменты рисования — перо и кисть. Параметрами пера (Pen) задаются свойства линий и контуров фигур (толщина в пикселях, цвет…), а параметрами кисти (Brush) — их закраска.
 
 При работе с графическим окном в среде PascalABC удобно все данные вводить и выводить в этом окне.Совмещать работу с текстом и графикой в одном окне можно, подключив модули CRT и GraphABC одновременно.
 Изображение можно построить из простых геометрических фигур (гр. примитивов): точек, отрезков, прямоугольников, окружностей и т.д. Рисование различных геометрических фигур осуществляется с помощью специальных стандартных команд (процедур).
 
 
 
            
            
            Команды для рисования
              | SetWindowSize(X,Y);
 
 | Устанавливает размеры графического окна (в пикселах)
 
 |  
              | SetPixel(x,y,c)
 
 | Рисование точки с координатами (х,у) цветом с
 
 |  
              | ClearWindow(c)
 
 | Очистка (заливка) окна цветом
 
 |  
              | Line(x1,y1,x2,y2);
 
 | Рисует отрезок от точки (x1,y1) до точки (x2,y2)
 
 |  
              | FloodFill(x,y,c)
 
 | Закрасить замкнутую область, содержащую точку (х, у) цветом с
 
 |  
              | SetPenColor(c)
 
 | Установить цвет пера
 
 |  
              | SetPenWidth(n)
 
 | Установить толщину пера в пикселах
 
 |  
              | SetPenStyle(s)
 
 | Установка стиля пера
 
 |  
              | SetBrushColor(c)
 
 | Установка цвета кисти
 
 |  
              | Rectangle(x1,y1,x2,y2)
 
 | Рисование закрашенного прямоугольника
 
 |  
              | Circle(x,y,r)
 
 | Рисование закрашенной окружности
 
 |  
              | SetFontStyle(fs)
 
 | Установка стиля шрифта
 
 |  
              | SetFontSize(n)
 
 | Установка размера шрифта в пикселах
 
 |  
              | TextOut(x,y,'текст')
 
 | Вывод текста в прямоугольник с координатами лев.верх.угла (x, y)
 
 |  
 Цвета:
 
 
 
            
            
            
            
            
            
            
              | с
 
 | Цвет
 
 | с
 
 | Цвет
 
 | с
 
 | Цвет
 
 |  
              | clBlack
 
 | Черный
 
 | clSilver
 
 | Серебристый
 
 | clTeal
 
 | Сине-зеленый
 
 |  
              | clMaroon
 
 | Темно-красный
 
 | clRed
 
 | Красный
 
 | clGray
 
 | Серый
 
 |  
              | clGreen
 
 | Зеленый
 
 | clLime
 
 | Салатный
 
 | clWhite
 
 | Белый
 
 |  
              | clOlive
 
 | Оливковый
 
 | clBlue
 
 | Синий
 
 | clYellow
 
 | Желтый
 
 |  
              | clNavy
 
 | Темно-синий
 
 | clFuchsia
 
 | Сиреневый
 
 | clPurple
 
 | Фиолетовый
 
 |  
              | clGreen
 
 | Зеленый
 
 | clAqua
 
 | Бирюзовый
 
 | clBrown
 
 | Коричневый
 
 |  
              | clSkyBlue
 
 | Голубой
 
 | clLtGray
 
 | Светло-серый
 
 | clCream
 
 | Кремовый
 
 |  
 Процедуры и функции рисования
 
 procedure Ellipse(x1,y1,x2,y2: integer); - рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2).
 
 procedure Rectangle(x1,y1,x2,y2: integer); - рисует прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2).
 
 procedure RoundRect(x1,y1,x2,y2,w,h: integer); - рисует прямоугольник со скругленными краями; (x1,y1) и (x2,y2) задают пару противоположных вершин, а w и h – ширину и высоту эллипса, используемого для скругления краев.
 
 procedure Arc(x,y,r,a1,a2: integer); - рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки).
 
 procedure Pie(x,y,r,a1,a2: integer); - рисует сектор окружности, ограниченный дугой (параметры процедуры имеют тот же смысл, что и в процедуре Arc).
 
 procedure Chord(x,y,r,a1,a2: integer); - рисует фигуру, ограниченную дугой окружности и отрезком, соединяющим ее концы (параметры процедуры имеют тот же смысл, что и в процедуре Arc).
 
 procedure TextOut(x,y: integer; s: string); - выводит строку s в позицию (x,y) (точка (x,y) задает верхний левый угол прямоугольника, который будет содержать текст из строки s).
 
 procedure FloodFill(x,y,color: integer); - заливает область одного цвета цветом color, начиная с точки (x,y).
 
 procedure FillRect(x1,y1,x2,y2: integer); - заливает прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2), цветом текущей кисти.
 
 procedure Polygon(var a; n: integer); строит ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point.
 
 procedure Polyline(var a; n: integer); -строит замкнутую ломаную по n точкам, координаты которых заданы в массиве a элементов типа Point.
 
 Действия с пером
 
 function PenX: integer;
 function PenY: integer; - возвращают текущие координаты пера.
 
 procedure SetPenColor(color: integer); - устанавливает цвет пера, задаваемый параметром color.
 
 function PenColor: integer; - возвращает текущий цвет пера.
 
 procedure SetPenWidth(w: integer); - устанавливает ширину пера, равную w пикселам.
 
 function PenWidth: integer; - возвращает текущую ширину пера.
 
 procedure SetPenStyle(ps: integer); - устанавливает стиль пера, задаваемый параметром ps.
 
 function PenStyle: integer; - возвращает текущий стиль пера.
 
 Стили пера задаются следующими именованными константами:
 
 
            
            
            
              | Значение
 
 | Описание
 
 |  
              | psSolid
 
 | Сплошная линия (установлено по умолчанию)
 
 |  
              | psDash
 
 | Штриховая линия
 
 |  
              | psDot
 
 | Пунктирная линия
 
 |  
              | psDashDot
 
 | Штрихпунктирная линия
 
 |  
              | psDashDotDot
 
 | Линия, чередующая штрих и два пунктира
 
 |  
              | psClear
 
 | Отсутствие линии
 
 |  
 Стили кисти задаются следующими именованными константами:
 
 
            
            
            
            
            
            
              | Значение
 
 | Шаблон
 
 | 
 
 | Значение
 
 | Шаблон
 
 |  
              | bsSolid
 
 | 
  
 | 
 
 | bsCross
 
 | 
  
 |  
              | bsClear
 
 | 
  
 | 
 
 | bsDiagCross
 
 | 
  
 |  
              | bsHorizontal
 
 | 
  
 | 
 
 | bsBDiagonal
 
 | 
  
 |  
              | bsVertical
 
 | 
  
 | 
 
 | bsFDiagonal
 
 | 
  
 |  
 П
 Пример 2. Составить программу, которая демонстрирует разложение белого света в призме.
 program prizma;
 uses graphABC; { подключение модуля graphABC }
 begin
 setWindowSize(400,340); { размеры окна }
 ClearWindow(clGray); { серый фон }
 line(200,40, 300,300); { треугольник }
 line(200,40, 100,300); line(100,300, 300,300);
 FloodFill(200,200,clSilver); { заливка }
 setPenWidth(8); { толщина пера 8}
 setPenColor(clWhite); line(20,150, 164,150); { падающий луч }
 setPenWidth(5); { толщина пера 5}
 { Преломленные лучи: красный, желтый, синий }
 setPenColor(clRed); line(164,147, 240,160); lineTo(360,190);
 setPenColor(clYellow); line(164,150, 245,170); lineTo(360,220);
 setPenColor(clBlue); line(164,153, 250,185); lineTo(360,260);
 end.
 
 
 ример 1. Составить программу, которая рисует
 
 на экране графические примитивы: отрезок,
 
 прямоугольник, круг, эллипс.
 
 program grafika;
 uses graphABC; { подключение модуля graphABC }
 begin
 setWindowSize(600,240); // размеры окна
 line(80,40,500,40); // отрезок
 setPenWidth(5); // толщина пера
 setPenColor(clBrown); setBrushColor(clYellow);
 
 // цвет пера и кисти
 rectangle(40,80,200,160); // прямоугольник
 setPenColor(clRed); setBrushColor(clAqua);
 circle(300,120,40); // круг
 setPenColor(clBlue); setBrushColor(clRed);
 ellipse(400,80,540,160); // эллипс
 setFontSize(15); setFontStyle(fsBold);
 
 // размер и начертание шрифта
 setFontColor(clBrown); setBrushColor(clWhite);
 textOut(120,180,'Графические примитивы');
 
 // вывод текста
 end.
 
 
 Пример 3. Картина.
 
 Program Ricynki;
 
 uses graphABC;
 
 begin
 
 |