1.部分内容设置如下:
     begin
       pdmode:=GlobalLock(hdmode);
       //获取指向打印机DevMode 结构的指针
       if pdmode<>nil then
       try
          pdmode^.dmFields:=pdmode^.dmFields or DM_PAPERSIZE;
          pdmode^.dmPaperSize:=DMPAPER_LEGAL;
          pdmode^.dmFields := pdmode^.dmFields or
                             DM_PAPERSIZE or
                             DM_PAPERWIDTH or
                             DM_PAPERLENGTH ;
         pdmode^.dmPaperSize:=DMPAPER_USER;
         pdmode^.dmPaperWidth:=2000;  //这里的数字单位为什么,实际纸张的大小是多少?
         pdmode^.dmPaperLength:=4000;
        pdmode^.dmFields:=pdmode^.dmFields or DMBIN_MANUAL;       pdmode^.dmDefaultSource:= DMBIN_MANUAL
       finally
         GlobalUnlock(hdmode);
       end;
2.如用Printer.PageWidth 得到4735,这个数又代表什么?以上两个问题请各位大哥帮我看一下!谢谢!

解决方案 »

  1.   

    pdmode^.dmPaperWidth:=2000;
    pdmode^.dmPaperLength:=4000;
    这两个值是在你字定义纸张的时候使用,表示纸张的长度与宽度,单位为:0.01mmPrinter.PageWidth则是打印机的纸宽.
      

  2.   

    Printer.PageWidth的单位也是0.01mm
      

  3.   

    在计算机中常用的单位还有Twips,在有些报表中默认的单位就是Twips。具体是Twips还是mm。你可以打印出来测量一下。换算公式是:1 Twip = 1/20 Pointer = 1/1440 Inch = 1/567 mm
      

  4.   

    Printer.PageWidth和PageHeight是逻辑单位。你要通过GetDeviceCaps(Printer.Handle, LOGPIXELSX)取得dpi然后换算成实际单位。简单的来说,你可以把它理解为像素,但是只是对图形而言。在文本输出的时候,你要注意Font.Height与Font.Size的区别。对于同一Size的字体,在不同的dpi下像素高度Height是不同的。对于更高级的应用,你还必须了解设备单位与逻辑单位的区别和转换以及适用范围(比如Region使用的永远是设备单位)。看看SetWindowExtEx,SetViewportExtEx的系列帮助或者专门的Windows编程书籍吧。
      

  5.   

    谢谢各位的解释,我自已经理解了,请想请教一个问题:
        在打印机属性中发现,自定义纸张大小时,纸张的宽度最大有21.59cm,长度有35.56cm,不同的打印机这个限值是否也不一样?
      

  6.   

    要看分辨率的设定。1cm = 1 / 2.54 inch = 1 * dpi / 2.54 pixel