请问怎样在Image中画一条箭头直线啊的

paulzsf 2003-10-20 01:41:02
请问怎样在Image中画一条箭头直线啊的
通过点击两下鼠标,一个始点,一个终点,
谢谢!!!!
...全文
128 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kabin 2003-10-21
  • 打赏
  • 举报
回复
TPoint Arrow1[4];
Arrow1[0]= Point(80,105);
Arrow1[1]= Point(106,66);
Arrow1[2]= Point(80,87);
Arrow1[3]= Point(94,98);

Image1->Canvas->Pen->Color = clBlue;
Image1->Canvas->Pen->Width = 1;
Image1->Canvas->MoveTo(Arrow1[0].x,Arrow1[0].y);
Image1->Canvas->LineTo(Arrow1[1].x,Arrow1[1].y);
Image1->Canvas->MoveTo(Arrow1[0].x,Arrow1[0].y);
Image1->Canvas->LineTo(Arrow1[2].x,Arrow1[2].y);
Image1->Canvas->MoveTo(Arrow1[0].x,Arrow1[0].y);
Image1->Canvas->LineTo(Arrow1[3].x,Arrow1[3].y);
weibz0525 2003-10-21
  • 打赏
  • 举报
回复
如果是斜线呢?
计算肯定不会这么简单
sprewellkobe 2003-10-20
  • 打赏
  • 举报
回复
计算好箭头的坐标,照着画就完了

其实最好的方法是找一个箭头的照片,然后CopyRect
yjy1001 2003-10-20
  • 打赏
  • 举报
回复
CCLIS(www.cclis.com) 解答得很好 了
tigerhohoo 2003-10-20
  • 打赏
  • 举报
回复
箭头必须自己来画了没有什么技巧.
chenpeng20000 2003-10-20
  • 打赏
  • 举报
回复
可以这样:
设一个全局变量
int i=0;
然后在
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{}中写

i=i+1;
if(i%2==1)
Image1->Canvas->MoveTo(X,Y);
else Image1->Canvas->LineTo(X,Y);

CCLIS 2003-10-20
  • 打赏
  • 举报
回复
如果始点的坐标为x1, y1, 终点的坐标为x2, y2
Image 中的图形的Canvas 为 Canvas, 可以如下来写

// 画直线
Canvas->MoveTo(x1, y1);
Canvas->LineTo(x2, y2);

// 假定箭头的长度为5个象素,要先计算另外两个点的坐标。

int x3, y3, x4, y4;
if(x1 == x2)//垂直线
{
x3 = x1 - 5;
x4 = x1 + 5;
if(y1 < y2)
y3 = y4 = y2 - 5;
else
if(y1 > y2)
y3 = y4 = y2 + 5;
else // 只是一个点。
return;
}

if(y1 == y2) // 水平线
{
y3 = y1 - 5;
y4 = y1 + 5;
if(x1 < x2)
x3 = x4 = x2 - 5;
else
if(x1 > x2)
x3 = x4 = x2 + 5;
else // 只是一点
return;
}

// 斜线的情况, 先计算出x3, y3, x4, y4

Canvas->LineTo(x3, y3);
Canvas->MoveTo(x2, y2);
Canvas->LineTo(x4, y4);

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧