Root /ArchiveAbout
()

Rectangle, DrawRectangle, FillRect/FillRectangle

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(...).

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

Следует помнить: если не задавать цвета и толщину границы, то задействуются умолчания – толщина границы 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) Заполненный прямоугольник с границей в Pascal

Процедура DrawRectangle

**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) Граница прямоугольника в Pascal

Если уберем 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

Процедуры 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) Заполняем внутренность прямоугольника без границы в Pascal

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

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

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