unit   Unit1;interfaceusesWindows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,Dialogs;constPenwidth   =   1;//画笔的粗细Len   =   20;//箭头线的长度{说明:这两个常量应该一起变化,具体值由效果来定。当Penwidth很小时,显示的效果不是太好}typeTForm1   =   class(TForm)procedure   FormMouseUp(Sender:   TObject;   Button:   TMouseButton;Shift:   TShiftState;   X,   Y:   Integer);procedure   FormMouseDown(Sender:   TObject;   Button:   TMouseButton;Shift:   TShiftState;   X,   Y:   Integer);procedure   FormMouseMove(Sender:   TObject;   Shift:   TShiftState;   X,Y:   Integer);procedure   FormShow(Sender:   TObject);procedure   FormCreate(Sender:   TObject);private{   Private   declarations   }public{   Public   declarations   }end;varForm1:   TForm1;xs,   ys:   integer;//画线开始处的坐标xt,   yt:   integer;//记录鼠标前一时刻的坐标xl,   yl:   integer;//记录第一条箭头线的端点坐标xr,   yr:   integer;//记录第二条箭头线的端点坐标B:   boolean;//判断是否已经开始画线implementation{$R   *.dfm}procedure   TForm1.FormMouseUp(Sender:   TObject;   Button:   TMouseButton;Shift:   TShiftState;   X,   Y:   Integer);
begin{画线结尾时,将线重新填充一遍,以免有部分空白}if   not   ((x   =   xs)   and   (y   =   ys))   thenbeginForm1.Canvas.Pen.Mode   :=   pmCopy;Form1.Canvas.Pen.Color   :=   clRed;Form1.Canvas.Pen.Width   :=   PenWidth;Form1.Canvas.MoveTo(xs,   ys);Form1.Canvas.LineTo(x,   y);Form1.Canvas.MoveTo(x,   y);Form1.Canvas.LineTo(xl,   yl);Form1.Canvas.MoveTo(x,   y);Form1.Canvas.LineTo(xr,   yr);end;B   :=   False;
end;procedure   TForm1.FormMouseDown(Sender:   TObject;   Button:   TMouseButton;Shift:   TShiftState;   X,   Y:   Integer);
beginxs   :=   x;ys   :=   y;xt   :=   x;yt   :=   y;xl   :=   -1;yl   :=   -1;xr   :=   -1;yr   :=   -1;B   :=   True;
end;procedure   TForm1.FormMouseMove(Sender:   TObject;   Shift:   TShiftState;   X,Y:   Integer);
beginif   B   thenbeginForm1.Canvas.Pen.Mode   :=   pmNotXor;Form1.Canvas.Pen.Color   :=   clRed;Form1.Canvas.Pen.Width   :=   PenWidth;//绘旧线Form1.Canvas.MoveTo(xs,   ys);Form1.Canvas.LineTo(xt,   yt);//绘新线Form1.Canvas.MoveTo(xs,   ys);Form1.Canvas.LineTo(x,   y);if   xl   <>   -1   thenbeginForm1.Canvas.MoveTo(xt,   yt);Form1.Canvas.LineTo(xl,   yl);Form1.Canvas.MoveTo(xt,   yt);Form1.Canvas.LineTo(xr,   yr);Form1.Canvas.MoveTo(xl,   yl);Form1.Canvas.LineTo(xr,   yr);end;//记录下原坐标xt   :=   x;yt   :=   y;if   x   >   xs   thenbeginxl   :=   trunc(x   -   Len   *   Cos(ArcTan((y   -   ys)   /   (x   -   xs))   -   Pi   /   6));yl   :=   trunc(y   -   Len   *   Sin(ArcTan((y   -   ys)   /   (x   -   xs))   -   Pi   /   6));xr   :=   trunc(x   -   Len   *   Cos(ArcTan((y   -   ys)   /   (x   -   xs))   +   Pi   /   6));yr   :=   trunc(y   -   Len   *   Sin(ArcTan((y   -   ys)   /   (x   -   xs))   +   Pi   /   6));endelseif   x   <   xs   thenbeginxl   :=   trunc(x   +   Len   *   Cos(ArcTan((y   -   ys)   /   (x   -   xs))   -   Pi   /   6));yl   :=   trunc(y   +   Len   *   Sin(ArcTan((y   -   ys)   /   (x   -   xs))   -   Pi   /   6));xr   :=   trunc(x   +   Len   *   Cos(ArcTan((y   -   ys)   /   (x   -   xs))   +   Pi   /   6));yr   :=   trunc(y   +   Len   *   Sin(ArcTan((y   -   ys)   /   (x   -   xs))   +   Pi   /   6));endelseif   y   <   ys   thenbeginxl   :=   trunc(x   -   Len   *   Sin(Pi   /   6));yl   :=   trunc(y   +   Len   *   Cos(Pi   /   6));xr   :=   trunc(x   +   Len   *   Sin(Pi   /   6));yr   :=   trunc(y   +   Len   *   Cos(Pi   /   6));endelseif   y   >   ys   thenbeginxl   :=   trunc(x   -   Len   *   Sin(Pi   /   6));yl   :=   trunc(y   -   Len   *   Cos(Pi   /   6));xr   :=   trunc(x   +   Len   *   Sin(Pi   /   6));yr   :=   trunc(y   -   Len   *   Cos(Pi   /   6));endelsebeginxl   :=   -1;yl   :=   -1;xr   :=   -1;yr   :=   -1;end;if   xl   <>   -1   thenbeginForm1.Canvas.MoveTo(x,   y);Form1.Canvas.LineTo(xl,   yl);Form1.Canvas.MoveTo(x,   y);Form1.Canvas.LineTo(xr,   yr);Form1.Canvas.MoveTo(xl,   yl);Form1.Canvas.LineTo(xr,   yr);end;end;
end;procedure   TForm1.FormShow(Sender:   TObject);
beginForm1.Color   :=   clWhite;Form1.Caption   :=   '画带箭头的直线 ';Form1.WindowState   :=   wsMaximized;B   :=   False;xt   :=   -1;yt   :=   -1;xl   :=   -1;yl   :=   -1;xr   :=   -1;yr   :=   -1;
end;procedure   TForm1.FormCreate(Sender:   TObject);
beginForm1.BorderIcons   :=   [biSystemMenu];
end;end.

转载于:https://www.cnblogs.com/jxsoft/archive/2011/12/12/2284937.html

delphi 画 带箭头的线相关推荐

  1. 前端HTML渲染带箭头的线

    前端渲染带箭头的线 1. 效果图 2. 实现方法 参考 1. 效果图 mapbox-gl渲染效果图如下: minedatamap 效果图如下: 2. 实现方法 mapbox-gl minedatama ...

  2. html5画直线箭头,HTML5 canvas画带箭头的虚线

    今天给大家讲解的是在HTML5 canvas画带箭头的虚线.关于Canvas 对象表示一个 HTML 画布元素 -.它没有自己的行为,但是定义了一个 API 支持脚本化客户端绘图操作. 本案例注意事项 ...

  3. 【MFC】如何画带箭头的直线

    [MFC]如何画带箭头的直线 前言 代码 获得箭头坐标 前言 如何绘制带箭头的直线,说来也简单,只需要算出箭头左右两边的坐标,再使用LineTo()函数即可.话不多说上代码. 代码 获得箭头坐标 已知 ...

  4. Echarts绘制带箭头的线

    Echarts绘制带箭头的线 这个图主要参考echarts官网的关系图绘制的,难点在于去掉其余导向图的箭头,只保留最后一个节点的箭头,以及处理值为null时箭头的指向问题,代码如下: <temp ...

  5. matlab中画带箭头向量,几何画板中如何画带箭头的向量

    在学习了向量的相关知识后,我们都知道几何向量(也称为欧几里得向量,通常简称向量.矢量),指具有大小和方向的量.那么几何画板做为最专业的几何绘图工具,也可以用来绘制向量.如果你还不知道怎么在几何画板中画 ...

  6. CAD里面怎么画带箭头的直线

    转自:http://jingyan.baidu.com/article/9113f81b0192e72b3214c709.html?st=2&os=0&bd_page_type=1&a ...

  7. Matlab画带箭头的图

    clear; close all; clc n=10;%点的个数 x=5.*rand(n,2);%随机生成点 scatter(x(:,1),x(:,2),'filled'); for i=2:n dr ...

  8. 关于google地图api3的离线和在线开发(画带箭头的直线,指定范围,搜索,计算距离)

    最近因为开发的需要,要做一个离线的google地图.并且能够加载google地图的一些特效.例如:地图的标记,计算距离,获取标记的经纬度,画带有箭头的直线,获取指定范围的数据等等.在这里我总结了很多开 ...

  9. 高德地图画带箭头的线_模具装配图画成这样,那才真的叫标准!

    模具装配图最主要的目的是要反映模具的基本构造,表达零件之间的相互装配关系,包括位置关系和配合关系. 从这个目的出发,一张模具装配图所必须达到的最基本要求为: 首先,模具装配图中各个零件(或部件)不能遗 ...

最新文章

  1. php excel中文名称乱码,phpexcel导出中文文件名乱码的解决办法
  2. ITK:运算后的当前图像
  3. ORA-01810: 格式代码出现两次
  4. mysql和oracle转换_转MySql 与Oracle区别
  5. 7.6 T1 深度优先搜索(dfs)
  6. c语言从源代码到可执行,从源代码到可执行文件
  7. POJ 3254 Corn Fields (状态压缩)
  8. ARC和MRC混合使用
  9. Atitit 防注入 sql参数编码法 目录 1.2. 提升可读性pg_escape_literal — 转义文字以插入文本字段 1 1.2.1. 说明 1 1.3. 推荐pg_escape_str
  10. 密码学09(SM3算法)
  11. 网络摄像机如何安装拾音器?进行同步录音
  12. Foxmail是否可以隐藏文件夹?【网易企业邮箱申请】
  13. 400. 第 N 位数字【我亦无他唯手熟尔】
  14. HyperGBM之元学习器(meta_learner)
  15. oracle10g 管理共享服务器
  16. 机械键盘的“轴”有什么区别?
  17. 【题解】【AcWing】3426. 糖果分享游戏
  18. STM32CubeMX生成工程失败
  19. 汇编c 易语言编程软件,这些汇编用易语言怎么写?
  20. 设计模式简单代码之Command模式(皇帝圣旨篇)

热门文章

  1. 重写、重载方法的调用
  2. 在wine里安装了IE6
  3. 「LibreOJ Round #6」花火
  4. 深入解析PHP中逗号与点号的区别
  5. Gradle修改缓存路径 和 Gradle修改Maven仓库地址
  6. python学习笔记5—数据类型转换
  7. 让人深思......
  8. 认识flex中的sprite
  9. 绝非偶然 苹果iPhone领先5年背后的迷思 【推荐】
  10. 我的20天项目经历--至今令我难忘的技术难题