Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2009, 15:56   #1
studentOne
Пользователь
 
Регистрация: 09.10.2009
Сообщений: 15
Вопрос нарисовать стрелку на делфи

помогите пожалуйста!!! как можно нарисовать в делфи стрелку в канвасе??? нужно вывести граф и связи обозначить стретками, в с ними то вся и проблема
studentOne вне форума Ответить с цитированием
Старый 16.11.2009, 16:26   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Код:
Canvas.LineTo(X,Y);
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 16.11.2009, 18:00   #3
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Код не мой, где взял не помню, использую в своих проектах.
Код:
procedure DrawArrowHead(Canvas: TCanvas; X,Y: Integer; Angle,LW: Extended);
var
  A1,A2: Extended;
  Arrow: array[0..3] of TPoint;
  OldWidth: Integer;
const
  Beta=0.322;
  LineLen=4.74;
  CentLen=3;
begin
  Angle:=Pi+Angle;
  Arrow[0]:=Point(X,Y);
  A1:=Angle-Beta;
  A2:=Angle+Beta;
  Arrow[1]:=Point(X+Round(LineLen*LW*Cos(A1)),Y-Round(LineLen*LW*Sin(A1)));
  Arrow[2]:=Point(X+Round(CentLen*LW*Cos(Angle)),Y-Round(CentLen*LW*Sin(Angle)));
  Arrow[3]:=Point(X+Round(LineLen*LW*Cos(A2)),Y-Round(LineLen*LW*Sin(A2)));
  OldWidth:=Canvas.Pen.Width;
  Canvas.Pen.Width:=1;
  Canvas.Polygon(Arrow);
  Canvas.Pen.Width:=OldWidth
end;

procedure DrawArrow(Canvas: TCanvas; X1,Y1,X2,Y2: Integer; LW: Extended);
var
  Angle: Extended;
begin
  Angle:=ArcTan2(Y1-Y2,X2-X1);
  Canvas.MoveTo(X1,Y1);
  Canvas.LineTo(X2-Round(2*LW*Cos(Angle)),Y2+Round(2*LW*Sin(Angle)));
  DrawArrowHead(Canvas,X2,Y2,Angle,LW);
end;
Вызываем процедуру так:
Код:
Form1.Canvas.Pen.Color:=clBlack;
Form1.Canvas.Pen.Width:=2;
Form1.Canvas.Brush.Color:=clBlack;
DrawArrow(Form1.Canvas,10,200,300,200,4);
_Dmitry вне форума Ответить с цитированием
Старый 16.11.2009, 20:34   #4
studentOne
Пользователь
 
Регистрация: 09.10.2009
Сообщений: 15
По умолчанию

ругается на строчку:
Цитата:
Angle:=ArcTan2(Y1-Y2,X2-X1);
и еще напишите пожалуйста, что означают переменные
Цитата:
Angle,LW: Extended
, если честно, не совсем понятно...
studentOne вне форума Ответить с цитированием
Старый 16.11.2009, 20:35   #5
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Цитата:
ругается на строчку
модуль math подключите
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 17.11.2009, 06:29   #6
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Цитата:
Angle,LW: Extended
Angle - угол, в радианах, под которым рисуется стрелка;
LW - размер стрелки.
_Dmitry вне форума Ответить с цитированием
Старый 17.11.2009, 07:28   #7
studentOne
Пользователь
 
Регистрация: 09.10.2009
Сообщений: 15
По умолчанию

а можно сделать как нибуть так, чтобы на вход подавались начальные координаты и конечные, потому что у меня известно, где аходятся элементы, которые нужно соединить стрелками...???
studentOne вне форума Ответить с цитированием
Старый 17.11.2009, 07:36   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Можно. Чеж нельзя...
Но для этого думаю нужно переводить в полярные координаты, чтоб рисовать ответвления стрелки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как нарисовать стрелку из одной ячейки в другую Stoodentka Microsoft Office Excel 4 27.02.2013 17:11
Графика в Делфи. Как нарисовать строфоиду? stscolt Помощь студентам 3 07.09.2009 10:12
Как нарисовать стрелку ? C++ zfoxx Общие вопросы C/C++ 0 10.05.2009 17:20
плз помогите нарисовать в делфи... sp.caster Общие вопросы Delphi 5 30.01.2009 20:51
как нарисовать, начертить график в делфи Bigtyoma Общие вопросы Delphi 10 05.01.2009 19:28