суббота, 11 августа 2012 г.

7. Построение прямой при помощи Canvas (Ellipse,Text,Line) (Delphi)

Canvas это основа графической подсистемы Delphi.

Хотелось бы обратить ваше внимание на то что начало координат находится в левой верхней точке, а не в левой нижней как многие привыкли.

При помощи Canvas построим прямую.



Для начала кинем на форму кнопку (Button) и четыре Edit'a, для ввода координат начальной и конечной точки прямой(x1,y1,x2,y2).

В var пропишем
x1,x2,y1,y2:integer;

Два раза кликаем на кнопку и в процедуре пишем


X1:=strtoint(edit1.Text);
Y1:=strtoint(edit2.Text);
canvas.MoveTo(x1, y1);

Эта команда устанавливает положение "кисти" в координаты заданные в Edit1 и Edit2 и передаваться в переменные X1 и Y1 соответственно. Команда strtoint переводит строковую переменную в целое число.

Затем пишем

X2:=strtoint(edit3.Text);
Y2:=strtoint(edit4.Text);
canvas.LineTo(x2, y2);

Здесь мы указываем координаты конца линии. Они будут забираться из Edit3 и Edit4 и передаваться в переменные X2 и Y2 соответственно.



X1:=strtoint(edit1.Text);
Y1:=strtoint(edit2.Text);
canvas.MoveTo(x1, y1);
X2:=strtoint(edit3.Text);
Y2:=strtoint(edit4.Text);

canvas.LineTo(x2, y2);




Теперь при нажатии на кнопку строится линия. Давайте ещё добавим кружки и текст с координатами на концах линии.

Эллипсы в delphi задаются командой Canvas.Ellipse(x1,y1,x2,y2) . Здесь четыре координаты потому что эллипс вписывается в квадрат. Поэтому x1,y1 это координаты левого верхнего угла,  а x2,y2 правого нижнего .

Маленький пример для объяснения принципа построения эллипса 

Итак, теперь добавим кружки по концам линии.
Для первой точки
canvas.Ellipse(x1-5, y1-5,x1+5, y1+5);

Здесь мы берём координаты точек (x1, y1), и задаём что левый верхний угол, воображаемого квадрата в который будет вписываться окружность,  будет на 5 пикселей левее x1 и на 5 пикселей выше y1, а правый нижний на 5 пикселей правее x1 и на 5 пикселей ниже y1.

И для второй
canvas.Ellipse(x2-5, y2-5,x2+5, y2+5);

Текст пишется при помощи команды Canvas.Text(x, y, text). Как вы уже поняли х, у это координаты текста, а text это текст =) .

Пусть по Х текст будет совпадать с точкой начала или конца, а по У повыше пикселей на пять.

canvas.TextOut(X1,y1+5,inttostr(X1)+', '+inttostr(Y1));
canvas.TextOut(X2,y2+5,inttostr(X2)+', '+inttostr(Y2));



X1:=strtoint(edit1.Text);
Y1:=strtoint(edit2.Text);
X2:=strtoint(edit3.Text);
Y2:=strtoint(edit4.Text);
canvas.Pen.Width:=2;
form1.Refresh;
canvas.TextOut(X1,y1+5,inttostr(X1)+', '+inttostr(Y1));
canvas.TextOut(X2,y2+5,inttostr(X2)+', '+inttostr(Y2));
canvas.MoveTo(x1, y1);
canvas.Ellipse(x1-5, y1-5,x1+5, y1+5);
canvas.LineTo(x2, y2);
canvas.Ellipse(x2-5, y2-5,x2+5, y2+5);

Комментариев нет:

Отправить комментарий