Здравствуйте, постоянные читатели моего сайта о программировании и математике. На этой странице рассмотрим процедуры Rectangle, DrawRectangle, FillRect/FillRectangle графического модуля GraphABC для рисования прямоугольников. Почему так много процедур? Почему бы не обойтись одной какой-нибудь подпрограммой? Да потому, что разные процедуры рисуют прямоугольники по-разному. Начнем с определения первой из них.
✎ **procedure** Rectangle(x1,y1,x2,y2: integer);
— Рисует заполненный прямоугольник, заданный координатами противоположных вершин (x1, y1) и (x2, y2)
Прямоугольник, построенный с помощью Rectangle
имеет границы и его можно залить (закрасить), предварительно задав цвет процедурой SetBrushColor(...). Для задания толщины границы вызываем процедуру SetPenWidth(...), для цвета границы вызываем SetPenColor(...).
Мы уже упоминали раньше, что здесь в разделе о графике мы повсюду имеем дело с пикселями. Наиболее широко работа с пикселями и сглаживанием изображений ведется в современном телевидении высокого разрешения, или технологий, работающих с ним.
Следует помнить: если не задавать цвета и толщину границы, то задействуются умолчания – толщина границы 1px, цвет границы – черный, цвет заливки – белый. Поэтому, чтобы показать наш прямоугольник "во всей красе", зададим некоторые параметры сами. Возьмите код ниже и вставьте в среду PascalABC или PascalABC.Net. Вообще я рекомендую не копировать, а переписывать руками (если, конечно, код не слишком большой), поскольку так лучше запоминается, сам проверил. Смотрим, что у нас получись:
uses
GraphABC;
var
x1, y1, x2, y2: integer;
begin
x1 := 50; y1 := 50; //координаты левой верхней вершины
x2 := 350; y2 := 250; //координаты правой нижней вершины
SetPenColor(clRed); //цвет границы прямоугольника
SetPenWidth(5); //толщина границы прямоугольника
SetBrushColor(clGreen); //цвет заполнения прямоугольника
Rectangle(x1, y1, x2, y2) { <-- рисуем заполненный прямоугольник
с координатами противоположных вершин (x1, y1) и (x2, y2) }
end.
**unit** GraphABC;
: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**procedure** SetPenColor(c: Color);
: Устанавливает цвет текущего пера Цвет:clRed
– красный**procedure** SetPenWidth(Width: integer);
: Устанавливает ширину текущего пера**procedure** SetBrushColor(c: Color);
: Устанавливает цвет текущей кисти Цвет:clGreen
– зеленый**procedure** Rectangle(x1,y1,x2,y2: integer);
: Рисует заполненный прямоугольник, заданный координатами противоположных вершин (x1,y1) и (x2,y2)
✎ **procedure** DrawRectangle(x1,y1,x2,y2: integer);
— Рисует границу прямоугольника, заданного координатами противоположных вершин (x1, y1) и (x2, y2)
Процедура DrawRectangle
рисует только границу прямоугольника и не заливает область цветом (применять SetBrushColor бессмысленно – она не сработает). К тому же, данная подпрограмма отсутствует в простом PascalABC. Поэтому открываем PascalABC.Net и запускаем на выполнение следующий код.
uses
GraphABC;
var
x1, y1, x2, y2: integer;
begin
SetPenWidth(3); //толщина линии
SetPenColor(clRed); //цвет линии
x1 := 50; y1 := 50; //координаты левой верхней вершины
x2 := 350; y2 := 250; //координаты правой нижней вершины
DrawRectangle(x1, y1, x2, y2) { <-- граница прямоугольника
с координатами противоположных вершин (x1, y1) и (x2, y2) }
end.
**unit** GraphABC;
: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**procedure** SetPenWidth(Width: integer);
: Устанавливает ширину текущего пера**procedure** SetPenColor(c: Color);
: Устанавливает цвет текущего пера Цвет:clRed
– красный**procedure** DrawRectangle(x1,y1,x2,y2: integer);
: Рисует границу прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2)
Если уберем 8 и 9 строки кода (толщина и цвет пера), то граница нашого прямоугольника будет черной и толщиной 1px. Кстати, использовать переменные x1, x2, y1, y2 для координат не обязательно – их записано только для наглядности. Можно просто вставить числа в процедуру, и тогда предыдущая программа будет выглядеть так:
uses
GraphABC;
begin
SetPenWidth(3); //толщина линии
SetPenColor(clRed); //цвет линии
DrawRectangle(50, 50, 350, 250) { <-- вызов процедуры }
end.
**unit** GraphABC;
: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне**procedure** SetPenWidth(Width: integer);
: Устанавливает ширину текущего пера**procedure** SetPenColor(c: Color);
: Устанавливает цвет текущего пера Цвет:clRed
– красный**procedure** DrawRectangle(x1,y1,x2,y2: integer);
: Рисует границу прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2)
Процедуры FillRect и FillRectangle делают одно и то же – заполняют область прямоугольника цветом. Сам прямоугольник при этом границ не имеет, поэтому задавать цвет и толщину с помощью пера Pen не имеет смысла – никакой границы не будет. Разница между ними в данном случае в том, что FillRectangle отсутствует в PascalABC, зато в версии PascalABC.Net присутствуют оба варианта.
Вот определение каждой из них:
✎ **procedure** FillRect(x1,y1,x2,y2: integer);
— Заливает прямоугольник, заданный координатами противоположных вершин (x1, y1) и (x2, y2), цветом текущей кисти.
✎ **procedure** FillRectangle(x1,y1,x2,y2: integer);
— Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1, y1) и (x2, y2)
Простая программа, демонстрирующая сказанное выше. Для заливки прямоугольника мы использовали здесь процедуру FillRect, поэтому данную программу можно запускать как минимум в PascalABC и PascalABC.Net.
uses
GraphABC;
var
x1, y1, x2, y2: integer;
begin
x1 := 50; y1 := 50; //координаты левой верхнего угла
x2 := 350; y2 := 250; //координаты правой нижнего угла
SetBrushColor(clBlue); //цвет заполнения прямоугольника
//FillRectangle(x1, y1, x2, y2); { <-- в PascalABC не работает }
FillRect(x1, y1, x2, y2) { <-- Заполняем прямоугольник с
координатами противоположных вершин (x1, y1) и (x2, y2) }
end.
**unit** GraphABC;
: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**procedure** SetBrushColor(c: Color);
: Устанавливает цвет текущей кисти Цвет:clBlue
– синий**procedure** FillRect(x1,y1,x2,y2: integer);
: Заполняет внутренность прямоугольника, заданного координатами противоположных вершин (x1,y1) и (x2,y2)
Вот похожие темы:
Процедуры Circle, DrawCircle, FillCircle
Процедуры Ellipse, DrawEllipse, FillEllipse
Процедуры RoundRect, DrawRoundRect, FillRoundRect
Если есть вопросы, или подсказки как улучшить статью, то пишите в комментариях. Всего доброго, удачи!