Практическая работа по теме Графические возможности языка Lazarus


Практическая работа
Тема. Графические возможности языка Lazarus. Организация
рисования. Создаем приложение «Рисовалка».
Цель: познакомиться с особенностями программирования графики в Lazarus.
Теоретическая часть.
Вам уже известны графические возможности языка Паскаль. В языке Lazarus также можно рисовать на разных объектах. Многие компоненты языка Lazarus имеют свойство Canvas (Холст). На этом холсте мы можем рисовать кистью (Brush), пером (Pen), определять шрифт (Font).
Кисть(Brush) предназначена для закрашивания фигур. Она может иметь цвет (Color) и стиль (Style).
Свойство Color определяет цвет кисти.
Свойство Style определяет способ закрашивания. Возможные значения: bsSolid (сплошная кисть), bsHorizontal и bsVertical (горизонтальные и вертикальные полоски соответственно), bsFDiagonal и bsBDiagonal (наклонные вправо или влево полосы соответственно), bsCross (клетка) и другие.
Пример:
Form1.Canvas.Brush.Color:=clBlue; //присвоить кисти синий цвет
Form1.Canvas.Brush.Style:=bsCross;//установить стиль закраски в клетку
Form1.Canvas.Rectangle(80,80,180,150); //нарисовать прямоугольник
Получаем прямоугольник, закрашенный клетками синего цвета.
Результат на рисунке:

Перо (Pen) предназначено для рисования различных линий. У него может быть цвет (Color), вид (Style), ширина (Width), режим отображения (Mode).
Свойство Style может принимать значения: psSolid (сплошная линия), psDash (штрих), psDot (пунктир), psDashDot (штрих-пунктир) и другие.
Пример:
Form1.Canvas.Pen.Color:=clRed; //присвоить перу красный цвет
Form1.Canvas.Pen.Style:=psDot; //установить стиль в виде пунктирной линии
Form1.Canvas.Rectangle(80,80,180,150); //нарисовать прямоугольник
Получаем прямоугольник с пунктирной границей красного цвета.
Результат на рисунке:

На холсте мы можем нарисовать простейшие геометрические фигуры: точку (Pixels), линию (Line или LineTo), прямоугольник (Rectangle), эллипс (Ellipse), дугу (Arc) и другие. А также можем закрасить замкнутые области с помощью процедуры Floodfill.
Общий вид свойств и методов:
Свойство Pixels[X,Y]: Color – соответствует цвету точки с координатами (X,Y);
Пример: Form1.Canvas.Pixels[60,50]:=clred;//Вывести на форму красную точку.Методы:
MoveTo(X,Y) – перемещает текущее положение пера в точку (X,Y);
LineTo(X,Y) – проводит линию текущим пером из текущей точки в точку (X,Y);
Line(X1,Y1,X2,Y2) – проводит линию от точки (X1,Y1) до точки (X2,Y2);
Rectangle(X1,Y1, X2,Y2) – рисует прямоугольник с диагональю заданной координатами (X1,Y1) и (X2,Y2);
Ellipse(X1,Y1, X2,Y2) – рисует и закрашивает эллипс, вписанный в прямоугольник (X1,Y1)- (X2,Y2);
Arc(X1,Y1,X2,Y2,XЗ,Y3,X4,Y4) - рисует сегмент эллипса. Эллипс определяется описывающим прямоугольником (X1,Y1)-(X2,Y2). Начальная точка сегмента лежит на пересечении эллипса и луча, проведенного из его центра через точку (X3,Y3). Конечная точка сегмента лежит на пересечении эллипса и луча, проведенного из его центра через точку (X4,Y4). Сегмент рисуется против часовой стрелки;
FloodFill(X, Y, Color, FillStyle); FillStyle = (fsSurface, fsBorder) – производит заливку области текущей кистью. Процесс начинается с точки (X,Y). Если режим FillStyle равен fsSurface, то он продолжается до тех пор, пока есть соседние точки с цветом Color. В режиме fsBorder закрашивание, наоборот, прекращается при выходе на границу с цветом Color;
TextOut(X, Y, Text) – производит вывод строки Text. Левый верхний угол помещается в точку (X,Y).
Определены следующие константы цветов:
clAquaclBlackclBlueclCreamclFuchsiaclGrayclGreenclLimeclMaroonclMoneyGreenБирюзовый
Черный
Синий
Кремовый
Сиреневый
Серый
Зелёный
Ярко-зелёный
Темно-красный
Зелёные деньги clNavyclOliveclPurpleclRedclSilverclSkyBlueclTealclWhiteclYellowТемно-синий
Оливковый
Фиолетовый
Красный
Серебряный
ГолубойСине-зелёный
Белый
Жёлтый
Функция RGBToColor(R, G, B: integer): TColor позволяет определить любой цвет.
Пример:
RGBToColor(170,105,70); //определить коричневый цвет.
Практическая часть.
Создайте новый проект. Измените некоторые свойства формы:
Свойство Значение
NameFrmDraw
CaptionРисовалкаРазместите на форме компонент Shape. Найти его можно на вкладке Additional палитры компонентов. Этот компонент позволяет вывести на форму какую-либо фигуру, например прямоугольник, окружность, треугольник и т.д. Как будет выглядеть Shape на форме, это зависит от его свойства Shape. Нам нужно, чтобы он выглядел в виде прямоугольника (rectangle), так как он будет играть роль экрана, на котором мы будем рисовать.
Разместите также на форме кнопку и измените её свойства:
Свойство Значение
NameBtnDrawCaptionРисовать

Вот что должно получиться:

Теперь дважды щёлкните по кнопке Рисовать.
Активизировалась процедура TFrmDraw.BtnDrawClick(Sender: TObject);
Впишите в тело процедуры ниже следующий код.
Пояснение.
1. Вместо записи длинных строк типа:
Shape1.Canvas.Rectangle(80,80,180,150), мы воспользуемся оператором with do, который поможет сократить текст программы;
2. Комментарии, которые отделяются знаком // печатать не нужно.
with Shape1.Canvas do
begin pen.Color:=clGray; //установить цвет пера
rectangle(80,80,180,150); //рисовать основание дома
rectangle(100,90,120,120); //рисовать окно
rectangle(140,110,170,150); //рисовать дверь
moveto(80,80); //переместиться в точку (80,80)
lineto(130,40);
lineto(180,80); //рисовать крышу
brush.Color:=clBlue; //установить цвет заливки
floodfill(140,90,clGray,fsBorder); //закрасить дом
brush.Color:=clGreen;
floodfill(150,130,clGray,fsBorder);//закрасить дверь
brush.Color:=clAqua;
floodfill(110,100,clGray,fsBorder);//закрасить окно
brush.Color:=clRed;
floodfill(130,60,clGray,fsBorder); //закрасить крышу
brush.Color:=clYellow; //установить цвет заливки
ellipse(30,10,60,40); //рисовать солнце
textout(120,160,'Дом'); //вывести надпись
end;

Задание. Придумайте свой рисунок и напишите к нему программу, максимально используя графические возможности языка Lazarus.
Контрольные вопросы:
1. Назовите основное свойство компонентов языка Lazarus, позволяющее рисовать на этих компонентах.
2. Какими инструментами обладает это свойство?
2. Назовите основные графические методы.