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

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

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

Часть 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);

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

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

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

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

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

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

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

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

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

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 будет выглядеть короче:

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

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.

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

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

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

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

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

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

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

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

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

VarC: 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(по умолчанию) Сплошное перо Процедуры для работы с графическим окном - student2.ru
psClear Прозрачное перо  
psDash Штриховое перо Процедуры для работы с графическим окном - student2.ru
psDot Пунктирное перо Процедуры для работы с графическим окном - student2.ru
psDashDot Штрихпунктирное перо Процедуры для работы с графическим окном - student2.ru
psDashDotDot Перо, чередующее штрих и два пунктира Процедуры для работы с графическим окном - student2.ru

Перо по умолчанию пишет чёрной сплошной линией толщиной 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

UsesGraphABC;

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. Нарисовать и закрасить пятиконечную звезду

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

UsesGraphABC;

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.

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

Процедуры для работы с графическим окном - student2.ru Центр круга спроектируем на оси координат. На оси 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).

UsesGraphABC; //подключение модуля 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используются процедуры:

UsesGraphABC; //подключение модуля 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 Прямоугольная клетка Процедуры для работы с графическим окном - student2.ru
bhDiagonalCross Косоугольная клетка Процедуры для работы с графическим окном - student2.ru
bhBackwardDiagonal Косой штрих / / / / / Процедуры для работы с графическим окном - student2.ru
bhForwardDiagonal Косой штрих \ \ \ \ \ Процедуры для работы с графическим окном - student2.ru
bhHorizontal Штриховка горизонтальными линиями Процедуры для работы с графическим окном - student2.ru
bhVertical Штриховка вертикальными линиями Процедуры для работы с графическим окном - student2.ru

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

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

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

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

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

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

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

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

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

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

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

UsesGraphABC; // Подключили модуль 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. // Конец программы

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

Процедуры для работы с графическим окном - student2.ru Рассмотрим левый верхний угол прямоугольника. Спроектируем его на оси координат. На оси 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.Прямоугольники разных цветов и прозрачности.

UsesGraphABC;

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 вывести в графическом окне.

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

VarX, 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.Нарисовать на экране Российский флаг. Внизу под флагом написать слово «РОССИЯ».

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

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 вертикальных отрезков с нарастающей интенсивностью красного.

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

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

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

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

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

ForRed:=0 To255 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). Цвет пера, кисти, а также размер и положение прямоугольников – случайны.

UsesGraphABC;

Varx, y, i: integer;

Begin

Window.Caption := 'DrawRectangle и FillRectangle';

Fori := 1 to99 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;

fori := 1 to99 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”.

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

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

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

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

Fori:=1 to100033 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 рассыпаются в окне.

UsesGraphABC;

VarTransparency: integer;

Begin

randomize;

forTransparency:=0 to255 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. Демонстрация работы со шрифтами.

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

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

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

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

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

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

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

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

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

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

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

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

Font.Style := fsBoldUnderline;

Fori:=10 to17 do

Begin

Font.Size := i;

Font.Color := clRandom;

WriteLn('PascalABC.NET');

end;

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

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

UsesGraphABC;

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

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

Begin

fori:=1 to63 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; //инициализация ГСЧ

WhileTrue 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:

WhileTrue do

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

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

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

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

ProgramParovoz;

UsesGraphABC;

Const

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

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

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

//чтобы цикл длился 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); //рисуем солнце

Fori := 0 toN 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); //кисть белого цвета

Forj := 1 to4 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а.Анимация. Мерцание.

UsesGraphABC;

Varx: integer;

Begin

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

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

Forx := 70 to500 do //поехали

Begin

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

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

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

end;

end.

Пояснение.

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

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

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

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

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

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

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

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

UsesGraphABC;

Varx: integer;

Begin

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

Brush.Color := clGreen;

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

Forx := 70 to500 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

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

Часть 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);

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

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

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

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

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

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

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

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

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

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);

<

Наши рекомендации