CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  API

高分求救,vb画斜线,画完之后能够用鼠标选中。

楼主dalilei(chc)2006-07-01 22:29:20 在 VB / API 提问

我要做一个自定义工作流的程序。  
  有用户通过界面进行自定义流程和活动。  
  用户动态添加活动很容易实现。现在要把这些活动(也就是方框)用线连起来。  
  现在问题是如何画线,画完之后能如何用鼠标选择。  
  主要是因为有好多线,有些线会有很多节点。  
  问题点数:100、回复次数:12Top

1 楼TechnoFantasy((VB MVP)www.applevb.com)回复于 2006-07-01 22:45:48 得分 5

比较简单点的你可以用VB中的Line控件。Top

2 楼zfl2k(风)回复于 2006-07-01 22:48:59 得分 5

要把每条线的起始坐标都保存起来,鼠标选中后通过判断是否在两点间的线上,如果是就选中Top

3 楼Modest(塞北雪貂)·(偶最欣赏楼主的分)回复于 2006-07-01 22:58:43 得分 5

用Line控件Top

4 楼dalilei(chc)回复于 2006-07-01 22:59:46 得分 0

用Line控件是不好解决的。  
  每条线的坐标是肯定要保存到数据库的。  
  两个方框中间的一条线会有很多线段组成的。  
  不知道有没有好的解决方法。  
  不知道又没有能够获得鼠标事件的vb画线控件。Top

5 楼fishmans(金脚指)回复于 2006-07-01 23:04:32 得分 15

通过线的两头的坐标,可以算出斜率,再通过点击的点可以算出是否在这条线上,如果是,在mousemove事件中平移重画这条线,如果这线与别的线或框有交叉,重画所有有交叉的线或框Top

6 楼dalilei(chc)回复于 2006-07-01 23:19:03 得分 0

我也想过用斜率,但也有斜率相等的线。如果斜率相等的话,再根据坐标判断在哪条线上。  
  这也是目前我想到的办法。我正在找有没有好点的方法。实际上每个线的末尾还要加上箭头的。  
  Top

7 楼YaDa()回复于 2006-07-01 23:53:35 得分 60

不知道楼主孰不熟悉AutoCAD软件,可以模仿它的方式。  
          “两个方框中间的一条线会有很多线段组成的。”是不是指折线?可以将整个折线定义为一个对象。反正你保存的是对象,不管他是直线,线段,折线,方框……,都是对象。  
          选择对象用鼠标指针的位置来判断,可以先计算是不是在线段的端点之外,再计算与线段的距离,看是不是足够接近。在图片框的鼠标移动事件里对每个线段都扫描一次。若捕获到了则……  
  Top

8 楼fishmans(金脚指)回复于 2006-07-02 13:00:40 得分 0

嗯,没考虑到有重叠的情况,用对象应该是可行了Top

9 楼woos()回复于 2006-07-02 13:37:29 得分 5

用控件数组啊,  
  画的时候用可以用画图的方法画出来给用户看,然后用获得的数据load一个line控件.Top

10 楼sequh(夏克)回复于 2006-07-02 16:27:39 得分 5

自己做个Line控件,可以感应拖拉事件  
   
   
  或者不管什么线不线的,就是画图,在鼠标拖拉的时候再判断是否落在线上。这也可以做个控件Top

11 楼dalilei(chc)回复于 2006-07-02 18:11:39 得分 0

实际上要实现的效果就类似用Visio画流程图。  
  我也想做个自定义的Line控件,但如何让这个控件能够斜着放,无从下手阿。  
  要是只画出来,很简单的。  
  麻烦的是画出来后要能够选定进行修改。  
  明天研究一下api的绘图函数,看有没有好点的方法。  
   
  我要保存到数据路里面,保存的是坐标点。方框可以用Label控件数组实现的。  
  我没用过autocad。Top

12 楼YaDa()回复于 2006-07-02 20:31:07 得分 0

线段还是用Line控件数组最合适,可以动态生成和删除,比直接在图片框里画要好(直接在图片框里画,为了删除,要用NotXor笔,而这就与背景有关了,容易出现带色的线条,不好看)。  
          选定可以用鼠标点击或画框实现,由于图片框的鼠标事件里会传回XY的坐标,所以可以判断出选中的是那个线段。只要将选中的线段变一下颜色,就可以反馈给用户了。  
          修改,如果比较复杂的,可以用右键提供选项甚至提供一个对话框。由于是Line控件,修改应该是很方便的。  
          api的绘图函数对于你的要求实际上没什么用,要高速绘图倒是不错。  
          最后说一下:根据你程序的要求,采用鼠标事件里XY的坐标及保存的线段数据来判断(而且修改后又要保存),是能够实现的,只是比较繁。Top

相关问题

关键词

得分解答快速导航

  • 帖主:dalilei
  • TechnoFantasy
  • zfl2k
  • Modest
  • fishmans
  • YaDa
  • woos
  • sequh

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo