如题,我想得到当前默认打印机上自定义纸张的大小,例如,自定义格式:210x140 宽度:21.00cm,高度:14.50cm

解决方案 »

  1.   

    www.wave12.com 有报表打印控件  建议去看看
      

  2.   

    Fastreport 可以直接定义纸张的大小
      

  3.   

    fastreport是可以自定义纸张大小,但是不能动态修改,我是想根据当前默认打印机上自定义纸张的大小,动态设置frf文件中自定义纸张大小。因为客户可能经常换打印纸
      

  4.   

    prntDlg->GetDefaults();//CPrintDlg prntDlg(FALSE);
    m_hdcPrinter = prntDlg->GetPrinterDC();
    LPDEVMODE lpDefPrntDevMode;
    lpDefPrntDevMode = prntDlg->GetDevMode(); m_pDCPrinter = CDC::FromHandle(m_hdcPrinter);
    m_pDCPrinter->SetMapMode(MM_LOMETRIC);
    CRect rectPrint, rectPaperSize;
    rectPaperSize.top = 0;
       rectPaperSize.left = 0;
       rectPaperSize.right = lpDefPrntDevMode->dmPaperWidth;
      rectPaperSize.bottom = lpDefPrntDevMode->dmPaperLength;
    rectPrint.top = 0;
       rectPrint.left = 0;
      rectPrint.right = m_pDCPrinter->GetDeviceCaps(HORZRES);
    rectPrint.bottom = m_pDCPrinter->GetDeviceCaps(VERTRES);
      

  5.   

    得到打印机纸张可以用DeviceCapabilities函数,具体用法还是建议参考msdn,一下是例子:
    ......
    var
      sPrinterName, sPort: String;           //打印机的名称,连接端口如LPT1
      lpwPapers: Pointer;      //得到纸张类型名称
      dResult: DWORD;
    begin
      dResult := DeviceCapabilities(PChar(sPrinterName),PChar(sPort),DC_PAPERNAMES, nil, nil);
      if dResult > 0 then begin
        GetMem(lpwPapers, 65);   //分配空间,msdn上注明:每个纸张名都是64个字符
        try
          if DeviceCapabilitiesA(PChar(sPrinterName),PChar(sPort),DC_PAPERNAMES,
          lpwPapers, nil) = - 1 then
            raise Exception.Create('Error');
          ShowMessage(StrPas(lpwPapers));
        finally
          FreeMem(lpwPapers, 65);
        end;
      end;
     
    end;
    ......