Delphi 抓图后打印这张图片,弹出打印属性框

如果用窗体.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/

你可能感兴趣的:(F#,Delphi)