怎么拖动在image上用canvas画出来的图?(50分)

  • 主题发起人 rocky_cao
  • 开始时间
R

rocky_cao

Unregistered / Unconfirmed
GUEST, unregistred user!
我利用canvas在image上画出了一些图形,现在我要对其中的某幅图进行拖动,我应该怎么做?
这个问题有三方面的问题要解决:
1,怎样获得我已画出图形的焦点?也就是如何判断我要拖动的是哪一幅图。
2,如何删掉原来的图形?
3,如何根据鼠标拖动以后的位置画出新的图形?
 
1.最好用矢量图形,比较鼠标焦点和图形的位置关系
polygon可以用ptinregion函数,或者自己写函数判断
2.可以删除后重画其他所有裁剪区内的图元对象,实时要求很高的话采用异或画笔
3.move事件里记载鼠标移动前后的位置,然后采用异或画笔重画,可以参考delphi5的demo程序
Delphi5/Demos/Doc/Graphex
PS:所有图元的绘图最好在onpaint事件里做,不然.........................
 
怎么搞的,问题怎么弄到linux下了???
bornkilled,你好!谢谢你能回答我的问题。
如果我自己写判断函数的话,怎么样写?是否这样?
首先:用一个数组记录下我画过的图的坐标
然后:确定一幅图的坐标范围,当鼠标移动到这个范围时,既可以拖动。当鼠标按下时,删除掉
原来的图,当鼠标放开时,确定当前鼠标的坐标,开始重画。
是否可行???
 
我不知道你需要的图是否是矢量图
我是做GIS的,只会作矢量图
看样子你的图形可以用polygon来描述
需要判定点在区域内的话可以用api函数CreatePolygonRgn创建一个区域
然后用PtInRegion来判定点是否在区域内
polyong的点都是存放在数组内的
但是CreatePolygonRgn有限制(坐标点的大小不能超过32768)
自己做函数的话可以仿造api的判定算法:
即由当前点向水平右方向作一条射线,如果和各条边相交(不包含顶点)的交点是奇数,则表明
在polygon内,这个算法通用性比较好,自交多边形和内包含多边形都能判定
那个移动画图么可以这样
图元的拖动可以这样鼠标移动时(onmove事件)先擦除选中的图元,再重画在新的位置
注意,只用异或擦除原来的图元就行了,不要把别的图元重画,不然太慢了

 
对了
你最好用paintbow来画图
image是自动重画的,没有onpaint事件
 
我还奇怪我先回答了这个问题怎么答案不见了?原来rocky_cao你又开了一个同样的帖子。
 
谢谢bornkilled!先给你30分,如果可行的话,再将剩下的给你!
 
不好意思,我第一次来这个论坛!原来给分不能分步给的,呵呵!
那我就把所有的分给你好了!
我是一个新手,接触delphi不久。关于delphi的图形编程不是很了解,
你说的那个CreatePolygonRgn和PtInRegion,我找了半天没找着,能不能帮人帮到底,
告诉我到底怎么用好吗?小弟我这里先行谢过了!!!
 
这两个函数是api函数
参见delphi win32 help
 
顶部