RBuilder 打印时停顿两秒钟是怎么回事。比如我要打印10张,可是在打印的时候。每打印完一张后要停顿两秒才继续打印下一张。这个是怎么回事。要如何处理呢。谢谢。

解决方案 »

  1.   

    第二章   打印相关的API函数 Api函数名 
                                                                函数说明 适用范围   W16 W95 WNT 
    AddPrinterConnection 为当前用户建立与打印机的联系 否 是 是 
    StartPagePrinter 开始打印机 否 是 是 
    StartDoc 开始打印作业 是 是 是 
    StartDocPrinter 开始打印作业 否 是 是 
    AddPrintProvidor 加入一个打印机支持器 否 是 是 
    AddForm 加入一个打印机窗体 否 是 是 
    AddPort 加入一个打印机端口 否 是 是 
    AddMonitor 加入一个打印机管理器 否 是 是 
    ShellExecute 打开或打印指定文件 否 是 是 
    ClosePrinter 关闭打开的打印机 否 是 是 
    WritePrinter 向打印机输出数据 否 是 是 
    AddPrinter 在打印机服务器上建立一个打印机 否 是 是 
    SetAbortProc 设备打印作业的放弃函数 否 是 是 
    SetPrinter 设置打印机信息 否 是 是 
    SetPrinterData 设置打印机配置 否 是 是 
    SetJob 设置打印作业信息 否 是 是 
    ResetPrinter 设置打印数据类型和设备模式值 否 是 是 
    DeletePrinterConnection 删除与打印机的连接 否 是 是 
    DeletePrintProcessor 删除打印机处理器 否 是 是 
    DeletePrinterDriver 删除打印机驱动程序 否 是 是 
    DeletePrinter 删除打印机服务器上的打印机 否 是 是 
    DeleteMonitor 删除打印机监视器 否 是 是 
    DeletePrintProvidor 删除打印机提供者 否 是 是 
    DeleteForm 删除打印机窗体层差 否 是 是 
    AbortPrinter 删除打印机缓冲文件 否 是 是 
    DeletePort 删除打印机端口 否 是 是 
    AddJob 启动一个打印作业 否 是 是 
    AdvancedDocumentProperties 进行打印机高级设置 否 是 是 
    PrintDlg 建立打印文本对话框 否 是 是 
    EnumPrintProcessors 枚举已安装的打印机处理器 否 是 是 
    EnumPrinterDrivers 枚举已安装的打印机驱动程序 否 是 是 
    EnumPorts 枚举可用打印机端口 否 是 是 
    EnumPrintProcessorDatatypes 枚举打印机所支持的数据类型 否 是 是 
    EnumForms 枚举所支持的打印机窗体 否 是 是 
    AbortDoc 终止一项打印作业 是 是 是 
    PrinterProperties 修改打印机属性 否 是 是 
    AddPrintProcessor 将打印处理器复制到打印机服务器中 否 是 是 
    AddPrinterDriver 将打印机驱动程序复制到打印机服务器中 否 是 是 
    PrinterMessageBox 显示打印作业出错信息 否 是 是 
    ConnectToPrinterDlg 显示浏览对话并连接网络打印机 否 是 是 
    EndPagePrinter 结束打印页 否 是 是 
    EndDoc 结束打印作业 是 是 是 
    EndDocPrinter 结束打印作业 否 是 是 
    StartPage 准备打印机接收数据 是 是 是 
    WaitForPrinterChange 监测打印机或打印机服务器变化 否 是 是 
    GetPrintProcessorDirectory 获取打印机驱动处理器路径 否 是 是 
    GetPrinterDriver 获取打印机驱动程序信息 否 是 是 
    GetPrinterDriverDirectory 获取打印机驱动程序路径 否 是 是 
    GetPrinter 获取打印机信息 否 是 是 
    GetPrinterData 获取打印机配置信息 否 是 是 
    GetForm 获取打印机窗口信息 否 是 是 
    EnumJobs 获取打印作业信息 否 是 是 
    GetJob 获取打印作业信息 否 是 是 
    OpenPrinter 获取指定打印机的句柄 否 是 是 
    ReadPrinter 读打印机数据 否 是 是 
    DocumentProperties 配置打印机设置 否 是 是 
    ConfigurePort 配置打印机端口 否 是 是 
      

  2.   

    其实也不必用,apidelphi的printers   已经封装的很好了? 
    对   于   每   一   个WINDOWS   应   用   程   序开   发   者   来   说,   打   印   功   能   的   实   现   都   是   极   为   棘   手   的,   因   为   要   涉及到   相   当   多   的   代   码   而   且   常   常   是   相   当   的   复   杂,   但   是   在DELPHI   中   实   现   文   本   和   图   象   的   打   印   功   能   却   是   非   常   容   易   的。                 1、   文   本   的   打   印   功   能。DELPHI   中   文   本   的   打   印   功   能   就   如   同   在DOS   中   实   现   文   本   的   打   印   功   能   一样 
    容   易,   需   要   做   的   一   切   只   是   取   得   打   印   参   数,   打   开   打   印   机,然   后   发   送   文   本   的   每   一   行   内   容。   在DELPHI   中   提 
    供   了   一   个PRINTERS   程   序   单   元,   它   说   明   了   一   个TPRINTER   对   象,   封   装   了WINDOWS   打   印   工作   和   输   出   打   印 
    机   之   间   的   接   口,   并   提   供   常   用   的   属   性   和   方   法,其   中   画   布CANVAS   是   一   个   非   常   有   用   的   属   性,   它   代   表   了   当 
    前   打印   文   件   的   表   面,   是   以   图   形   方   式   来   工   作   的,   整   个   的   打   印   输   出工   作   仅   仅   是   将   你   打   印   的   内   容   输   出 
    到TPRINTER   的   属   性CANVAS   上,当   全   部   的   输   出   工   作   完   成   以   后,   打   印   对   象(TPRINTER)   把CANVAS   的   属   性 
    值   送   到   打   印   机   上   去。 
                  下   面   举   例   来   说   明   如   何   通   过DELPHI   实   现   文   本   内   容   的   打   印。   在DELPHI   中   提   供 
    了PRINTDIALOG、PRINTERSETUPDIALOG   两   个   控   件   允   许   我   们   进   行   打   印   机   以   及   其   他   影   响   打   印   输   出   的选 
    择,   此   外   最   重   要   的   一   点   是   要   想   实   现   打   印   功   能   必   须   在   编译   程   序   以   前   将PRINTERS   加   入   到INTERFACE   或 
    者IMPLEMENTATION   的UESE   语   句   当   中,   因   为PRINTER   单   元   包   括ASSIGNPRN   和   其   他   控   制   打   印   机的   过   程。 
                  首   先   在FORM   当   中   加   入MEMO、PRINTDIALOG、PRINTERSETUPDIALOG   和   两   个BUTTON   控   件,   两   个 
    BUTTON   的CAPTION   分   别   为“   打   印   设   置”   和“   打   印”。   然   后   编   写BUTTON   的   事   件   驱   动   程   序(   代   码   在   下 
    面),这   个   简   单   的   例   子   中   只   要   单   击“   打   印”   按   钮   时   便   可   以   在   打   印机   上   输   出   文   件0S2.TXT,   打   印   事   件   的 
    清   单   如   下: 
    implementation 
    uses   printers; 
    {$R   *.DFM} 
    procedure   TForm1.BitBtn1Click(Sender:   TObject); 
    begin 
    printersetupdialog1.execute;     //选择输出的打印机以及其他打印控制选项 
    end; 
    procedure   TForm1.BitBtn2Click(Sender:   TObject); 
    var 
    lines:integer; 
    prntext:system.text; 
    //将PRNTEXT声名为一个在SYSTEM程序单元当中定义的文本文件 
    begin 
          if   printdialog1.execute   then 
          assignprn(prntext);   //将PRNTEST分配给打印机 
          rewrite(prntext);   //调用REWRITE函数,为输出打开已分配的文件 
          printer.canvas.font:=memo1.font; 
          //把当前MEMO1的字体指定给打印对象的CANVAS的字体属性 
          for   lines:=0   to   memo1.lines.count-1   do 
          writeln(prntext,memo1.lines[lines]); 
          //把MEMO的内容写到打印机对象 
          system.close(prntext);   //关闭打印文件 
    end; 
    procedure   TForm1.FormCreate(Sender:   TObject); 
    begin 
    memo1.lines.loadfromfile( 'c:\dos\os2.txt '); 
    //在FORM建立时读入C:\DOS\OS2.TXT文件 
    end; 
    end. 
                  2、   图   形   的   打   印   功   能,   简   单   的图   形   打   印   功   能   也   如   打   印   文   本   一   样   的   容   易,   只   是   告   诉   打   印机   对 
    象(TPRINTER)   开   始   打   印,   把   图   形   简   单   的   复   制   到   打   印   机上   去,   最   后   告   诉   打   印   机   结   束   打   印   工   作。 
                  举   例   说   明:   将   上   面   的   例   子的MEMO   控   件   换   成IMAGE   控   件,   再   经   过   一   些   简   单   的   修   改,   图   形   打印   的 
    代   码   如   下: 
    procedure   TForm1.BitBtn1Click(Sender:   TObject); 
    begin 
    if   printdialog1.execute   then   begin 
    printer.begindoc; 
    printer.canvas.draw(0,0,image1.picture.graphic); 
    printer.enddoc; 
    end; 
    end; 
                  在   这   种   情   况   下,   使   用   的   是   打印   机   的   分   辨   率,   图   形   在   页   面   的   左   上   角   开   始   打   印   输   出,   打   出的   图 
    形   很   小,   在   很   多   的   情   况   下   不   能   符   合   要   求,   但   是   打   印   机画   布CANVAS   的STRETHDRAW   的   方   法,   可   以   让   我 
    们   对   图   形   进   行   灵   活的   处   理,   画   布(CANVAS)   的STRETCHDRAW   方   法   声   名   为: 
    procedure   StretchDraw(const   Rect:   TRect;   Graphic:   TGraphic); 
    其中的RECT参数代表图形输出区域的大小,TRECT的类型声名为: 
    TRect   =   record 
        case   Integer   of 
            0:   (Left,   Top,   Right,   Bottom:   Integer); 
            1:   (TopLeft,   BottomRight:   TPoint); 
    end; 
                  因   此   我   们   只   要   调   整RECT   的   大小   及   其   在   打   印   页   面   上   的   位   置,   进   而   达   到   自   己   满   意   的   效   果,下   面 
    的   代   码   是   不   断   的   放   大   图   形,   充   满   我   们   定   义   的   矩   形   区域,   并   将   其   定   位   在   打   印   机   画   布(CANVAS)   的   中   央 
    进   行   输   出。代   码   如   下: 
    procedure   TForm1.Button1Click(Sender:   TObject); 
    VAR 
    strect:Trect;         //定义打印输出矩形框的大小 
    temhi,temwd:integer; 
    begin 
    if   printdialog1.execute   then 
          begin 
          temhi:=image1.picture.height; 
          temwd:=image1.picture.width; 
                while   (temhi   printer.pageheight   div   2)and 
    //将图形放大到打印页面的1/2大小 
                      (temwd   printer.pagewidth   div   2)       do 
        begin 
        temhi:=temhi+temhi; 
        temwd:=temwd+temwd; 
        end; 
                      with   strect   do         //定义图形在页面上的中心位置输出 
        begin 
        left:=(printer.pagewidth   -temwd)   div   2; 
        top:=(printer.pageheight-temhi)   div   2; 
        right:=left+temwd; 
        bottom:=top+temhi; 
        end; 
          with   printer   do 
          begin 
          begindoc; 
          canvas.stretchdraw(strect,image1.picture.graphic); 
          //将放大的图形向打印机输出 
          enddoc; 
          end; 
    end; 
    end; 
                  以   上   代   码   在DELPHI2.0   上   编   译   通过,   通   过   这   些   小   小   的   例   子,   相   信   大   家   对   于   在DELPHI   中   打   印 
    图形   和   文   本   有   一   定   的   了   解,   同   样   通   过   打   印   机   的   画   布(CANVAS)属   性   也   可   以   实   现   数   据   库   表   单   的   打   印, 
    在   这   里   不   一   一   赘   述,如   果   大   家   有   兴   趣   不   妨   一   试。 
                  作   者   地   址:   北   方   工   业   大   学801   信   箱   李   晓   东   邮   编100041 
      

  3.   

    我也是一个初学者,我在《2001年程序员增值合订本》(下册)第255页找到一个程序片断可能对你有用。     如何在用程序设置打印机打印纸张大小的问题。     char   Device[CCHDEVICENAME];   //打印机的名称 
        char   Driver[MAX_PATH];         
        char   Port[32];     
        PDevMode   pDev; 
        THandle   hDev;                         
        TPrinter   *Prntr   =   Printer();     //打印任务 
        HANDLE   hPrinter; 
        Prntr-> GetPrinter(Device,Driver,Port,hDev); 
        if(hDev!=0) 

        pDev=(PDevMode)Globailock((void*)hDev); 
        if(pDev!=NULL) 

        pDev-> dmPaperSize=DMPAPER_USER; 
        pDev-> dmPaperLength=1500; 
        pDev-> dmPaperWidth=2000; 
        pDev-> dmFields=(pDev-> dmFields)¦(DM_PAPERSIZE); 
        pDev-> dmFields=(pDev-> dmFields)¦(DM_PAPERLENGTH); 
        pDev-> dmFields=(pDev-> dmFields)¦(DM_PAPERWIDTH); 

    ResetDC(Prntr-> Handle,pDev); 
    GlobalUnlock((void*)hDev) 
    } 下面就是打印的代码。 
            你可以参考上面代码解决问题,我看过pDev-> 的选项里有好多内容。或者就自定义纸张啦。