1 Pascal Модуль GraphABC Лекция 10
2 Подключение дополнительных библиотек Для работы в графическом режиме необходимо подключение модуля GraphABC. Первой инструкцией программы должна быть инструкция uses GraphABC;
3 Графический режим Графический экран PasсalABC (по умолчанию) содержит 640 точек по горизонтали и 400 точек по вертикали. 640 точек 400 точек Начало отсчета – левый верхний угол экрана
4 Управление экраном SetWindowWidth(w) - Устанавливает ширину графического окна; SetWindowHeight(h) - Устанавливает высоту графического окна;
5 ClearWindow; - очищает графическое окно белым цветом. ClearWindow(color); - очищает графическое окно указанным цветом. Очистка графического окна program clear; uses GraphABC; begin ClearWindow; ClearWindow (clMoneyGreen); end. Цвет зеленых денег
6 Графические примитивы 1.Точка 2.Линия 3.Прямоугольник 4.Окружность 5.Эллипс 6.Сектор 7.Дуга
7 Точка SetPixel(x,y,color) - Закрашивает один пиксел с координатами (x,y) цветом color program tochka; uses GraphABC; begin SetPixel(300,200,clred); end.
8 Линии LineTo(x,y) - рисует отрезок от текущего положения пера до точки (x,y); координаты пера при этом также становятся равными (x,y). x,y Program liniay; uses GraphABC; begin LineTo(300,200); end.
9 Линии Line(x1,y1,x2,y2) - рисует отрезок с началом в точке (x1,y1) и концом в точке (x2,y2). Program liniay; uses GraphABC; begin line(100,50,500,250); end. x1,y1 x2,y2
10 Используемые цвета clBlack – черный clPurple – фиолетовый clWhite – белый clMaroon – темно-красный clRed – красный clNavy – темно-синий clGreen – зеленый clBrown – коричневый clBlue – синий clSkyBlue – голубой clYellow – желтый clCream – кремовый clAqua – бирюзовый clOlive – оливковый clFuchsia – сиреневый clTeal – сине-зеленый clGray – темно-серый clLime – ярко-зеленый clMoneyGreen – цвет зеленых денег clLtGray – светло-серый clDkGray – темно-серый clMedGray – серый clSilver – серебряный Random( ) – случайный цвет из всей палитры цветов Паскаля
11 Цвет линии SetPenColor(color) - устанавливает цвет пера, задаваемый параметром color. Program liniay; uses GraphABC; begin setpencolor(clred); line(30,30,400,350); end.
12 Пунктирная линия SetPenStyle( ); - устанавливает стиль пера, задаваемый номером. program prim; uses GraphABC; begin Setpencolor(clred); SetPenStyle(1); {1 - длинный штрих} Line(10,100,350,100); SetPenStyle(2); {2 - короткий штрих} Line(10,125,350,125); SetPenStyle(3); {3 - штрих-пунктир} Line(10,150,350,150); end.
13 Толщина линии SetPenWidth(n) - устанавливает ширину (толщину) пера, равную n пикселям. Program liniay; uses GraphABC; begin setpenwidth(20); setpencolor(clred); line(30,30,400,350); end.
14 Program treugolnik; uses GraphABC; begin setpenwidth(20); setpencolor(clred); line(300,100,500,300); lineto(100,300); lineto(300,100); floodfill(300,200,clgreen); end. Треугольник Рисуется процедурами Line(x1,y1,x2,y2); LineTo(x,y);
15 Прямоугольник Rectangle(x1,y1,x2,y2) - рисует прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2). Program pryamougolnik; uses GraphABC; begin Rectangle(50,50,200,200); end. x1,y1 x2,y2
16 Заливка цветом FloodFill(x,y,color) - заливает область одного цвета цветом color, начиная с точки (x,y). Program pryamougolnik; uses GraphABC; begin Rectangle(50,50,200,200); FloodFill(100,100,clBlue); end. x1,y1 x2,y2
17 Заливка кистью SetBrushColor(color) - устанавливает цвет кисти. Заливка кистью распространяется на замкнутый контур, описание которого следует за процедурой установки цвета кисти. Program zalivka_kist; uses GraphABC; Begin SetBrushColor(clGreen); Rectangle(50,50,300,300); end.
18 Заливка кистью SetBrushStyle(номер от 0 до 7 или название) - устанавливает стиль кисти, задаваемый номером или символической константой. Program p12_zalivka; uses GraphABC; Begin SetBrushColor(clAqua); SetBrushStyle(1); Rectangle(10,10,100,100); SetBrushColor(clRed); SetBrushStyle(2); Rectangle(110,10,200,100); SetBrushColor(clBlue); SetBrushStyle(3); Rectangle(210,10,300,100); SetBrushColor(clGreen); SetBrushStyle(4); Rectangle(10,110,100,210); SetBrushColor(clYellow); SetBrushStyle(5); Rectangle(110,110,200,210); SetBrushColor(clBlack); SetBrushStyle(6); Rectangle(210,110,300,210); end. По умолчанию задается стиль 0 – сплошная заливка цветом.
19 Заливка кистью SetBrushPicture(fname) - устанавливает в качестве образца для закраски кистью образец, хранящийся в файле fname, при этом текущий цвет кисти при закраске игнорируется. uses GraphABC; begin SetBrushPicture('brush4.bmp'); Ellipse(0,0,640,400); end.
20 Program pryamougolnik; uses GraphABC; begin SetPenColor(clred); SetPenWidth(20); Rectangle(50,50,200,200); FloodFill(100,100,clBlue); end. Цвет и толщина контура Задаются процедурами SetPenWidth(w); SetPenColor(color);
21 Circle(x,y,r) - рисует окружность с центром в точке (x,y) и радиусом r. Окружность Program circle; uses GraphABC; begin Circle(500,200,100); FloodFill(500,200,clred); end. x1,y1 r
22 Эллипс Ellipse(x1,y1,x2,y2) - рисует эллипс, заданный своим описанным прямоугольником с координатами противоположных вершин (x1,y1) и (x2,y2). Program oval; uses GraphABC; begin Ellipse(50,50,200,350); FloodFill(50+100,50+100,clred); Ellipse(250,150,550,300); FloodFill( , ,clBlue); end. x1,y1 x2,y2 x1,y1 x2,y2
23 Дуга окружности Arc(x,y,r,a1,a2) - Рисует дугу окружности с центром в точке (x,y) и радиусом r, заключенной между двумя лучами, образующими углы a1 и a2 с осью OX (a1 и a2 – вещественные, задаются в градусах и отсчитываются против часовой стрелки). Program duga; uses GraphABC; Begin SetPenWidth(10); Arc(300,250,150,45,135); end. x,y r
24 Pie(x,y,r,a1,a2) - рисует сектор окружности, ограниченный дугой (параметры процедуры имеют тот же смысл, что и в процедуре Arc). Сектор Program sector; uses GraphABC; begin Pie(300,200,100,0,90); FloodFill(300+10,200-10,clAqua); end.
25 Вывод текста в графическое окно TextOut(x,y,строка); - выводит строку текста в позицию (x,y) (точка (x,y) задает верхний левый угол прямоугольника, который будет содержать текст). Program text; uses GraphABC; begin TextOut(100,30,'Квадрат'); Rectangle(50,50,200,200); FloodFill(55,55,clBlue); end.
26 Действия со шрифтом SetFontName(name) - устанавливает наименование шрифта. SetFontColor(color) - устанавливает цвет шрифта. SetFontSize(sz) - устанавливает размер шрифта в пунктах. SetFontStyle(fs) - устанавливает стиль шрифта.
27 Название шрифта По умолчанию установлен шрифт, имеющий наименование MS Sans Serif. Наиболее распространенные шрифты – это Times, Arial и Courier New. Наименование шрифта можно набирать без учета регистра. Пример: SetFontName(Times);
28 Стиль шрифта Задается именованными константами: fsNormal – обычный; fsBold – жирный; fsItalic – наклонный; fsBoldItalic – жирный наклонный; fsUnderline – подчеркнутый; fsBoldUnderline – жирный подчеркнутый; fsItalicUnderline – наклонный подчеркнутый; fsBoldItalicUnderline – жирный наклонный подчеркнутый.
29 Program text; uses GraphABC; Begin SetFontName(Arial); SetFontSize(20); SetFontColor(clRed); TextOut(10,10,обычный'); SetFontStyle(fsItalic); SetFontColor(clBlue); TextOut(10,50,наклонный'); SetFontStyle(fsBold); SetFontColor(Random( )); TextOut(10,90,жирный'); SetFontStyle(fsUnderline); SetFontColor(Random( )); TextOut(10,130,подчеркнутый'); SetFontStyle(fsBoldItalicUnderline); SetFontColor(Random( )); TextOut(10,170,жирный, наклонный, подчеркнутый'); end. Например,
30 Используемые цвета Цвет можно задавать и с помощью функции RGB(r,g,b) где r, g и b – целые числа в диапазоне от 0 до 255. Функция возвращает целое значение, являющееся кодом цвета, который содержит красную, зеленую и синюю составляющие с интенсивностями r, g и b соответственно (0 соответствует минимальной интенсивности, 255 – максимальной). RGB(255,255,255) – соответствует белому цвету. RGB(0,0,0) – соответствует черному цвету.
31 Program color; uses GraphABC; begin Clearwindow(rgb(200,150,250)); TextOut(93,30,' Квадрат '); Rectangle(50,50,200,200); FloodFill(55,55,clRed); TextOut(275,30,' Эллипс'); Ellipse(250,50,350,200); FloodFill(250+50,50+50,clYellow); end. Например,
32 Вывод текста в графическое окно Program text2; uses Crt,GraphABC; begin clrscr; hidecursor; {скрывает текстовый курсор} gotoXY(12,3); write(Квадрат'); Rectangle(50,50,200,200); FloodFill(55,55,clYellow); end. Текст можно вывести с помощью операторов Gotoxy(x,y) и Write(текст), подключив дополнительно модуль Crt.
33 LoadPicture(fname) n:=LoadPicture(fname) – загружает рисунок из файла с именем fname в оперативную память и возвращает описатель рисунка в целую переменную n; если файл не найден, то возникает ошибка времени выполнения. Загружать можно рисунки в формате.bmp,.jpg или.gif. Загрузка готового рисунка
34 DrawPicture(n,x,y); Выводит рисунок с описателем n в позицию (x,y) графического окна. Вывод рисунка в графическое окно uses GraphABC; var pic: integer; begin pic:=LoadPicture('demo.bmp'); DrawPicture(pic,10,10); DestroyPicture(pic); end.
35 SavePicture(n, fname) - Сохраняет рисунок с описателем n в файл с именем fname. Рисунки можно сохранять в формате.bmp,.jpg или.gif. Сохранение созданного рисунка
36 Пример 1. Составим алгоритм, в результате которого будет нарисован один круг.
37 //Пример 2. Написать программу, которая выведет на экран монитора //отрезок красного цвета, соединяющий две точки //с координатами (150,400) и (300,100). Program Linii; Uses GraphAbc;// Подключение модуля GraphAbc Begin SetWindowSize(500,500); // Установка размеров графического окна SetPenColor(clRed); // цвет пера - красный Line(150,400,300,100); End.
38 //Нарисуем домик Program grafikal; Uses GraphAbc; Begin SetWindowSize(640,480); ClearWindow(clWhite); SetPenColor(clTeal); SetPenWidth(5); Rectangle(100,150,250,300); SetBrushColor(clYellow); Circle(170,200,25); FloodFill(150,160,clBrown); Line (100,150,175,90); Line (175,90,250,150); FloodFill(175,100,clGreen); End.
39 //Нарисуем трактор program tractor; uses graphabc; var x,y:integer; begin setwindowsize (940,680); setwindowtitle ('Трактор'); setpenwidth (2); x:=10; y:=10; setpencolor (clblack); rectangle(x+40,y+40,x+140,y+90); floodfill(x+50,y+50, clyellow); rectangle(x+50,y+50,x+80,y+85); floodfill(x+55,y+75, clolive); rectangle(x+95,y+10,x+130,y+65); floodfill(x+110,y+35, clgreen); circle(x+60,y+100,10); floodfill(x+60,y+100, clgray); circle(x+110,y+90,20); floodfill(x+110,y+90, clgray); end.
40 // Мозаика. Квадратики случайным образом меняются местами uses GraphABC; const w=25; w1=1; m=50; n=70; x0=0; y0=0; Var i, j, i1, j1, di, dj, v, k: integer; a: array [0..n, 0..m] of integer; begin SetWindowCaption('Мозаика'); for i:=0 to n-1 do for j:=0 to m-1 do begin a[i,j]:=RGB(Random(256),Random(256),Random(256)); SetBrushColor(a[i,j]); FillRect(x0+i*w,y0+j*w,x0+(i+1)*w-w1,y0+(j+1)*w-w1); end; while true do begin k:=k+1; if k mod 1000 = 0 then begin k:=0; Sleep(1); end; i:=Random(n-2)+1; j:=Random(m-2)+1; di:=Random(3)-1; dj:=Random(3)-1; i1:=i+di; j1:=j+dj; v:=a[i,j]; a[i,j]:=a[i1,j1]; a[i1,j1]:=v; SetBrushColor(a[i,j]); FillRect(x0+i*w,y0+j*w,x0+(i+1)*w-w1,y0+(j+1)*w-w1); SetBrushColor(a[i1,j1]); FillRect(x0+i1*w,y0+j1*w,x0+(i1+1)*w-w1,y0+(j1+1)*w-w1); end; end.