我在打印服务器里设置了一张自定义的纸张,3450*2700的,然后将QuickRep也设为一样大小,
现在的问题是,我将打印机的默认纸张设为我自定义的纸张时,没问题,
如果设为其他(如A4)时,我QuickRep1.previewmodal时,就不行了,一半没出来,问题:
如何在程序中选择我自定义的纸张,
要不,怎样实现我打印预览与打印时,实现纸张大小时3450*2700?

解决方案 »

  1.   

    在程序中不要选择自定义,有BUG的,选择DEFAULT,就自动选择打印机的默认设置了,我做过,可以找我
    msn:[email protected]
      

  2.   

    我选的就是DEFAULT呢,在打印机中将打印纸设为我定义的格式,预览与打印都没问题,现在我不想在打印机中将打印纸设为我自定义的(打印机不只是本程序用,还有别的),怎么办?
      

  3.   

    我也想知道,
    to:  looking8(如血残阳) 
    打印机中将打印纸设为我定义的格式
    在哪设置的呀,我怎在打印机中找不到啊,
      

  4.   

    to: camlovecam(camlovecam) 
    控制面版-》打印机-》文件(菜单)-》服务器属性-》创建新格式(格式项)-》保存你定义的格式。打印机设置:
    属性-》打印首选项-》高级...-》纸张大小-》选取你自定义的格式我的问题尚未解决呢,各位帮忙啊!!!
      

  5.   

    http://borland.mblogger.cn/aiirii/posts/3412.aspx
      

  6.   

    在delphi中,先设置pagesize为custom,设置纸张的大小,在apply之后再改为defauit
    .不对给我发短信
      

  7.   

    qdmis() 
    =================
    多谢不过,你说的那些我都会呢,应该是你没看清楚我所说的,这是正解,关键是这句:
    打印机设置:
    属性-》打印首选项-》高级...-》纸张大小-》选取你自定义的格式就是想在程序里实现这个功能!
      

  8.   

    参考这个  
     
    var    hDMode:  THandle;  
       PDMode:  PDEVMODE;  
     
       Printer.GetPrinter(Device,  Driver,  Port,  hDMode);  
     
       if  hDMode  <>  0  then  
       begin  
           pDMode  :=  GlobalLock(hDMode);  
           if  pDMode  <>  nil  then  
           begin  
                   pDMode^.dmFields  :=  DM_PAPERSIZE  or  DM_PAPERWIDTH  or  DM_PAPERLENGTH;  
                   pDMode^.dmPaperSize  :=  DMPAPER_USER;  
                   pDMode^.dmPaperWidth  :=  APaperWidth;  
                   pDMode^.dmPaperLength  :=  APaperHeight;  
     
                   pDMode^.dmFields:=pDMode^.dmFields  or  DM_ORIENTATION;  
                   pDMode^.DMORIENTATION:=  Direct;  
           end;  
       end;  
    //打印机设置的纸张大小  
    ---------------------------------------------------------------  
     
    还有试试这个吧  在执行打印前调用以下函数:  
    procedure  SetPaperSize(X,  Y:  Integer);  
    //  单位是0.1mm  
    //  A4时  Printer.Pagewidth:=1440;    A5时  Printer.Pagewidth:=1049;  
    //  B5时  Printer.Pagewidth:=1290;    16K时  Printer.Pagewidth:=1035;  
    //  lq1600宽行打印机这个值宽度最大为42cm左右,  长度大约2m。  
    //改变devicemode结构  
    var  
       Device:  array[0..255]  of  char;  
       Driver:  array[0..255]  of  char;  
       Port:  array[0..255]  of  char;  
       hDMode:  THandle;  
       PDMode:  PDEVMODE;  
    begin  
       Printer.PrinterIndex  :=  Printer.PrinterIndex;  
       Printer.GetPrinter(Device,  Driver,  Port,  hDMode);  
       if  hDMode  <>  0  then  
       begin  
           pDMode  :=  GlobalLock(hDMode);  
           if  pDMode  <>  nil  then  
           begin  
               if  (x  =  0)  or  (y  =  0)  then  
               begin  
                   {Set  to  legal}  
                   pDMode^.dmFields  :=  pDMode^.dmFields  or  dm_PaperSize;  
                   {pDMode^.dmPaperSize  :=  DMPAPER_LEGAL;  changed  by  wulianmin}  
                   pDMode^.dmPaperSize  :=  DMPAPER_FANFOLD_US;  
               end  
               else  
               begin  
                   {Set  to  custom  size}  
                   pDMode^.dmFields  :=  pDMode^.dmFields  or  
                       DM_PAPERSIZE  or  
                       DM_PAPERWIDTH  or  
                       DM_PAPERLENGTH;  
                   pDMode^.dmPaperSize  :=  DMPAPER_USER;  
                   pDMode^.dmPaperWidth  :=  x  {SomeValueInTenthsOfAMillimeter};  
                   pDMode^.dmPaperLength  :=  y  {SomeValueInTenthsOfAMillimeter};  
               end;  
               {设定纸张来源}  
               pDMode^.dmFields  :=  pDMode^.dmFields  or  DMBIN_MANUAL;  
               pDMode^.dmDefaultSource  :=  DMBIN_MANUAL;  
     
               GlobalUnlock(hDMode);  
           end;  
       end;  
       Printer.PrinterIndex  :=  Printer.PrinterIndex;  
       //以下开始打印  
       Printer.BeginDoc;  
       Printer.Canvas.TextOut(100,100,  'Test  1');  
       Printer.EndDoc;  
    end;  
    参考这个  
     
    var    hDMode:  THandle;  
       PDMode:  PDEVMODE;  
     
       Printer.GetPrinter(Device,  Driver,  Port,  hDMode);  
     
       if  hDMode  <>  0  then  
       begin  
           pDMode  :=  GlobalLock(hDMode);  
           if  pDMode  <>  nil  then  
           begin  
                   pDMode^.dmFields  :=  DM_PAPERSIZE  or  DM_PAPERWIDTH  or  DM_PAPERLENGTH;  
                   pDMode^.dmPaperSize  :=  DMPAPER_USER;  
                   pDMode^.dmPaperWidth  :=  APaperWidth;  
                   pDMode^.dmPaperLength  :=  APaperHeight;  
     
                   pDMode^.dmFields:=pDMode^.dmFields  or  DM_ORIENTATION;  
                   pDMode^.DMORIENTATION:=  Direct;  
           end;  
       end;  
    //打印机设置的纸张大小  
    ---------------------------------------------------------------  
     
    还有试试这个吧  在执行打印前调用以下函数:  
    procedure  SetPaperSize(X,  Y:  Integer);  
    //  单位是0.1mm  
    //  A4时  Printer.Pagewidth:=1440;    A5时  Printer.Pagewidth:=1049;  
    //  B5时  Printer.Pagewidth:=1290;    16K时  Printer.Pagewidth:=1035;  
    //  lq1600宽行打印机这个值宽度最大为42cm左右,  长度大约2m。  
    //改变devicemode结构  
    var  
       Device:  array[0..255]  of  char;  
       Driver:  array[0..255]  of  char;  
       Port:  array[0..255]  of  char;  
       hDMode:  THandle;  
       PDMode:  PDEVMODE;  
    begin  
       Printer.PrinterIndex  :=  Printer.PrinterIndex;  
       Printer.GetPrinter(Device,  Driver,  Port,  hDMode);  
       if  hDMode  <>  0  then  
       begin  
           pDMode  :=  GlobalLock(hDMode);  
           if  pDMode  <>  nil  then  
           begin  
               if  (x  =  0)  or  (y  =  0)  then  
               begin  
                   {Set  to  legal}  
                   pDMode^.dmFields  :=  pDMode^.dmFields  or  dm_PaperSize;  
                   {pDMode^.dmPaperSize  :=  DMPAPER_LEGAL;  changed  by  wulianmin}  
                   pDMode^.dmPaperSize  :=  DMPAPER_FANFOLD_US;  
               end  
               else  
               begin  
                   {Set  to  custom  size}  
                   pDMode^.dmFields  :=  pDMode^.dmFields  or  
                       DM_PAPERSIZE  or  
                       DM_PAPERWIDTH  or  
                       DM_PAPERLENGTH;  
                   pDMode^.dmPaperSize  :=  DMPAPER_USER;  
                   pDMode^.dmPaperWidth  :=  x  {SomeValueInTenthsOfAMillimeter};  
                   pDMode^.dmPaperLength  :=  y  {SomeValueInTenthsOfAMillimeter};  
               end;  
               {设定纸张来源}  
               pDMode^.dmFields  :=  pDMode^.dmFields  or  DMBIN_MANUAL;  
               pDMode^.dmDefaultSource  :=  DMBIN_MANUAL;  
     
               GlobalUnlock(hDMode);  
           end;  
       end;  
       Printer.PrinterIndex  :=  Printer.PrinterIndex;  
       //以下开始打印  
       Printer.BeginDoc;  
       Printer.Canvas.TextOut(100,100,  'Test  1');  
       Printer.EndDoc;  
    end;  
      

  9.   

    我不会QuickRep3.62,要是使用REPORT MACHINE报表设计器就不存在这个问题
      

  10.   

    感觉好像应该是应该在用QR前先用代码把纸张设置成自定义,不然QR肯定会出那个问题,查一下API函数吧,上面应该改变打印机设置的方法QDMIS的方法在自已写打印代码的时候可以工作得很好,用在QR上可能没效果的
      

  11.   

    这个连接或许对你有帮助 http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=188735