Здравствуйте, читатели сайта progmatem.ru о программировании на паскале. На этой странице рассмотрим следующие три процедуры графического модуля GraphABC – Circle, DrawCircle, FillCircle, причем последние две в среде PascalABC отсутствуют. Но обо всем по порядку, и начнем с определения подпрограммы Circle(x,y,r)
.
✎ **procedure** Circle(x,y,r: integer);
— Рисует заполненную окружность с центром (x, y) и радиусом r
Цвет линии окружности задается с помощью SetPenColor(c)
, ширина – SetPenWidth(w)
, цвет области круга – SetBrushColor(c)
. В PascalABC.Net параметр с
имеет тип Color, в PascalABC – тип ColorType. Ширина, или толщина пера w
– целое положительное число.
Вот как выглядит это на примере:
uses
GraphABC;
var
x, y, r: integer;
begin
x := 250; y := 200; //координаты центра окружности
r := 100; //радиус окружности
SetBrushColor(ClRed); //цвет заполнения
SetPenWidth(5); //толщина границы окружности
SetPenColor(ClGreen); //цвет границы окружности
Circle(x, y, r) { <-- заполненная окужность с
центром в точке (x, y) радиуса r }
end.
**unit** GraphABC;
: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**procedure** SetBrushColor(c: Color);
: Устанавливает цвет текущей кисти Цвет:clRed
– красный**procedure** SetPenWidth(Width: integer);
: Устанавливает ширину текущего пера**procedure** SetPenColor(c: Color);
: Устанавливает цвет текущего пера Цвет:clGreen
– зеленый**procedure** Circle(x,y,r: integer);
: Рисует заполненную окружность с центром (x,y) и радиусом r
Важное замечание: если не устанавливать вручную свойства границы и области окружности, то задействуются умолчания: цвет границы – черный, толщирна пера – 1px, цвет области – белый.
uses
GraphABC;
begin
Circle(250, 200, 100)
end.
**unit** GraphABC;
: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне**procedure** Circle(x,y,r: integer);
: Рисует заполненную окружность с центром (x,y) и радиусом r
✎ **procedure** DrawCircle(x,y,r: integer);
— Рисует окружность с центром (x, y) и радиусом r
Отличие процедуры DrawCircle от Circle в том, что первая рисует только линию окружности, не заполняя внутренней части. То есть попросту говоря – окружность пустая внутри. Напишем простенькую программу.
uses
GraphABC;
var
x, y, r: integer;
begin
x := 300; y := 250; //координаты центра окружности
r := 150; //радиус окружности
SetPenColor(ClOrange); //цвет пера (окружн. в данном сл.)
SetPenWidth(5); //толщина пера (толщина линии окружности)
DrawCircle(x, y, r) { <-- окужность с центром в
точке (x, y) радиуса r }
end.
**unit** GraphABC;
: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**procedure** SetPenColor(c: Color);
: Устанавливает цвет текущего пера Цвет:clOrange
– оранжевый**procedure** SetPenWidth(Width: integer);
: Устанавливает ширину текущего пера**procedure** DrawCircle(x,y,r: integer);
: Рисует окружность с центром (x,y) и радиусом r
А теперь продемонстрируем на примере, что процедура DrawCircle(x,y,r)
действительно рисует незаполненную окружность в PascalABC.Net. Сначала программа рисут окружность Circle (строка 8 кода ниже), делая паузу на 2 секунды прорцедурой sleep(2000)
в следующей строке. Наконец, в последней строке вызываем процедуру DrawCircle для создания незаполненной окружности. Запустите программу в PascalABC.Net и посмотрите результат:
uses
GraphABC;
begin
SetPenColor(ClOrange); //цвет пера (линия круга)
SetBrushColor(clgreen); //цвет кисти (область круга)
SetPenWidth(5); //толщина пера
Circle(220, 200, 120); { <-- рисуем заполненную окужность }
sleep(2000); //пауза на 2 секунды
SetPenColor(ClBlue); //цвет пера
DrawCircle(330, 170, 90) { <-- рисуем незаполненную окужность }
end.
**unit** GraphABC;
: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне**procedure** SetPenColor(c: Color);
: Устанавливает цвет текущего пера Цвет:clOrange
– оранжевый**procedure** SetBrushColor(c: Color);
: Устанавливает цвет текущей кисти Цвет:clGreen
– зеленый**procedure** SetPenWidth(Width: integer);
: Устанавливает ширину текущего пера**procedure** Circle(x,y,r: integer);
: Рисует заполненную окружность с центром (x,y) и радиусом r**procedure** Sleep(ms: integer);
: Делает паузу на ms миллисекунд**procedure** SetPenColor(c: Color);
: Устанавливает цвет текущего пера Цвет:clBlue
– синий**procedure** DrawCircle(x,y,r: integer);
: Рисует окружность с центром (x,y) и радиусом r
Аналогичный вывод мы сделали на странице Процедуры DrawPolygon и FillPolygon по отношению к указанным подпрограммам, где демонстрировали использование закрашенного (заполненного) многоугольника Polygon и просто ломаной DrawPolygon. Здесь необходимо запомнить правило:
✎ Если в PascalABC.Net процедура графического модуля используется с приставкой Draw, то кисть Brush для закрашивания области здесь не используется. Это ясно из того, что одно из значений английского слова "draw" является "рисовать", то есть просто рисовать линию.
Наконец, подходим к последней процедуре FillCircle(...)
этой группы подпрограмм, относящихся к окружности и кругу. В чем её отличие от предыдущих Circle и DrawCircle? Английское слово "fill" означает "заполнять", поэтому можно предположить, что данная процедура заполняет (закрашивает, зарисовывает) простаранство круга. Действительно:
✎ **procedure** FillCircle(x,y,r: integer);
— Заполняет внутренность окружности с центром (x, y) и радиусом r
Приведем пример с окружностью закрашенной в розовый цвет. Вот программа:
uses
GraphABC;
var
x, y, r: integer; //x,y - коорд. центра, r - радиус
begin
x := 250;
y := 200;
r := 100;
SetBrushColor(ClPink); //цвет заполнения
FillCircle(x, y, r) //процедура заполнения окружности
end.
**unit** GraphABC;
: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне**type** integer;
: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647**procedure** SetBrushColor(c: Color);
: Устанавливает цвет текущей кисти Цвет:clPink
– розовый**procedure** FillCircle(x,y,r: integer);
: Заполняет внутренность окружности с центром (x,y) и радиусом r
Особенность этой процедуры в том, что залитый таким образом круг не имеет границы, а поэтому перо Pen
использовать не имеет смысла. Действительно, в следующей программе устанавливая толщину и цвет пера (5 и 6 строка кода), видим, что жёлтый круг все равно остается без границы:
uses
GraphABC;
begin
SetPenWidth(5); //толщина границы 5px
SetPenColor(clGreen); //цвет границы - зеленый
SetBrushColor(ClYellow); //цвет заполнения - жёлтый
FillCircle(200, 150, 120); //процедура заполнения окружности
end.
**unit** GraphABC;
: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне**procedure** SetPenWidth(Width: integer);
: Устанавливает ширину текущего пера**procedure** SetPenColor(c: Color);
: Устанавливает цвет текущего пера Цвет:clGreen
– зеленый**procedure** SetBrushColor(c: Color);
: Устанавливает цвет текущей кисти Цвет:clYellow
– жёлтый**procedure** FillCircle(x,y,r: integer);
: Заполняет внутренность окружности с центром (x,y) и радиусом r
Вобщем, если нужно нарисовать круг и сразу его закрасить (залить), то используем Circle; если инужна окружность, то DrawCircle; если закрашенный круг без границ, то применяем FillCircle.
На этом все. Если есть вопросы или пожелания, то пишите в комментариях.