我用的FastReport 在直接打印的时候出现程序死了;但是我在打印之前先预览,再打印的时候就没有问题,下面是我写的代码,请高手指点一下
procedure Tfrm_report.btPrintClick(Sender: TObject);
// **** 直接打印
var
   sReportfile:String;
begin
  inherited;
  sReportfile:= PApp_path+'reports\客户资料.frf';
  if FileExists(sReportfile) then begin
     frReport1.LoadFromFile(sReportfile);
     frReport1.PrintPreparedReportDlg;   //直接打印
  end
  else begin
     Application.MessageBox('没有这个文件,可能报表文件已丢失!','提示信息',MB_OK);
     Exit;
  end;
end;procedure Tfrm_report.btPreviewClick(Sender: TObject);
// **** 打印预览
var
   sReportfile:String;
begin
  inherited;
  sReportfile:= PApp_path+'reports\客户资料.frf';
  if FileExists(sReportfile) then begin
     frReport1.LoadFromFile(sReportfile);
     frReport1.ShowReport;
  end
  else begin
    Application.MessageBox('没有这个文件,可能报表文件已丢失!','提示信息',MB_OK);
    Exit;
  end;
end;

解决方案 »

  1.   

    先用.PrepareReport准备,再用.PrintPreparedReport('', 1, True, frAll);打印
      

  2.   

    先谢谢你,但是这样有一个问题,开始直接打印出来了,但是还是出在打印对话框,我按确定后,又会打印一次,下面是我修改的代码:
    procedure Tfrm_report.btPrintClick(Sender: TObject);
    // **** 直接打印
    var
       sReportfile:String;
    begin
      inherited;
      sReportfile:= PApp_path+'reports\客户资料.frf';
      if FileExists(sReportfile) then begin
         frReport1.LoadFromFile(sReportfile);
         frReport1.PrepareReport;  //准备
         frReport1.PrintPreparedReport('', 1, True, frAll);  //打印
      end
      else begin
         Application.MessageBox('没有这个文件,可能报表文件已丢失!','提示信息',MB_OK);
         Exit;
      end;
    end;
      

  3.   

    td427,你好
    我用frReport1.PrintPreparedReport('', 1, False, frAll);  //打印
    这样试也是先直接打印一份,再跳出打印对话框,按确定就会再次打印,当然取消就不打印
    能不能直接打印一份后,不再跳出打印对话框,谢谢
      

  4.   

    打印之前存一下就OK了!
        frReport.Preview=nil;
        frReport.SavePreparedReport('*.frf');//随便取个名字存一下
        if  frReport.PrepareReport then
            frReport.PrintPreparedReport('',1,false,frAll);