FASTREPORT 3.0打印问题,程序启动后,我直接点击打印,非要预览一次,后续打印才有反应, 
打印机我安装了 ,是本机的
//这个函数太长了,我用伪代码给大家看看 
procedure setfrxreport_zy(id); //这个是预览的 
//变量的声明 
begin 
      // 非法的检查 
      //读取报表的格式,竖向,还是横向。 
      //读取报表的纸张,设置纸张的打印方向,是横向打印,还是竖向打印 
      //设置报表的字体,左右边距。 
     //查找报表上面的memo ,例如 memo24:= MyDataModule.frxreport1.findobject('memo24')  as TfrxMemoView ; 
     //设置标题格式,读取标题的内容 ,标题局中, 
     //读取表头的内容,写入memo中 
     //读取表尾的内容,写入memo中, 
     //读取masterdata的内容 
     MyDataModule.frxReport1.ShowReport; //这个是预览的 end; 
procedure setfrxreport_print(id); //这个是打印的 
//变量的声明 
begin 
      // 非法的检查 
      //读取报表的格式,竖向,还是横向。 
    //读取报表的纸张,设置纸张的打印方向,是横向打印,还是竖向打印 
      //设置报表的字体,左右边距。 
    //查找报表上面的memo ,例如 memo24:= MyDataModule.frxreport1.findobject('memo24')  as TfrxMemoView ; 
    //设置标题格式,读取标题的内容 ,标题局中, 
    //读取表头的内容,写入memo中 
    //读取表尾的内容,写入memo中, 
    //读取masterdata的内容 
    MyDataModule.frxReport1.print; //这个是打印的 end; procedure TsearchForm.BitBtn9Click(Sender: TObject); begin 
        id:=Trim(idDBEdit.Text);         setfrxreport_zy(id); //这个是预览的         END; 
procedure TsearchForm.BitBtn10Click(Sender: TObject); begin 
        id:=Trim(idDBEdit.Text);         setfrxreport_print(id); //这个是预览的         END; 

解决方案 »

  1.   

    试不试你没有把报表LOAD内存中,所以每次打印前都要预览呢?
    给你个简单示例.
    procedure Print(Msg:integer);
    begin
      if  frxReport1.LoadFromFile(ExtractFilePath(ParamStr(0)) +'report\'+Report_file_Name) then
      begin
        if Msg=0 then
        begin       //预览报表
           frxReport1.PrepareReport;
          frxReport1.Preview:= frxprvw1;
          frxReport1.ShowReport(True);
        end
        else
        if Msg=1 then    
        begin   //打印报表
          frxReport1.Print;         //.PrintPreparedReport('', 1, True, frAll);
        end;
      
      end;
    end;
      

  2.   

    没有啊,我有导入的,我要选择格式啊
          MyDataModule.frxReport1.Clear ;
          try
              filename:=ExtractFilePath(paramstr(0))+'\data\setting.ini';
              FStream   :=   TIniFile.Create(filename);
                //左右格式1.上下格式--2
              strstyle:=trim((FStream.ReadString('Style','Style','')));
              strpage:=trim((FStream.ReadString('Paper','PaperName','')));
              strpage1:=trim((FStream.ReadString('UserPaper','PaperName','')));
              if ( Trim(strpage)='') and (Trim(strpage1)='')  then
              begin //如果自定义,系统的都没有定义纸张,就会出错。
                   ShowMessage('请设置报表的纸张的大小!!!');
                   exit;
              end
              else if ( Trim(strpage)<>'') or (Trim(strpage1)<>'') then
              begin
                if Trim(strstyle)='1' then
                begin
                  //35 原来的,//36对35上面做了修改,可以横竖,自定义的纸张。
                  //351 是对纸张做横向打印的。//35是按照b5的大小设计的。
                  //34是按照A4的大小设计的。
                     MyDataModule.frxReport1.LoadFromFile(WPath + IntToStr(36) + '.fr3');            end else  if Trim(strstyle)='2' then
                begin
                     MyDataModule.frxReport1.LoadFromFile(WPath + IntToStr(355) + '.fr3');
                end
                else if Trim(strstyle)='' then
                begin
                    ShowMessage('请设置报表的格式!!!');
                    exit;
                end;
              end;
         execpt 
                  ShowMessage('的点点滴滴');
         end;
      

  3.   

    你用的语法错了
    预览打印的话:语句是:frReport.showReport;
    如果直接打印的话:语句是:reReport.prepareReport; reReport.printpreparedReportDlg;这两句;