【关于TCanvas上CopyRect和TBitmap的用法的问题】 ( 积分: 100 )

  • 主题发起人 主题发起人 sephy
  • 开始时间 开始时间
S

sephy

Unregistered / Unconfirmed
GUEST, unregistred user!
这样一段东西,麻烦大家看一下
ptb是一个TPaintBox

var
Form1: TForm1;
ABit: TBitmap;
AR: TRect;
implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
ABit:=TBitmap.Create;
AR:=Rect(0,0,ptb.Width,ptb.Height);

Form1.Refresh;
ptb.Canvas.Brush.Color:=clWhite;
ptb.Canvas.FillRect(AR);
end;

//画上线
procedure TForm1.Button1Click(Sender: TObject);
begin
ptb.Canvas.PenPos:=Point(0,0);
ptb.Canvas.LineTo(90,90);
end;

//暂存到Bitmap,擦掉线
procedure TForm1.Button2Click(Sender: TObject);
begin
ABit.Canvas.CopyRect(AR,ptb.Canvas,AR);
ptb.Canvas.FillRect(AR);
end;

//用Bitmap内的暂存,恢复原来图案
procedure TForm1.Button3Click(Sender: TObject);
begin
ptb.Canvas.CopyRect(AR,ABit.Canvas,AR);
end;

为什么达不到我上面的所想的效果呢?
没有办法恢复原来的图案

请不要用背景色或者反色,画过原来线的方法来擦线
因为这同样会擦掉,本来背景上已经画好的东西
我暂存一下的目的就是不想改掉原来背景上有的东西
 
这样一段东西,麻烦大家看一下
ptb是一个TPaintBox

var
Form1: TForm1;
ABit: TBitmap;
AR: TRect;
implementation

{$R *.dfm}

procedure TForm1.FormActivate(Sender: TObject);
begin
ABit:=TBitmap.Create;
AR:=Rect(0,0,ptb.Width,ptb.Height);

Form1.Refresh;
ptb.Canvas.Brush.Color:=clWhite;
ptb.Canvas.FillRect(AR);
end;

//画上线
procedure TForm1.Button1Click(Sender: TObject);
begin
ptb.Canvas.PenPos:=Point(0,0);
ptb.Canvas.LineTo(90,90);
end;

//暂存到Bitmap,擦掉线
procedure TForm1.Button2Click(Sender: TObject);
begin
ABit.Canvas.CopyRect(AR,ptb.Canvas,AR);
ptb.Canvas.FillRect(AR);
end;

//用Bitmap内的暂存,恢复原来图案
procedure TForm1.Button3Click(Sender: TObject);
begin
ptb.Canvas.CopyRect(AR,ABit.Canvas,AR);
end;

为什么达不到我上面的所想的效果呢?
没有办法恢复原来的图案

请不要用背景色或者反色,画过原来线的方法来擦线
因为这同样会擦掉,本来背景上已经画好的东西
我暂存一下的目的就是不想改掉原来背景上有的东西
 
ABit: TBitmap;
改为
ABit: TImage;
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
772
import
I
S
回复
0
查看
848
SUNSTONE的Delphi笔记
S
后退
顶部