Процедуры для работы с графическим окном — КиберПедия 

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

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

Процедуры для работы с графическим окном

2018-01-29 2112
Процедуры для работы с графическим окном 4.60 из 5.00 5 оценок
Заказать работу

Учебное пособие по GraphABC

Часть I.

Модуль GraphABC

Для работы в графическом режиме в PascalABC.NET имеется стандартный модуль GraphABC, который представляет собой графическую библиотеку и предназначен для создания графических и анимационных программ.

Модуль GraphABC подключается к программе в разделе Uses:

Uses GraphABC;

Этотраздел располагается в самом начале программы.

Графическое окно

Если к программе подключен модуль GraphABC, то программа выполняется в специальном графическом окне, которое располагается «перед» окном PascalABC.Net. Графическое окно по умолчанию имеет заголовок GraphABC.Net, размер 640 на 480 пикселов и располагается в центре экрана. Мышью можно изменять размер графического окна и перемещать его за заголовок, как обычное окно Windows.

Для реализации действий с графическим окном используется объект Window (окно). Объект Window имеет ряд свойств. Среди них:

- Left - отступ графического окна от левого края экрана в пикселах

- Top - отступ графического окна от верхнего края экрана в пикселах

- Width – ширина графического окна в пикселах(по умолчанию – 640 пикселов);

- Height – высота графического окна в пикселах(по умолчанию – 480 пикселов);

- Caption – заголовок графического окна(по умолчанию – GraphABC.Net);

Свойства используются для того, чтобы управлять внешним видом окна.

Для задания значения свойств используется оператор присваивания следующего вида:

<имя объекта>.<имя свойства>:=<значение свойства>;

Пример 1. Вывести на экран графическое окно. Выдержать паузу 5 секунд. Затем:

- Установить отступы графического окна: от левого края экрана – 450 пикселов, и от верхнего края экрана – 10 пикселов.

- Установить размер графического окна – 800 на 600 пикселов.

- Задать заголовок графического окна – «Паскаль. Графика».

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

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

Sleep(5000); // пауза 5000 миллисекунд

Window.Left:=450; // отступ слева - 450 пикселов

Window.Top:=10; // отступ сверху - 10 пикселов

Window.Width:=800; // ширина окна - 800 пикселов

Window.Height:=600; // высота окна - 600 пикселов

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

Window.Caption:=('Паскаль. Графика'); // текст в заголовке окна

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

Пояснение. Т.к. к программе подключен модуль GraphABC, открывается графическое окно. Оно по умолчанию имеет заголовок GraphABC.Net, размер 640 на 480 пикселов и располагается в центре экрана.

В таком виде это окно находится 5 секунд, благодаря оператору Sleep(5000), задающему паузу в 5000 миллисекунд (5 секунд).

Затем работают операторы присваивания, которые задают новые значения свойствам Left, Top, Width, Height и Caption объекта Window.

Процедура ClearWindow(clSilver); закрашивает окно серебряным цветом.

В результате - размер, расположение графического окна и его заголовок - изменились.

Чтобы закрыть окно, нажмите значок «Завершить» на панели инструментов, или нажмите кнопку Закрыть («крестик»).

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

SetWindowLeft(450);

SetWindowTop(10);

SetWindowWidth(800);

SetWindowHeight(600);

SetWindowCaption('Паскаль. Графика');

Кроме этого, есть процедура, которая одновременно устанавливаетотступы, размеры и цвет графического окна:

InitWindow(450,10,800,600,clSilver);

Тогда программа Примера 1 будет выглядеть короче:

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

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

Sleep(5000); // пауза 5 сек.

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

SetWindowCaption('Паскаль. Графика'); // текст в заголовке окна

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

Цвет

Изображение на экране состоит из светящихся точек – пикселов.

Цвет каждого пиксела является результатом смешения трёх базовых цветов:

- Red (красного)

- Green (зелёного)

- Blue (синего).

Интенсивность каждого базового цвета лежит в диапазоне от 0 (отсутствие цвета) до 255 (максимально интенсивный). Такая модель цвета называется RGB.

Кроме цвета пиксел характеризуется прозрачностью, которая также измеряется от 0 (абсолютная прозрачность) до 255 (нет прозрачности).

Таким образом, для задания каждого пиксела в компьютере требуется 4 байта: 1 под прозрачность и 3 под базовые цвета.

Для работы с цветом в модуле GraphABC используется тип Color.

Цветовые константы

(здесь приведено только несколько цветовых констант, на самом деле в модуле их около 140)

Цветовая константа Цвет
clBlack Чёрный
clMaroon Красно-коричневый
clGreen Зелёный
clOlive Желтовато-зелёный
clNavy Тёмно-синий
clPurple Пурпурный
clSkyBlue Голубой
clGray Серый
clSilver Серебряный
clRed Красный
clLime Салатовый
clYellow Жёлтый
clBlue Синий
clFuchsia Ярко-розовый
clAquamarine Бирюзовый
clLightGray Светло-серый
clDarkGray Тёмно-серый
clWhite Белый

Пример6. Получениеи вывод базовых составляющих цвета clAquamarine.

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

Var C: Color; //переменная С типа Color

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

Window.Caption:='Цвет Aquamarine'; // заголовок окна

C:= clAquamarine; //С получила значение clAquamarine

WriteLn('Red=',GetRed(C),
'Green=',GetGreen(C),
'Blue=',GetBlue(C)); // вывод базовых составляющих цвета

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

Пример 7. Получение и вывод базовых составляющих случайного цвета.

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

Var C: Color; //переменная С типа Color

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

Window.Caption:='Случайный цвет'; // заголовок окна

C:= clrandom; //С получила случайное значение

Print(GetAlpha(C), //вывод прозрачности

GetRed(C), // и базовых составляющих цвета С

GetGreen(C),

GetBlue(C));

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

Перо

Для рисования линий, контуров фигур и текста используется объект Pen (перо). Объект Pen имеет ряд свойств. Среди них:

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

- Width – толщина перав пикселах (по умолчанию – 1 пиксел);

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

- X – x-координата текущей позиции пера;

- Y – y-координата текущей позиции пера;

Стили пера

Значения свойства Styleобъекта Pen Стиль линии Образец линии
psSolid(по умолчанию) Сплошное перо
psClear Прозрачное перо  
psDash Штриховое перо
psDot Пунктирное перо
psDashDot Штрихпунктирное перо
psDashDotDot Перо, чередующее штрих и два пунктира

Перо по умолчанию пишет чёрной сплошной линией толщиной 1 пиксел. Задать другие значения легко, присваивая свойствам пера нужные значения:

Pen.Color:= clRed; {перо будет писать красным цветом}

Pen.Width:= 3; {толщина пера – 3 пиксела }

Pen.Style:= psDot; {линии будут пунктирные}(

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

SetPenColor(clRed); {перо будет писать красным цветом}

SetPenWidth(3); {толщина пера – 3 пиксела }

SetPenStyle(psDot); {линии будут пунктирные}

Процедуры движения пера, рисования отрезков
MoveTo(X,Y); Перо устанавливается в точку X,Y
LineTo(X,Y); Рисуется отрезок от текущей позиции пера до точки (X,Y). Текущая позиция переносится в точку (X,Y).
Line(X1,Y1, X2,Y2); Рисуется отрезок от точки (X1,Y1) до точки (X2,Y2). Положение пера не изменяется.
Процедура закраски замкнутой области
FloodFill(X,Y,C); Закрашивает замкнутую область одного цвета цветом C, начиная с точки (X,Y), находящейся внутри замкнутой области.

Пример 8. Нарисовать диагонали графического окна с помощью поцедуры Line

Uses GraphABC;

Begin

Window.Title:= 'Диагонали окна';

Pen.Color:= clRandom; {случайный цвет пера}

Pen.Width:= 5; {толщина пера – 5 пикселов }

Pen.Style:= psDash; {штриховое перо}

Line(0,0, WindowWidth,WindowHeight);

Line(0,WindowHeight, WindowWidth,0);

end.

Пример9. Нарисовать и закрасить пятиконечную звезду

Вершины пятиконечной звезды имеют координаты: A (200,100) B (295,169) C (259,281) D (141,281) E (105,169) Красным пером толщиной 4 пиксела нарисовать звезду, используя процедуры рисования MoveTo и LineTo. Дополнительно: закрасить звезду красным цветом, используя процедуру FloodFill.

Uses GraphABC;

Begin

Window.Caption:='Пятиконечная звезда'; // Заголовок окна

Pen.Color:= clRed; // Красный цвет пера

Pen.Width:= 4; // Толщина пера 4 пиксела

{Другой вариант программы, где предыдущие три оператора заменяются процедурами:

SetWindowCaption('Пятиконечная звезда');

SetPenColor(clRed);

SetPenWidth(3);

}

MoveTo(200, 100); // Установить перо в точку А

LineTo(259, 281); // Отрезок АС

LineTo(105, 169); // Отрезок СЕ

LineTo(295, 169); // Отрезок ЕВ

LineTo(141, 281); // Отрезок ВD

LineTo(200, 100); // Отрезок DА

FloodFill(200, 200, clred); // Закраска центрального пятиугольника

FloodFill(200, 104, clRed); // Закраска вершины A

FloodFill(280, 170, clRed); // Закраска вершины B

FloodFill(120, 170, clRed); // Закраска вершины E

FloodFill(240, 240, clRed); // Закраска вершины C

FloodFill(160, 240, clRed); // Закраска вершины D

end.

Как нарисовать круг в графическом окне?

Центр круга спроектируем на оси координат. На оси X получаем точку X0, а на оси Y получаем точку Y0. Это и есть координаты центра круга – (X0,Y0). Радиус круга обозначен буквой R. Чтобы задать круг, надо вызвать нужную процедуру и в ней перечислить 3 параметра – координаты центра и радиус: X0,Y0,R.

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

DrawCircle(X0,Y0,R); Контур круга (окружность) рисуется текущим пером. Внутренность круга не закрашивается
FillCircle(X0,Y0,R); Внутренность круга закрашивается текущей кистью. Контур круга (окружность)не рисуется
Circle(X0,Y0,R); Контур круга (окружность) рисуется текущим пером. Внутренность круга закрашивается текущей кистью.

Пример 10. Нарисуем пять концентрических окружностей разными стилями пера.
Центр окружностей – точка (320,240).

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

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

Window.Caption:= ' «Стильные» окружности'; // заголовок окна

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

Pen.Width:= 3; // толщина пера - 3 пиксела

 

Pen.Style:= psSolid; // стиль пера "Сплошное перо"

DrawCircle(320,240, 220); // нарисовали сплошную окружность R=220

 

Pen.Style:= psDash; // стиль пера "Штриховое перо"

DrawCircle(320,240, 180); // нарисовали штриховую окружность R=180

 

Pen.Style:= psDot; // стиль пера "Пунктирное перо"

DrawCircle(320,240, 140); // нарисовали пунктирную окружность R=140

 

Pen.Style:= psDashDot; // стиль пера "Штрихпунктирное перо"

DrawCircle(320,240, 100); // штрихпунктирная окружность R=100

 

Pen.Style:= psDashDotDot; // стиль пера "Штрих и два пунктира"

DrawCircle(320,240, 60); // нарисовали окружность таким стилем R=60

end.

Другой вариант программы, где для изменения свойств объекта Pen используются процедуры:

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

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

SetWindowCaption('«Стильные» окружности'); // заголовок окна

SetPenColor(clRandom); // задали случайный цвет пера

SetPenWidth(3); // толщина пера - 3 пиксела

 

SetPenStyle(psSolid); // стиль пера "Сплошное перо"

DrawCircle(320,240, 220); // нарисовали сплошную окружность R=220

 

SetPenStyle(psDash); // стиль пера "Штриховое перо"

DrawCircle(320,240, 180); // нарисовали штриховую окружность R=180

 

SetPenStyle(psDot); // стиль пера "Пунктирное перо"

DrawCircle(320,240, 140); // нарисовали пунктирную окружность R=140

end.

Кисть

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

- Style – стиль кисти(по умолчанию - bsSolid);

- Color – цвет кисти(по умолчанию clWhite - белый);

- Hatch – штриховка(по умолчанию - bhCross);

- HatchBackgroundColor – фон штриховки(по умолчанию clWhite - белый).

Среди свойств кисти определяющим является свойство Style – стиль кисти.

Стили кисти

Значения свойства Style объекта Brush  
bsSolid (по умолчанию) Сплошная кисть. Закрашивает замкнутую область. Цвет сплошной кисти задаётся свойством - Color – цвет кисти(по умолчанию clWhite- белый).
bsClear Прозрачная кисть. Закраска не происходит.
bsHatch Штриховая кисть. Штрихует замкнутую область. Для штриховой кисти свойство Color не срабатывает, зато можно устанавливать свойства: - Hatch – штриховка(по умолчанию bhCross- клетка); - HatchBackgroundColor – фон штриховки (по умолчанию - белый)

Стили штриховки (здесь приведено несколько штриховок, на самом деле в модуле их около 60)

Значения свойства Hatch объекта Brush Штриховка Образец штриховки
bhCross Прямоугольная клетка
bhDiagonalCross Косоугольная клетка
bhBackwardDiagonal Косой штрих / / / / /
bhForwardDiagonal Косой штрих \ \ \ \ \
bhHorizontal Штриховка горизонтальными линиями
bhVertical Штриховка вертикальными линиями

Задание свойств кисти:

Brush.Color:= clGreen; {цвет сплошной кисти - зелёный}

Brush.Style:= bsHatch; {стиль кисти– штриховая кисть}

Brush.Hatch:= bhDiagonalCross; {стиль штриховки – косоугольная клетка}

Brush.HatchBackgroundColor:=clBlue; {задний плана штриховки - синего цвета}

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

SetBrushColor(clGreen); {цвет сплошной кисти - зелёный}

SetBrushStyle(bsHatch); {стиль кисти – штриховая кисть}

SetBrushHatch(bhDiagonalCross); {стиль штриховки – косоугольная клетка}

SetHatchBrushBackgroundColor(clBlue); {задний плана штриховки - синего цвета}

Пример 11. Работа с кистью.
Нарисуем три круга с помощью процедуры Circle.
Эта процедура нарисует круги текущим пером чёрного цвета (по умолчанию), и каждый круг закрасит кистью в зависимости от установленного стиля кисти.

Uses GraphABC; // Подключили модуль GraphABC

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

Window.Caption:='«Стильные» круги';// Заголовок графического окна

Brush.Color:= clYellow;// Задали цвет кисти - clYellow (жёлтый)

Brush.Hatch:= bhVertical;//Задали стиль штриховки-bhVertical(вертикаль)

Brush.HatchBackgroundColor:=clLime;//Задали фон штриховки-clLime(салатовый)

 

Brush.Style:= bsClear;// Задали стиль кисти - Прозрачная кисть (bsClear)

Circle(100,240,100); // Нарисовали первый круг

// Видим, что закраска и штриховка отсутствуют

 

Brush.Style:= bsSolid;// Задали стиль кисти - Сплошная кисть (bsSolid)

Circle(300,240,100); // Нарисовали второй круг

// Закраска цветом кисти clYellow, штриховки нет

 

Brush.Style:= bsHatch;// Задали стиль кисти - Штриховая кисть (bsHatch)

Circle(500,240,100); // Нарисовали третий круг

// Штриховка - bhVertical, фон штриховки - clLime

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

Как нарисовать прямоугольник в графическом окне?

Рассмотрим левый верхний угол прямоугольника. Спроектируем его на оси координат. На оси X получаем точку X1, а на оси Y получаем точку Y1. Это и есть координаты левого верхнего угла прямоугольника – (X1,Y1). Аналогично подробно объяснить про правый нижний угол – (X2,Y2).

Чтобы нарисовать прямоугольник – надо вызвать нужную процедуру и в ней перечислить 4 параметра: X1,Y1,X2,Y2.

Пояснение.

В разделе 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). В качестве Текста можно передавать значение любого типа.

 

Учебное пособие по GraphABC

Часть I.

Модуль GraphABC

Для работы в графическом режиме в PascalABC.NET имеется стандартный модуль GraphABC, который представляет собой графическую библиотеку и предназначен для создания графических и анимационных программ.

Модуль GraphABC подключается к программе в разделе Uses:

Uses GraphABC;

Этотраздел располагается в самом начале программы.

Графическое окно

Если к программе подключен модуль GraphABC, то программа выполняется в специальном графическом окне, которое располагается «перед» окном PascalABC.Net. Графическое окно по умолчанию имеет заголовок GraphABC.Net, размер 640 на 480 пикселов и располагается в центре экрана. Мышью можно изменять размер графического окна и перемещать его за заголовок, как обычное окно Windows.

Для реализации действий с графическим окном используется объект Window (окно). Объект Window имеет ряд свойств. Среди них:

- Left - отступ графического окна от левого края экрана в пикселах

- Top - отступ графического окна от верхнего края экрана в пикселах

- Width – ширина графического окна в пикселах(по умолчанию – 640 пикселов);

- Height – высота графического окна в пикселах(по умолчанию – 480 пикселов);

- Caption – заголовок графического окна(по умолчанию – GraphABC.Net);

Свойства используются для того, чтобы управлять внешним видом окна.

Для задания значения свойств используется оператор присваивания следующего вида:

<имя объекта>.<имя свойства>:=<значение свойства>;

Пример 1. Вывести на экран графическое окно. Выдержать паузу 5 секунд. Затем:

- Установить отступы графического окна: от левого края экрана – 450 пикселов, и от верхнего края экрана – 10 пикселов.

- Установить размер графического окна – 800 на 600 пикселов.

- Задать заголовок графического окна – «Паскаль. Графика».

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

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

Sleep(5000); // пауза 5000 миллисекунд

Window.Left:=450; // отступ слева - 450 пикселов

Window.Top:=10; // отступ сверху - 10 пикселов

Window.Width:=800; // ширина окна - 800 пикселов

Window.Height:=600; // высота окна - 600 пикселов

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

Window.Caption:=('Паскаль. Графика'); // текст в заголовке окна

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

Пояснение. Т.к. к программе подключен модуль GraphABC, открывается графическое окно. Оно по умолчанию имеет заголовок GraphABC.Net, размер 640 на 480 пикселов и располагается в центре экрана.

В таком виде это окно находится 5 секунд, благодаря оператору Sleep(5000), задающему паузу в 5000 миллисекунд (5 секунд).

Затем работают операторы присваивания, которые задают новые значения свойствам Left, Top, Width, Height и Caption объекта Window.

Процедура ClearWindow(clSilver); закрашивает окно серебряным цветом.

В результате - размер, расположение графического окна и его заголовок - изменились.

Чтобы закрыть окно, нажмите значок «Завершить» на панели инструментов, или нажмите кнопку Закрыть («крестик»).

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

SetWindowLeft(450);

SetWindowTop(10);

SetWindowWidth(800);

SetWindowHeight(600);

<

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

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...



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

0.428 с.