怎样让一条线跟着鼠标动 (lineto 会出一堆线)(10分)

  • 主题发起人 主题发起人 paulcross
  • 开始时间 开始时间
P

paulcross

Unregistered / Unconfirmed
GUEST, unregistred user!
我做画图程序的时候 画折线的时候 怎么在鼠标没按下的时候 线头跟着鼠标走 按下后才确定这点 我用moveto 到前一点后Lineto到鼠标现在的位置 是可以跟着走 可是怎么每下移动都画了一条线阿 出来一堆线 怎么办呢

这是代码部分
var
Form1: TForm1;
a,b:integer;
implementation

{$R *.dfm}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
canvas.Pen.Color:=clred;
//canvas.Pen.Width:=3;
canvas.Brush.Color:=clblack;
canvas.FillRect(Rect(x-3,y+3,x+3,y-3));
a:=x;
b:=y;

end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin

canvas.lineto(x,y);

end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
canvas.MoveTo(a,b);
canvas.LineTo(x,y);
end;


end.
 
这个原理很简单:
你鼠标移动的时候,ONMOVE就开始画线,画线的style变了,xor异或运算方式,这样移动一下,擦除一次,这就是图形软件的的原理之一。
具体pen.mode..
TPenStyle = (psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear,
psInsideFrame);
TPenMode = (pmBlack, pmWhite, pmNop, pmNot, pmCopy, pmNotCopy,
pmMergePenNot, pmMaskPenNot, pmMergeNotPen, pmMaskNotPen, pmMerge,
pmNotMerge, pmMask, pmNotMask, pmXor, pmNotXor);
 
C:/Program Files/Borland/Delphi7/Demos/Doc/Graphex
 
呵呵 明白了 作3个点就可以了 楼上都是正解 谢谢 下面是改过的代码 方便后来者
var
Form1: TForm1;
a,b,c,d:integer;
implementation

{$R *.dfm}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin



canvas.Brush.Color:=clblack;


canvas.FillRect(Rect(x-3,y+3,x+3,y-3));
a:=x;
b:=y;

end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin

canvas.lineto(x,y);
ReleaseCapture;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin

canvas.Pen.Mode:=pmNOtXor;
canvas.MoveTo(a,b);
canvas.LineTo(c,d);
c:=x;
d:=y;

canvas.MoveTo(a,b);
canvas.LineTo(c,d);


end;



end.
 
作下记号,学习啊。
 
后退
顶部