ВВЕРХ
ВНИЗ

Rectangle, DrawRectangle, FillRect/FillRectangle

Здравствуйте, постоянные читатели моего сайта о программировании и математике. На этой странице рассмотрим процедуры Rectangle, DrawRectangle, FillRect/FillRectangle графического модуля GraphABC для рисования прямоугольников. Почему так много процедур? Почему бы не обойтись одной какой-нибудь подпрограммой? Да потому, что разные процедуры рисуют прямоугольники по-разному. Начнем с определения первой из них.

Процедура Rectangle

procedure Rectangle(x1,y1,x2,y2: integer);

   — Рисует заполненный прямоугольник, заданный координатами противоположных вершин (x1, y1) и (x2, y2)

Прямоугольник, построенный с помощью Rectangle имеет границы и его можно залить (закрасить), предварительно задав цвет процедурой SetBrushColor(...). Для задания толщины границы вызываем процедуру SetPenWidth(...), для цвета границы вызываем SetPenColor(...).

Мы уже упоминали раньше, что здесь в разделе о графике мы повсюду имеем дело с пикселями. Наиболее широко работа с пикселями и сглаживанием изображений ведется в современном телевидении высокого разрешения, или технологий, работающих с ним. Примером может служить приставка tv box cs918 android.

Следует помнить: если не задавать цвета и толщину границы, то задействуются умолчания – толщина границы 1px, цвет границы – черный, цвет заливки – белый. Поэтому, чтобы показать наш прямоугольник "во всей красе", зададим некоторые параметры сами. Возьмите код ниже и вставьте в среду PascalABC или PascalABC.Net. Вообще я рекомендую не копировать, а переписывать руками (если, конечно, код не слишком большой), поскольку так лучше запоминается, сам проверил. Смотрим, что у нас получись:

Код PascalABC, PascalABC.Net
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
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.

Заполненный прямоугольник с границей в Pascal

Процедура DrawRectangle

procedure DrawRectangle(x1,y1,x2,y2: integer);

   — Рисует границу прямоугольника, заданного координатами противоположных вершин (x1, y1) и (x2, y2)

Процедура DrawRectangle рисует только границу прямоугольника и не заливает область цветом (применять SetBrushColor бессмысленно – она не сработает). К тому же, данная подпрограмма отсутствует в простом PascalABC. Поэтому открываем PascalABC.Net и запускаем на выполнение следующий код.

Код PascalABC.Net
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
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.

Граница прямоугольника в Pascal

Если уберем 8 и 9 строки кода (толщина и цвет пера), то граница нашого прямоугольника будет черной и толщиной 1px. Кстати, использовать переменные x1, x2, y1, y2 для координат не обязательно – их записано только для наглядности. Можно просто вставить числа в процедуру, и тогда предыдущая программа будет выглядеть так:

Код PascalABC.Net
1  
2  
3  
4  
5  
6  
7  
8  
uses
  GraphABC;

begin
  SetPenWidth(3); //толщина линии 
  SetPenColor(clRed); //цвет линии
  DrawRectangle(50, 50, 350, 250) { <-- вызов процедуры }
end.

Процедуры FillRect, FillRectangle

Процедуры 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.

Код PascalABC, PascalABC.Net
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
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.

Заполняем внутренность прямоугольника без границы в Pascal

Вот похожие темы:

   Процедуры Circle, DrawCircle, FillCircle
   Процедуры Ellipse, DrawEllipse, FillEllipse
   Процедуры RoundRect, DrawRoundRect, FillRoundRect

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


Яндекс.Метрика