Показать сообщение отдельно
  #1  
Старый 17.02.2014, 01:28
nano_bot nano_bot вне форума
Новичок
 
Регистрация: 05.05.2013
Сообщения: 62
Версия Delphi: Delphi 7
Репутация: 10
Восклицание Как нарисовать стрелку с наконечником не на конце?

Здравствуйте! Рисую стрелку этим кодом
Код:
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 пикселей раньше. Подправлял и там и сям, не помогло. Подскажите, как это сделать? Что подправить в коде?
Изображения
Тип файла: jpg стрелка.jpg (4.2 Кбайт, 18 просмотров)
Ответить с цитированием