Здравствуйте! Рисую стрелку этим кодом
Код:
procedure arrow(nachalo,konec:tpoint);
var
B, deltaX, deltaY: Extended;
begin
Image1.Canvas.PenPos := nachalo;// nachalo - координаты начала стрелки
Image1.Canvas.LineTo(konec.x, konec.y);
if nachalo.x <> konec.x then // проверка деление на ноль
begin
if (nachalo.X > konec.X) then
B := DegToRad(135) - ArcTan((nachalo.Y - konec.Y) / (nachalo.X - konec.X))
else
B := DegToRad(45) - ArcTan((nachalo.Y - konec.Y) / (nachalo.X - konec.X)); // наконечник стрелки под углом 45
deltaX := 10 * Cos(B); // длина стрелки
deltaY := 10 * Sin(B);
if (nachalo.X > konec.X) then
begin
Image1.Canvas.PenPos := Point(konec.X, konec.Y);
Image1.Canvas.LineTo(konec.X - Trunc(deltaX), konec.Y + Trunc(deltaY));
Image1.Canvas.PenPos := Point(konec.X, konec.Y);
Image1.Canvas.LineTo(konec.X + Trunc(deltaY), konec.Y + Trunc(deltaX));
end
else
begin
Image1.Canvas.moveto(konec.X, konec.Y);
Image1.Canvas.LineTo(konec.X - Trunc(deltaX), konec.Y + Trunc(deltaY));
Image1.Canvas.PenPos := Point(konec.X, konec.Y);
Image1.Canvas.LineTo(konec.X - Trunc(deltaY), konec.Y - Trunc(deltaX));
end;
end;
все отлично рисуется, но мне требуется чтобы наконечник стрелки был не в коцне линии, а на 20 пикселей раньше. Подправлял и там и сям, не помогло. Подскажите, как это сделать? Что подправить в коде?