如何把动态生成的窗体内容存成位图(100分)

  • 主题发起人 主题发起人 wuxl12345
  • 开始时间 开始时间
W

wuxl12345

Unregistered / Unconfirmed
GUEST, unregistred user!
如何把动态生成的窗体内容存成一个位图?
 
MyBmp:=TBitmap.Create;
R := Rect(0, 0,785, 550) ;
MyBmp.Width := 785;
MyBmp.Height := 550;
MyBmp.Canvas.CopyRect(R,form1.Canvas, R);
MyBmp.SaveToFile(SaveDialog1.FileName+'.bmp');
想把动态生成的form1上的内容输出到一个位图文件,但是生成的位图文件不是form1的内容,应该如何写?
 
这样就可以:
procedure TForm1.Button1Click(Sender: TObject);
var
MyBmp: TBitmap;
R: TRect;
begin
MyBmp:=TBitmap.Create;
R := Rect(0, 0,Width, Height) ;
MyBmp.Width := Width;
MyBmp.Height := Height;
MyBmp.Canvas.CopyRect(R, Canvas, R);
MyBmp.SaveToFile('D:/T.bmp');
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
MyBmp: TBitmap;
R: TRect;
begin
MyBmp:=TBitmap.Create;
R := Rect(0, 0,Self.Width, Self.Height) ;
MyBmp.Width := Self.Width;
MyBmp.Height := Self.Height;
MyBmp.Canvas.CopyRect(R, Canvas, R);
MyBmp.SaveToFile('D:/Form.bmp');
end;
 
谢谢两位,你们的代码和我的基本相似,出现的问题也一样:
1。程序窗体必须在最大化,在最前面,才可以生成程序的界面,否则是windows的桌面,我的要求是窗体最小化。
2。动态生成的文本框的内容显示不出来。
3。你们的程序生成的位图还包括winxp的任务栏,可能是Self.Width的关系吧。
 
欢迎高手帮忙!
 
改一句就可以:
procedure CopyForm(const AForm: TForm);
var
MyBmp: TBitmap;
R: TRect;
begin
MyBmp := TBitmap.Create;
try
R := Rect(0, 0, AForm.Width, AForm.Height) ;
MyBmp.Width := R.Right;
MyBmp.Height := R.Bottom;
AForm.PaintTo(MyBmp.Canvas, 0, 0); //加这一句
//MyBmp.Canvas.CopyRect(R, AForm.Canvas, R);
MyBmp.SaveToFile('D:/T.bmp');
finally
MyBmp.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
CopyForm(Self);
end;
 
后退
顶部