Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Топ:
Устройство и оснащение процедурного кабинета: Решающая роль в обеспечении правильного лечения пациентов отводится процедурной медсестре...
Оснащения врачебно-сестринской бригады.
Установка замедленного коксования: Чем выше температура и ниже давление, тем место разрыва углеродной цепи всё больше смещается к её концу и значительно возрастает...
Интересное:
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Дисциплины:
2018-01-29 | 2135 |
5.00
из
|
Заказать работу |
|
|
Учебное пособие по 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);
<
|
|
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Типы оградительных сооружений в морском порту: По расположению оградительных сооружений в плане различают волноломы, обе оконечности...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!