procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Drawing then
begin
DrawShape(Origin, MovePt, pmNotXor);
MovePt := Point(X, Y);
DrawShape(Origin, MovePt, pmNotXor); end;
-----
procedure TForm1.DrawShape(TopLeft, BottomRight: TPoint; AMode: TPenMode);
begin
Drawing:=true;
Image1.Canvas.Pen.Mode := AMode; //使上次绘制的图形颜色变成了屏幕颜色,从而达到“橡皮擦”的效果。
case DrawingTool of
dtLine:
begin
Image1.Canvas.MoveTo(TopLeft.X, TopLeft.Y);
Image1.Canvas.LineTo(BottomRight.X, BottomRight.Y);
end;
------
画图程序的用意是每次擦除上一次画的线
但每次调用都要先运行到Image1.Canvas.Pen.Mode := AMode 那不是把所画的线设为屏幕色了,不时应该什么线都画不出来啊?谢谢高手指点下!
delphi Pen.Mode :=pmNotXor
答案:2 悬赏:50
解决时间 2021-03-24 11:02
- 提问者网友:醉归
- 2021-03-23 11:35
最佳答案
- 二级知识专家网友:厌今念往
- 2021-03-23 12:46
pmNotXor表示用当前色与背景色进行异或处理,不是得到黑色。
pen.color与背景色异或处理一次后,后得画线的颜色,可以执行正常画线操作;
再用pen.color与原来画线的部分进行异或处理,将消除pen.color得到背景色,执行画线操作后,相当于抹掉了原来划的线,从而达到橡皮擦”的效果。
简单总结,就是:一次异或画线,两次异或为清除。
pen.color与背景色异或处理一次后,后得画线的颜色,可以执行正常画线操作;
再用pen.color与原来画线的部分进行异或处理,将消除pen.color得到背景色,执行画线操作后,相当于抹掉了原来划的线,从而达到橡皮擦”的效果。
简单总结,就是:一次异或画线,两次异或为清除。
全部回答
- 1楼网友:野心和家
- 2021-03-23 13:25
image容器的parent属性的doublebuffered属性设true
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯