现在的位置: 首页 > 综合 > 正文

凑个吉利数

2013年10月06日 ⁄ 综合 ⁄ 共 3795字 ⁄ 字号 评论关闭
今天是本月的最后一天,可最近实在是没有时间研究新课题,但又想要将本月发表的文章凑个吉利数字,没办法,只好随便写点东西了!

当然也不能什么都不写,就复制下面的代码吧,是用来计算缺省打印机上缺省纸张的可打印区域的。

  1. LOCAL oPaperInfo
  2. m.oPaperInfo = GetPaperInfo()
  3. '最小左/上边距:', m.oPaperInfo.Left,  m.oPaperInfo.Top
  4. '纸张宽/高:  ', m.oPaperInfo.Width, m.oPaperInfo.Height
  5. *!* --------------------------------------------------------------------------
  6. *!* 功能: 获取缺省打印机及缺省纸张的可打印区域信息
  7. *!* 出口: 一个包含页信息的对象(单位为 cm )
  8. *!* --------------------------------------------------------------------------
  9. FUNCTION GetPaperInfo
  10.   #DEFINE LOGPIXELSX        88
  11.   #DEFINE LOGPIXELSY        90
  12.   #DEFINE PHYSICALWIDTH     110
  13.   #DEFINE PHYSICALHEIGHT    111
  14.   #DEFINE PHYSICALOFFSETX   112
  15.   #DEFINE PHYSICALOFFSETY   113
  16.   #DEFINE SCALINGFACTORX    114
  17.   #DEFINE SCALINGFACTORY    115
  18.   Declare Long GetDeviceCaps IN win32api ;
  19.     Long hdc, Long nIndex
  20.   Declare Long CreateDC IN win32api ;
  21.     String lpszDriver, String lpszDevice, ;
  22.     String lpszOutput, ;
  23.     String lpInitData
  24.   Declare Long DeleteDC IN win32api ;
  25.     Long hdc
  26.   LOCAL loInfo, lhDc, lnLeft, lnTop, lnWidth, lnHeight, lnRes_h, lnRes_v
  27.   m.loInfo = NEWOBJECT( 'Empty' )
  28.   ADDPROPERTY( m.loInfo, 'left',   0 )
  29.   ADDPROPERTY( m.loInfo, 'top',    0 )
  30.   ADDPROPERTY( m.loInfo, 'width',  0 )
  31.   ADDPROPERTY( m.loInfo, 'height', 0 )
  32.   m.lhDc = CreateDC( 'WINSPOOL', SET("Printer",3), NULL, NULL )
  33.   m.lnLeft   = GetDeviceCaps( m.lhDc, PHYSICALOFFSETX )
  34.   m.lnTop    = GetDeviceCaps( m.lhDc, PHYSICALOFFSETY )
  35.   m.lnWidth  = GetDeviceCaps( m.lhDc, PHYSICALWIDTH )
  36.   m.lnHeight = GetDeviceCaps( m.lhDc, PHYSICALHEIGHT )
  37.   m.lnRes_h  = GetDeviceCaps( m.lhDc, LOGPIXELSX )
  38.   m.lnRes_v  = GetDeviceCaps( m.lhDc, LOGPIXELSY )
  39.   DeleteDC( m.lhDc )
  40.   m.loInfo.Left   = ROUND( m.lnLeft   / m.lnRes_h * 2.54, 3 )
  41.   m.loInfo.Top    = ROUND( m.lnTop    / m.lnRes_h * 2.54, 3 )
  42.   m.loInfo.Width  = ROUND( m.lnWidth  / m.lnRes_h * 2.54, 3 )
  43.   m.loInfo.Height = ROUND( m.lnHeight / m.lnRes_v * 2.54, 3 )
  44.   RETURN m.loInfo
  45. ENDFUNC

再加点,获取当前 Windows 缺省打印机可用纸张信息及最大/最小自定义纸张尺寸:

  1. #define TAB                 chr(9)
  2. #define DC_FIELDS           1
  3. #define DC_PAPERS           2
  4. #define DC_PAPERSIZE        3
  5. #define DC_MINEXTENT        4
  6. #define DC_MAXEXTENT        5
  7. #define DC_BINS             6
  8. #define DC_DUPLEX           7
  9. #define DC_SIZE             8
  10. #define DC_EXTRA            9
  11. #define DC_VERSION          10
  12. #define DC_DRIVER           11
  13. #define DC_BINNAMES         12
  14. #define DC_ENUMRESOLUTIONS  13
  15. #define DC_FILEDEPENDENCIES 14
  16. #define DC_TRUETYPE         15
  17. #define DC_PAPERNAMES       16
  18. #define DC_ORIENTATION      17
  19. #define DC_COPIES           18
  20. declare long DeviceCapabilities in winspool.drv ;
  21.   string  lpDeviceName, ;
  22.   string  lpPort, ;
  23.   long    iIndex, ;
  24.   string  @ lpOutput, ;
  25.   long    lpDevMode
  26. m.nPapers = DeviceCapabilities( set("printer",2), null, DC_PAPERS, null, 0 )
  27. m.cBuff0 = space( m.nPapers * 2 )
  28. m.cBuff1 = space( m.nPapers * 8 )
  29. m.cBuff2 = space( m.nPapers * 64 )
  30. DeviceCapabilities( set("Printer",2), null, DC_PAPERS,     @ m.cbuff0, 0 )
  31. DeviceCapabilities( set("Printer",2), null, DC_PAPERSIZE,  @ m.cbuff1, 0 )
  32. DeviceCapabilities( set("Printer",2), null, DC_PAPERNAMES, @ m.cbuff2, 0 )
  33. '纸编号' + TAB + '尺寸' + TAB + TAB + '名称'
  34. ? replicate( '-', 80 )
  35. for m.ii = 1 to m.nPapers
  36.   ? transform( ctobin( substr( m.cbuff0, (m.ii-1)*2+1, 2 ), '2rs' )) + TAB ;
  37.   + transform( ctobin( substr( m.cbuff1, (m.ii-1)*8+1, 4 ), 'rs' )) + ' x ' ;
  38.   + transform( ctobin( substr( m.cbuff1, (m.ii-1)*8+5, 4 ), 'rs' )) + TAB ;
  39.   + rtrim( rtrim( substr( m.cbuff2, (m.ii-1)*64+1, 64 )), chr(0))
  40. endfor
  41. ? replicate( '-', 80 )
  42. m.cMin = DeviceCapabilities( set("Printer",2), null, DC_MINEXTENT, 0, 0 )
  43. m.cMax = DeviceCapabilities( set("Printer",2), null, DC_MAXEXTENT, 0, 0 )
  44. '最小自定义纸张尺寸:', transform( m.cMin % 0x10000 ) ;
  45.   + ' x ' + transform( int( m.cMin / 0x10000 ))
  46. '最大自定义纸张尺寸:', transform( m.cMax % 0x10000 ) ;
  47.   + ' x ' + transform( int( m.cMax / 0x10000 ))

 

抱歉!评论已关闭.