为了画条直线我年前忙到年后!

解决方案 »

  1.   

    demos\doc\graphex
    写得很清楚,自己看吧。
      

  2.   

    type
    form1..
    private
    OldP,NewP:TPoint;
    Down:Boolean;
    ....
    procedure Form1.OnCreate(sender:TOBject);
    begin
     down:=false;
    end;
    ...
    procedure Form1.OnMouseDown(...);
    begin
      Down:=true;
      OldP:=POint(X,Y);
    NewP:=OldP;
    end;
    PROCEDURE Form1.OnMouseMove();
    begin
     NewP:=Point(x,y);
     if (NewP.x=OldP.x)and(NewP.y=OldP.y) then exit;
     if Not Down then exit;
      with Form1.Canvas do begin
       Pen.Mode:=pm_Not;//设置画笔模式为反,具体取值看帮助;忘记了:)
       MoveTo(OldP);
       LineTo(NewP);// 插曲旧线
       Pen.Mode:=pm_not;
       MoveTo(OldP);
       LineTo(NewP);//新线
      end;end;
    procedure Form1.OnMouseUp();
    begin
     Down:=false;
     NewP:=Point(X,Y);
     with form1.canvas do begin
      pen.color:=Your Line Color;
      MoveTo(OldP);
      LIneTo(NewP);
     end;
    end;//that's all;
      

  3.   

    那个例子很简单,
     拖动过程关键在 FormMouseMove 的 DrawShape 里的 Pen.Mode := AMode;
     DrawShape里用的是 pmNotXor(异或非),
     然后 FormMouseUp 用的是 pmCopy(原样)。
      

  4.   

    http://www.efile.com.cn/?liumazi
    我做好了,在上面连接下载代码