怎么编程用指定打印机打印,但是不把它设为默认打印机 .
Rave中又怎么实现呢?

解决方案 »

  1.   

    //给你一个参考,打印结束后,有变为默认的打印机
    procedure TForm1.Button2Click(Sender: TObject);
    var
       PrnHd : THandle;
       PrnInfo : pPrinterInfol;
       PcbNeeded: DWORD;
       PDevModeBytes :  DWORD;
       DevMode : PDeviceMode;
       PrnHdc : HDC;
       Docinfo :PDocInfo;
    begin
       OpenPrinter('Epson LQ-1600k', PrnHd,nil);
        //获得打印机句柄PrnHd
        GetMem(Prninfo,1024);
        Getprinter(PrnHd,1,PrnInfo,1024,@pcbNeeded);
        PDevModeBytes := DocumentProperties(Handle,PrnHd,prninfo^.pDescription,DevMode^,DevMode^,0);
        {获取DevMode结构所需的字节数}
        GetMem(DevMode,PDevModeBytes);
        //给结构DevMode分配空间
        DocumentProperties(handle,PrnHd, PrnInfo^.pDescription,DevMode^,DevMode^,DM_OUT_BUFFER);
        //获取打印机的DevModej结构
           with DevMode^ do begin
             dmPaperSize := DMPAPER_A4;
             //将纸张设置成A4
               dmFields := dmFields or  DM_PAPERSIZE;
        END;
          DocumentProperties( Handle,PrnHd, prnInfo^.pDescription,DevMode^,DM_OUT_BUFFER or DM_IN_BUFFER);
          //修改Devmode结构
           {一下代码是为了测试打印机是否是按A4纸张大小来打印}
           PrnHdc := CreateDC( nil,'Epson LQ-l600K',nil,DevMode);
           GetMem(DocInfo ,100);
           with DocInfo^ do
            begin
              cbSize := sizeof(DocInfo);
              lpszDocName := nil;
              lpseOutput := nil;
              lpszDatatype := nil;
              fwType := DI_APPBANDING;
            end;
            StartDoc(PrnHdc,DocInfo^);
            StartPage(penhdc);
            Textout( prnHdc, 10,10,' Hello My Friend', 17);
            endPage(PrnHdc);
            endDoc(prnHdc);
            deletedc(Prnhdc);
            FreeMem(Docinfo);
            freeMem(prninfo);
            FreeMem(devMode);
            end;
    end;