图像异或问题???(100分)

  • 主题发起人 主题发起人 tangyan
  • 开始时间 开始时间
T

tangyan

Unregistered / Unconfirmed
GUEST, unregistred user!
我先在窗体上输出了一些文字,用鼠标点击是画线,当再次点击时异或掉前面的线
在划一新线,结果是我异或掉了前次的线,但我发觉文字上的部分点也别异或掉了
为什么?我错在那?鼠标点击事件的源码如下:
XX,YY是前次点击坐标,为公共变量。

procedure TFrm_PlanAndControl.FormPaint(Sender: TObject);
begin
self.Canvas.Pen.Mode := pmCopy ;
self.Canvas.Pen.Color := clred;
self.Canvas.TextOut(200,200,'sadfasdfasdf');
end


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

begin

if (XX <> 0) and (YY<>0) then
begin

self.Canvas.Pen.Mode := pmXor;
self.Canvas.Pen.Color := clScrollBar;
self.Canvas.MoveTo(xx,10);
self.Canvas.LineTo(xx,700);
end;
self.Canvas.Pen.Mode := pmCopy ;
self.Canvas.Pen.Color := clScrollBar;
self.Canvas.MoveTo(x,10);
self.Canvas.LineTo(x,700);
XX := x;
YY := y;
end;
 
因为你的代码不够,没法实际测试。我把我刚测试过的代码贴上去你看看。文字不会被异或掉的。
IsDraw:boolean;
pts:array[0..1]of TPoint;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
IsDraw:=true;
pts[0]:=Point(X,Y);
pts[1]:=Point(X,Y);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if IsDraw then
begin
// Canvas.Pen.Style:= psDot;
Canvas.Pen.Color:= clGray;
Canvas.Pen.Width:=2;
Canvas.Pen.Mode := pmNotXor;
Canvas.MoveTo(pts[0].X, pts[0].Y);
Canvas.LineTo(pts[1].X, pts[1].Y);
Canvas.MoveTo(pts[0].X, pts[0].Y);
Canvas.LineTo(X, Y);
pts[1] := Point(X, Y);
Canvas.Pen.Mode := pmCopy;
end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if IsDraw then
begin
Canvas.Pen.Mode := pmNotXor;
Canvas.MoveTo(pts[0].X, pts[0].Y);
Canvas.LineTo(X, Y);
IsDraw:=false;
end;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.TextOut(200,200,'sadfasdfasdf');
end;
 
>> self.Canvas.Pen.Mode := pmCopy ;
这里也应该是pmXor
 
多人接受答案了。
 

Similar threads

后退
顶部