转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
如何在delphi 中画带箭头的直线(改自网上一位论坛版主的vb代码)         ★★★★

如何在delphi 中画带箭头的直线(改自网上一位论坛版主的vb代码)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1466 更新时间:2009/4/23 18:28:20

procedure TLineItem.Draw(aCanvas: TCanvas);

var

  Xa, Ya, Xb, Yb: real;

  D: real;

  X1, Y1, X0, Y0: Integer;

begin

  aCanvas.Pen.Style := PsSolid;

  aCanvas.Pen.Color := clWhite;

//画直线

  aCanvas.MoveTo(PtStart.X, PtStart.Y);

  aCanvas.LineTo(PtEnd.X, PtEnd.Y);

  //画箭头

  X0 := PtStart.X;//PtStart是箭头的起点,PtEnd是终点,都是Tpoint型

  Y0 := PtStart.Y;

  X1 := PtEnd.X;

  Y1 := PtEnd.Y;

  D := Sqrt((Y1 - Y0) * (Y1 - Y0) + (X1 - X0) * (X1 - X0));

  if D > 0 then begin

    Xa := X1 + ARROWLEN * ((X0 - X1) + (Y0 - Y1) / 2) / D;

    Ya := Y1 + ARROWLEN * ((Y0 - Y1) - (X0 - X1) / 2) / D;

    Xb := X1 + ARROWLEN * ((X0 - X1) - (Y0 - Y1) / 2) / D;

    Yb := Y1 + ARROWLEN * ((Y0 - Y1) + (X0 - X1) / 2) / D;

    aCanvas.MoveTo(PtEnd.X, PtEnd.Y);

    aCanvas.LineTo(Trunc(Xa), Trunc(Ya));

    aCanvas.MoveTo(PtEnd.X, PtEnd.Y);

    aCanvas.LineTo(Trunc(Xb), Trunc(Yb));

  end;

//如果选中画出焦点矩形,可以不要

  if FSelected = true then begin

    aCanvas.Rectangle((PtStart.X - FORCUSRANGE),

      (PtStart.Y - FORCUSRANGE),

      (PtStart.X + FORCUSRANGE),

      (PtStart.Y + FORCUSRANGE));

    aCanvas.Rectangle((PtEnd.X - FORCUSRANGE),

      (PtEnd.Y - FORCUSRANGE),

      (PtEnd.X + FORCUSRANGE),

      (PtEnd.Y + FORCUSRANGE));

  end;

end;

 

canvas是任何一个拥有画笔的组件的canvas都可以。具体几何依据原作者没有讲。但是经过底下验算。有三个特点。

1.       箭头两翼端点连线和直线垂直(斜率之积等于-1)。

2.       .箭头两翼长度相同。(等腰三角形)

3.       箭头两翼长度和两翼端点间的距离比值一定。(决定了夹角)

 


[系统软件]如何在Linux系统上进行快速磁带备份  [C语言系列]如何在Jbuilder9中使用SQLServer JDBC驱动
[VB.NET程序]如何在Visual Basic 6.0 中连接加密的Access数据库  [VB.NET程序]如何在vb 中用api函数代替winsock控件建立网络连接…
[Delphi程序]如何在delphi6中调试web程序  [Delphi程序]如何在Delphi中用代码来完成计算字段的创建
[Delphi程序]如何在 Listbox 上显示 In-place Tooltips  [Delphi程序]如何在Delphi应用程序中调用CHM文档
[Delphi程序]如何在Delphi中使用正则表达式  [Delphi程序]如何在delphi下和.net建立的webservice 进行协同工…
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台