336____________

Рис. 5.8

Линии различных стилей

Глава 5

Примеры линий всех стилей приведены на рис. 5.8.

Все стили со штрихами и пунктирами доступны только при Width = 1. В про-
тивном случае линии этих стилей рисуются как сплошные.

Стиль psInsideFrame — единственный, который допускает произвольные цве-
та. Цвет линии при остальных стилях округляется до ближайшего из палитры
Windows.

У канвы имеется свойство PenPos. Это свойство определяет в координатах
канвы текущую позицию пера. Перемещение пера без прорисовки линии, т.е. из-
менение PenPos, производится методом канвы MoveTo(X,Y). Здесь (X,Y) — коор-
динаты точки, в которую перемещается перо. Эта текущая точка становится ис-
ходной, от которой методом LineTo(X,Y) можно провести линию в точку с коорди-
натами (X,Y). При этом текущая точка перемещается в конечную точку линии и
новый вызов LineTo будет проводить точку из этой новой текущей точки.

Давайте попробуем нарисовать пером график синуса из предыдущего примера.
Откройте прежний проект, добавьте на него еще один компонент Image и размес-
тите компоненты так, как показано выше на рис. 5.7. Размеры обоих компонентов
Image должны быть абсолютно одинаковы, так как на этом для экономии размера
кода и вашего труда основана программа, которую мы напишем. Сделать размеры
компонентов абсолютно одинаковыми легко, выделив их оба и воспользовавшись
командой всплывающего меню Size.

Затем в уже написанном вами обработчике щелчка на кнопке добавьте перед
началом цикла оператор

Image2->Canvas->MoveTo(0,Image2->Height / 2);

который переводит перо в начало координат второго графика — на левый край
канвы в середину ее высоты. А в конце цикла добавьте оператор

Image2->Canvas->LineTo(PX,PY) ;

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

#define Pi 3.14159

float X,Y;         // координаты функции
int PX,PY;         // координаты пикселей
Image2->Canvas->MoveTo(0,Image2->Height / 2);

for (PX = 0; PX <= Imagel->Width; PX++)

{

//X — координата, соответствующая пикселю с координатой PX
X = рх * 4 * Pi / Imagel->Width;

Y = sin(X) ;

//PY — координата пикселя, 'соответствующая координате Y
PY = Imagel->Height - (Y+1) * Ima-gel->Height / 2;

//Устанавливается черный цвет выбранного пикселя
Imagel->Canvas->Pixels[PX][PY] = clBlack;

//Проводится линия на втором графике
Image2->Canvas->LineTo(PX,PY) ;

1

Для экономии кода мы воспользовались тем, что оба графика у нас абсолютно
одинакового размера и, следовательно, пересчет координат достаточно провести