在实现线条的选中和移动——移动是采用在OnMouseMove事件中反复重画的方法并且pen.mode:=pmNotXor——中出现一个问题,就是在拖动线条的时候,如果两个直线相交,在拖动中,被拖动的那个直线会把与其相交的直线“刮”处很多断点,看起来这个直线就好像被割裂了一样。我认为是在拖动的时候,重画了两直线之间的相交点的颜色,但是继续拖动的话,先前被改变的那个相交点却没有恢复,导致了这些点看起来就跟被断开了一样,不知道诸位有什么办法解决?
还有如果能实现图层的话,这些直线就能互不干扰了,但是应该怎么实现呢?

解决方案 »

  1.   

    从Graphics::TBitmap动态生成2个对象,属性也付与一样,进行图层,当然只是建议。
    要不就是判断直线的象素点,,如果碰到直线的象素点,就取消xor操作。
      

  2.   

    我也碰到过类似问题,托动直线时用Pen.Mode := pmXor;清除原来直线,
    再Pen.Mode := pmCopy;重画有交叉直线。
      

  3.   

    我一开始用的是pen.mode:=pmnotxor,如果要清除原来直线的话,也要用pmNotXor吧?还有就是怎么判断直线交叉呢?
      

  4.   

    定义mx,my全局变量在move里先用两次pen.mode:=pmnotxor
    第一次mylineto(mx,my,pmnotxor)
      mx := x; 
      my := y;
    二次 mylineto(mx,my,pmnotxor)在up里用一次pen.mode:=pmcopy
     mylineto(mx,my,pmcopy)
    我做的画线没你说的问题
      

  5.   

    to xiaoxiao197821(你的笑对我很重要) :哦,这个样子,我只是在mousemove中两次pmNotxor,那我试试看在up中pmcopy,谢谢!有结果再请指点!