本人在用quickreport打印时,发现当打印机存在但无法正常连接时,print方法执行极慢,
有没有办法,在打印之前,先检测一下存在的打印机状态?

解决方案 »

  1.   


    //从并行端口读取打印机状态
    function GetPrinterStatus: byte;
    asm
      MOV DX,$378;
      IN AL,DX;
    end;
    //获取打印机是否出错function CheckPrinter: boolean;
    var
      temp: byte;
    begin
      temp := GetPrinterStatus;
      Result := not (((temp and $80) = 0) //打印机忙
        or ((temp and $20) <> 0) //打印机缺纸
        or ((temp and $10) = 0) //打印机未联机
        or ((temp and $08) = 0)); //打印机出错;
    end;
      

  2.   

    wywry的方法,只能在win98,winme下使用,在WIN2000/XP NT下不行。
      

  3.   

    Printers是专门用来控制打印机的,可是在没有安装打印机时,却会提示I/O错误,所以必须有一个检测是否存在打印机的方法,我试过很多方法,可是I/O错误总是比我的判断早出现,所以采用以下的烂招来检测打印机。首先在uses增加Printers,再准备一个列表框ComboBox1,其属性Visible设为FALSE,然后在打印之前执行下列语句,那么就可以检测到是否存在打印机了:procedure TForm1.ButtonClick(Sender: Tobject);
    begin
    ComboBox1.Clear;
    ComboBox1.Items.Assign(Printer.Printers);
    if ComboBox1.Items.CommaText='' then
    Messagedlg('你需要安装打印机才能打印!',mtError,[mbOk],0);
    else
    Form1.Print; 
    end;