如果用窗体.print打印的话,会导致一些控件打印不出来,比如下拉列表,还有打印TChart也会导致只打印TChart的原始状态,而不会打印有数据的TChart
所以我就想到了先抓图,后打印
抓图后下拉列表和TChart都正常显示了,可是还有一点不好,就是下拉列表中的值是显示不到的,但Label可以显示,所以可以在打印的时候把下拉列表的值换成Label来显示
代码:
procedure TFrmLltj.Button1Click(Sender: TObject);
var
FormImage: TBitmap;
MyImage:TImage;
r1:TRect;
begin //52
grp2_lbl_lk.Caption := cbb_xzlk.Text; //选择的路口赋
grp2_lbl_qs_n.Caption := cbb_qs_n.Text + ' 年'; //选择的年
grp2_lbl_qs_y.Caption := cbb_qs_y.Text + ' 月'; //选择的月
grp2_lbl_qs_r.Caption := cbb_qs_r.Text + ' 日'; //选择的日
grp2_lbl_qs_s.Caption := cbb_qs_s.Text + ' 时'; //选择的时
grp2_lbl_qs_f.Caption := cbb_qs_f.Text + ' 分'; //选择的分
grp2_lbl_js_n.Caption := cbb_js_n.Text + ' 年'; //选择的年
grp2_lbl_js_y.Caption := cbb_js_y.Text + ' 月'; //选择的月
grp2_lbl_js_r.Caption := cbb_js_r.Text + ' 日'; //选择的日
grp2_lbl_js_s.Caption := cbb_js_s.Text + ' 时'; //选择的时
grp2_lbl_js_f.Caption := cbb_js_f.Text + ' 分'; //选择的分
GroupBox1.Visible := False; //打印起始时隐藏GroupBox1
FormImage := GetFormImage; //抓图
MyImage := TImage.Create(nil); //
try //53
Clipboard.Assign(FormImage);
MyImage.Picture.Assign(Clipboard);
r1:=Rect(50,50,1500,1500); //设置x坐标,y坐标,横大小,竖大小
if printdialog1.execute then //弹出打印属性框
begin //54
printer.begindoc; //开始打印
Printer.Canvas.StretchDraw(r1,MyImage.Picture.Graphic); //打印中
//Printer.Canvas.draw(0,0,MyImage.Picture.Bitmap);
printer.enddoc; //结束打印
end; //54
//MyImage.Picture.SaveToFile('D:/temp.bmp');
finally
begin //55
MyImage.Free; //释放资源
FormImage.Free;//释放资源
GroupBox1.Visible := True; //打印结束后显示GroupBox1
end; //55
end; //53
end; //52
黑色头发:http://heisetoufa.iteye.com/