Процедуры рисования прямоугольников — КиберПедия 

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Процедуры рисования прямоугольников

2018-01-29 278
Процедуры рисования прямоугольников 0.00 из 5.00 0 оценок
Заказать работу

DrawRectangle(X1,Y1, X2,Y2); Контур прямоугольника рисуется текущим пером. Внутренность прямоугольника не закрашивается
FillRectangle(X1,Y1, X2,Y2); Внутренность прямоугольника закрашивается текущей кистью. Контур прямоугольника не рисуется
Rectangle(X1,Y1, X2,Y2); Контур прямоугольника рисуется текущим пером. Внутренность прямоугольника закрашивается текущей кистью.

Пример 12. Задать квадратное графическое окно, окрасить его в красный цвет, нарисовать в центре окна чёрный квадрат.

Uses GraphABC; //подключение модуля

begin //начало программы

InitWindow(450,10,500,500,clRed); // отступы, размеры и цвет окна

SetWindowCaption('Чёрный квадрат в красном окне'); //заголовок окна

SetBrushColor(clBlack); //Цвет кисти - чёрный

FillRectangle(100,100,400,400); //закрашенный кистью прямоугольник

end.

Пояснение.

В разделе Uses программы подключен модуль GraphABC.

Процедура InitWindow(450,10,500,500,clRed);задаёт отступы окна 450 и 10 пикселов, задаёт размер окна - 500 × 500 пикселови окрашиваетокно в красный цвет.

Процедура SetWindowCaption ('Чёрный квадрат в красном окне'); задаёт заголовок графического окна.

Процедура SetBrushColor(clBlack);делает цвет кисти чёрным для закраски квадрата.

В центре экрана рисуется чёрный квадрат: FillRectangle(100,100,400,400);.

Пример 13. Прямоугольники разных цветов и прозрачности.

Uses GraphABC;

 

Begin

Window.Caption:= 'Прозрачные прямоугольники';

Brush.Color:= clRed; //красный

FillRectangle(50,50,100,Window.Height - 50);

Brush.Color:= clGreen; //зелёный

FillRectangle(150,50,200,Window.Height - 50);

Brush.Color:= clBlue; //синий

FillRectangle(250,50,300,Window.Height - 50);

Brush.Color:= ARGB(127,255,0,0); //красный, прозрачность 127

FillRectangle(20,100,420,150);

Brush.Color:= ARGB(63,0,255,0); //зелёный, прозрачность 63

FillRectangle(20,200,420,250);

Brush.Color:= ARGB(31,0,0,255); //синий, прозрачность 31

FillRectangle(20,300,420,350);

End.

Шрифт

Вывод текста осуществляется текущим шрифтом. Для работы с текущим шрифтом используется объект Font (шрифт). Font имеет ряд свойств. Среди них:

- Color – цвет шрифта (по умолчанию - clBlack);

- Style – стиль шрифта (по умолчанию – fsNormal);

- Size – размер шрифта в пунктах (по умолчанию – 10 пунктов);

Подложка текста имеет цвет Brush.Color( цвет кисти).

Стили шрифта

fsNormal – обычный;
fsBold – жирный;
fsItalic – наклонный;
fsBoldItalic – жирный наклонный;
fsUnderline – подчеркнутый;
fsBoldUnderline – жирный подчеркнутый;
fsItalicUnderline – наклонный подчеркнутый;
fsBoldItalicUnderline – жирный наклонный подчеркнутый.

Задание свойств шрифта.

Font.Color:= clRandom; { цвет шрифта - случайный }

Font.Style:= fsItalic; { стиль шрифта - наклонный }

Font.Size:= 12 { размер шрифта – 12 пунктов }

Такого же результата можно достичь, используя следующие процедуры:

SetFontColor(clRandom); { цвет шрифта - случайный }

SetFontStyle(fsItalic); { стиль шрифта - наклонный }

SetFontSize(12); { размер шрифта – 12 пунктов }

Пример 14. Ввести с клавиатуры вещественное число Х и вычислить значение Y=2X. Значения X и Y вывести в графическом окне.

Uses GraphABC;//подключение модуля

Var X, Y: Real;

Begin //начало программы

InitWindow(450,10,800,600,clSilver);// отступы, размеры и серебряный цвет окна

SetBrushColor(clWhite); //цвет кисти - белый

FillRectangle(50,50,750,550); //прямоугольник, закрашенный белой кистью

SetFontColor(clNavy); //цвет шрифта - тёмно-синий

SetFontSize(18); //размер шрифта - 18

SetFontStyle(fsBoldItalic); //стиль шрифта – жирный наклонный

TextOut(100,100,'Введите значение Х'); //вывод приглашения

ReadLn(X); //ввод значения Х

TextOut(100,130,'Вы ввели Х='); //вывод текста

TextOut(250,130,X); //вывод Х в ту же строку, правее

Y:= 2*X; //вычисление Y

TextOut(100,180,'Ответ: Y = 2X ='); //вывод текста

TextOut(310,180,Y); //вывод Y в ту же строку, правее

end.

Пример 15. Нарисовать на экране Российский флаг. Внизу под флагом написать слово «РОССИЯ».

Uses GraphABC; //подключение модуля

begin //начало программы

InitWindow(450,10,800,600,clLightGray); // отступы, размеры и цвет окна

SetWindowCaption('Российский флаг'); //заголовок окна

SetBrushColor(clWhite); //цвет кисти - белый

FillRectangle(150,150,650,250); //закрашенный кистью прямоугольник

SetBrushColor(clBlue); //цвет кисти - синий

FillRectangle(150,250,650,350); //закрашенный кистью прямоугольник

SetBrushColor(clRed); //цвет кисти - красный

FillRectangle(150,350,650,450); //закрашенный кистью прямоугольник

SetBrushColor(clLightGray); //цвет кисти – серый (подложка под текст)

SetFontSize(66); //размер шрифта - 66

SetFontStyle(fsBoldItalic); //стиль шрифта – жирный наклонный

TextOut(200,480,'РОССИЯ'); //вывод слова РОССИЯ из точки (200,480)

end. //конец программы

Пояснение.

Создается графическое окно с заголовком 'Российский флаг'размером 800х600.

Окно окрашивается в светло-серый цвет.

Последовательно рисуются 3 прямоугольника: белого цвета, синего цвета, красного цвета друг под другом.

Под флагом выводится надпись'РОССИЯ'шрифтом размера 66 пунктов.

Часть II.

Следующие примеры рассчитаны на знание оператора цикла

Пример 1. Работа с цветом и пером.
Хотим пересмотреть все возможные оттенки цвета Red. Нарисуем слева направо
256 вертикальных отрезков с нарастающей интенсивностью красного.

Uses GraphABC; // подключение модуля GraphABC

Var Red, // Red - интенсивность красного

h:Integer; // h – отступ вертикали от левого края окна

begin // начало программы

Window.Caption:='Красный цвет от 0 до 255';// заголовок окна

For Red:=0 To 255 Do // Red - составляющая красного от 0 до 255

begin // начало тела цикла

Pen.Color:=RGB(Red,0,0); // цвет пера задаём равным Red

Line(h,0, h,480); // рисуем вертикальный отрезок от h,0)до(h,480)

h:= h+1; // сдвигаемся на 1 пиксел вправо

end; // конец цикла

end. // конец программы

Пример 2. Сначала хаотично падают в окно 99 прямоугольников, нарисованных пером, но не закрашенных (DrawRectangle). Затем хаотично падают в окно 99 прямоугольников, закрашенных кистью, но не обведённых пером (FillRectangle). Цвет пера, кисти, а также размер и положение прямоугольников – случайны.

Uses GraphABC;

Var x, y, i: integer;

Begin

Window.Caption:= 'DrawRectangle и FillRectangle';

For i:= 1 to 99 do

Begin

Pen.Color:= clRandom;

x:= Random(Window.Width-100);

y:= Random(Window.Height-100);

DrawRectangle(x,y,x+Random(100),y+Random(100));

Sleep(30);

end;

for i:= 1 to 99 do

Begin

Brush.Color:=clRandom;

x:= Random(Window.Width-100);

y:= Random(Window.Height-100);

FillRectangle(x,y,x+Random(100),y+Random(100));

Sleep(30);

end;

end.

Пример 3. Программа «Крупа». Сто тысяч и тридцать три пиксела случайного цвета рассыпаются по окну. Затем случайным цветом в окне выводится текст «PascalABC.NET”.

Uses GraphABC; //подключение модуля

Var i:integer; //объявление параметра цикла

begin //начало программы

Window.Caption:='Крупа'; //заголовок окна

For i:=1 to 100033 do //сто тысяч тридцать три пиксела

SetPixel(Random(Window.Width),Random(Window.Height),clRandom);

Font.Style:= fsBoldItalic; //стильшрифта - жирныйнаклонный

Font.Size:= 24; //задали размер шрифта - 24

Font.Color:= clRandom; //задали случайный цвет текста

brush.Color:=ARGB(0,0,0,0); //задали прозрачную подложку текста

TextOut(200,220,'PascalABC.NET'); //вывод текста из точки (200,220)

end.

Пример 4. Программа «Долой прозрачность». Круги случайного цвета и размера с прозрачностью от 0 до 255 рассыпаются в окне.

Uses GraphABC;

Var Transparency: integer;

Begin

randomize;

for Transparency:=0 to 255 do //прозрачность – параметр цикла

Begin

Brush.Color:=ARGB(Transparency,Random(256),Random(256),Random(256));

FillCircle(Random(Window.Width),Random(Window.Height),Random(20,60));

sleep(10);

end;

end.

Пример 5. Демонстрация работы со шрифтами.

Uses GraphABC; //подключение модуля

Var i: integer; //объявление переменных

begin //начало программы

Window.Caption:= 'Шрифты'; //заголовок окна

Font.Style:= fsBoldItalic; //стиль шрифта - жирный наклонный

For i:=10 to 17 do //параметр цикла - размер шрифта от 10 до 17

begin //начало тела цикла

Font.Size:= i; //задали размер шрифта

Font.Color:= clRandom; //задали случайный цвет

WriteLn('PascalABC.NET'); //вывели текст

end; //конец цикла

readln; //останов программы до нажатия Enter

Font.Style:= fsBoldUnderline;

For i:=10 to 17 do

Begin

Font.Size:= i;

Font.Color:= clRandom;

WriteLn('PascalABC.NET');

end;

end. //конец программы

Пример 6. Имитация кругов на воде от капель дождя.

Uses GraphABC;

Procedure Kaplia(x0,y0: integer); //заголовок процедуры

Var i: integer; //локальная переменная

Begin

for i:=1 to 63 do //вцикле – 63 итерации

Begin

Pen.Color:= RGB(i*4,i*4,i*4); //перо – серое от тёмного к светлому

Circle(x0,y0,i); //стопка из 63-х кругов с растущим радиусом

Sleep(10);

end;

end;

 

BEGIN

Window.Caption:= 'Капли дождя'; //заголовок окна

SetWindowSize(800,600); //размер окна

Randomize; //инициализация ГСЧ

While True do //бесконечный цикл

Kaplia(Random(800),random(600)); //вызов процедуры

END.

Пояснение.

Эффект капли реализован в процедуре Kaplia в цикле с параметром i, возрастающем от 1 до 63.

- Оператор Pen.Color:= RGB(i*4,i*4,i*4);задаёт текущий цвет пера. Это серый цвет, его интенсивность в цикле меняется от тёмного к светлому.

- Оператор Circle(x0,y0,i); создает «стопку» из 63-х концентрических кругов. Радиус кругов в цикле растёт от 1 до 63, поэтому каждый следующий круг закрывает собой все предыдущие.

- Каждый круг имеет контур серого цвета– и каждый следующий круг имеет контур светлее, чем предыдущие. Чем больше диаметр круга, тем светлей его контур. Последний 63-й круг почти не виден на белом фоне окна.

- Все круги закрашиваются белой кистью (по умолчанию).

Таким образом, каждый вызов процедуры имитирует расходящийся круг на воде от упавшей капли.

В основной программе «дождь» реализован бесконечным циклом, т.к. условие продолжения цикла – всегда True:

While True do

Kaplia(Random(800),random(600));

В процедуру передаются два параметра, задающие центр капли. Координаты центра капли вычисляются как случайные числа так, чтобы центр не вышел за пределы окна.

Пример 7. Мульфильм “Паровоз”.

Program Parovoz;

Uses GraphABC;

Const

dx = 10; //перемещение за одну итерацию

N = WindowWidth div dx; //количество итераций

t = 3000 div N; //пауза в одной итерации

//чтобы цикл длился 3 секунды

Var

i, //параметр цикла для паровоза

j: Integer; //параметр цикла для дыма

Begin

InitWindow(450,10,800,600,clLightGray); // отступы, размеры и цвет окна

SetWindowCaption('Паровоз'); // текст в заголовке окна

 

SetBrushStyle(bsHatch); //кисть штриховая

SetBrushHatch(bhBackwardDiagonal); //со стилем штриховки – косой штрих

SetHatchBrushBackgroundColor(clGreen); //с зелёным цветом заднего плана

FillRectangle(0, 550, 800, 600); //рисуем траву

 

SetBrushStyle(bsSolid); //кисть сплошная

SetBrushColor(clSkyBlue); //кисть голубого цвета

FillRectangle(0, 0, 800, 100); //рисуем небо

 

SetBrushColor(clYellow); //кисть жёлтого цвета

FillCircle(600, 50, 30); //рисуем солнце

 

For i:= 0 to N do //движение паровоза

Begin

SetBrushColor(clMaroon); //кисть красно-коричневого цвета

FillRectangle(i*dx, 390, 180+i*dx, 490); //корпус паровоза

FillRectangle(i*dx, 350, 40+i*dx, 390); //труба паровоза

SetBrushColor(clBlack); //кисть чёрного цвета

FillCircle(30+i*dx, 520, 30); //заднее колесо

FillCircle(150+i*dx, 520, 30); //переднее колесо

SetPenColor(clWhite); //кисть белого цвета

For j:= 1 to 4 do //рисуем 4 кольца дыма

DrawEllipse(i*dx, 330-j*15, 40+i*dx, 350-j*15);

sleep(t); //пауза

SetBrushColor(clLightGray); //кисть цвета фона окна

FillRectangle(i*dx, 260, 180+i*dx, 550); //закрыли паровоз

end;

end.

Пример 8а. Анимация. Мерцание.

Uses GraphABC;

Var x: integer;

Begin

Window.Caption:= 'Эффект мерцания';

Brush.Color:= clGreen; //взяли зелёную кисть

For x:= 70 to 500 do //поехали

Begin

ClearWindow(clWhite); //очистили экран белым цветом

Circle(x,200,50); //нарисовали круг с центром (x,200)

Sleep(10); //пауза

end;

end.

Пояснение.

В цикле окружность перемещается вправо, т.к. координата X центра круга увеличивается, являясь параметром восходящего цикла.

При движении сильно проявляется эффект мерцания.

Чтобы избежать мерцания, можно воспользоваться процедурами LockDrawing и Redraw.

Основная идея состоит в следующем:

- вызвав LockDrawing, отключим рисование на экране,– тогда рисование будет осуществляться только во внеэкранном буфере

- далее будем формировать новый кадр изображения и, когда он сформирован, выводить его на экран целиком, вызывая процедуру Redraw, которая перерисовывает всё графическое окно

Данный метод используется для ускорения анимации и создания анимации без мерцания.

Пример 8б. Анимация без мерцания.

Uses GraphABC;

Var x: integer;

Begin

Window.Caption:= 'Анимация без мерцания';

Brush.Color:= clGreen;

LockDrawing; //отключаем рисование в окне

For x:= 70 to 500 do

Begin

ClearWindow(clWhite);

Circle(x,200,50);

Redraw; //перерисовываем окно из внеэранного буфера

Sleep(10);

end;

end.

ПРИЛОЖЕНИЕ

Основные подпрограммы модуля GraphABC

InitWindow(l,t,w,h,Color); Устанавливает отступы, размеры и цвет графического окна
ClearWindow; Очищает графическое окно и закрашивает белым цветом
ClearWindow(Сolor); Очищает графическое окно и закрашивает цветом Сolor
Sleep(T); Пауза длительностью T миллисекунд
PutPixel(x,y, Color); Пиксел с координатами (x, y) закрашивается цветом Color
SetBrushColor(Сolor); Устанавливает цвет кисти Сolor
SetPenColor(Color); Устанавливает цвет пера Сolor
SetPenWidth(Width); Устанавливает толщину пера в пикселах
MoveTo(x,y); Перо устанавливается в точку (x,y)
LineTo(x,y); Рисуется отрезок от текущей позиции пера до точки (x,y). Текущая позиция переносится в точку (x,y).
Line(x1,y1,x2,y2); Рисуется отрезок от точки (x1,y1) до точки (x2,y2). Положение пера не изменяется.
DrawCircle(x,y,r); Контур круга с центром (x,y) и радиусом r рисуется текущим пером. Внутренность круга не закрашивается
FillCircle(x,y,r); Внутренность круга с центром (x,y) и радиусом r закрашивается текущей кистью. Контур круга не рисуется.
Circle(x,y,r); Контур круга с центром (x,y) и радиусом r рисуется текущим пером. Внутренность круга закрашивается текущей кистью.
DrawEllipse(x1,y1,x2,y2); Эллипс, вписанный в прямоугольник с координатами противоположных вершин (x1,y1)и (x2,y2) рисуется текущим пером. Внутренность эллипса не закрашивается. (Прямоугольник не рисуется.)
DrawRectangle(x1,y1,x2,y2); Контур прямоугольника с координатами противоположных вершин (x1,y1)и (x2,y2) рисуется текущим пером. Внутренность прямоугольника не закрашивается
FillRectangle(x1,y1,x2,y2); Внутренность прямоугольника с координатами противоположных вершин (x1,y1) и (x2,y2)закрашивается текущей кистью. Контур прямоугольника не рисуется.
Rectangle(x1,y1,x2,y2); Контур прямоугольника с координатами противоположных вершин (x1,y1)и (x2,y2) рисуется текущим пером. Внутренность прямоугольника закрашивается текущей кистью.
FloodFill(x,y, Color); Закрашивает замкнутую область одного цвета цветом Color, начиная с точки (x,y), находящейся внутри замкнутой области.
SetFontColor(Color); Устанавливает цвет шрифта
SetFontSize(Size); Устанавливает размер шрифта в пунктах
TextOut(x,y,Текст); Выводит Текст начиная с точки с координатами (x,y). В качестве Текста можно передавать значение любого типа.

 


Поделиться с друзьями:

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Архитектура электронного правительства: Единая архитектура – это методологический подход при создании системы управления государства, который строится...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.11 с.