找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5786|回复: 0

[开源] 获取纸张页边距

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2010-8-10 17:20:39 | 显示全部楼层 |阅读模式

  1. *------------------------------------------------------------------------
  2. * 功 能 获取纸张页边距
  3. * 运行环境: Microsoft Visual FoxPro 9.0
  4. * 日 期: yxgzs于2005年6月
  5. * 阿杰整理收集于:2010年8月10日
  6. *------------------------------------------------------------------------
  7. If Sys(1037)="0"
  8.         Return
  9. Endif
  10. Clear
  11. Local lcSelect, lcFrx, lcDriver, lcDevice, lcDEVMODE
  12. m.lcSelect=Select()
  13. m.lcFrx=Sys(2023)+""+Sys(3)
  14. Create Cursor lcCursor (EmpID N(1))
  15. Create Report (m.lcFrx+".FRX") From Dbf() Fields (Field(1))
  16. Use (m.lcFrx+".FRX") Exclusive
  17. *!* 如果是VFP9以前版本或报表设置为保存打印机环境,以下两句不要
  18. Replace Expr With "",Tag With "",TAG2 With ""
  19. =Sys(1037,2)
  20. m.lcDriver = Substr(Mline(Expr,Atline("DRIVER",Expr)),8)
  21. m.lcDevice = Substr(Mline(Expr,Atline("DEVICE",Expr)),8)
  22. m.lcDEVMODE=TAG2
  23. Use
  24. Select (m.lcSelect)
  25. Delete File (m.lcFrx+".*")

  26. Declare Integer CreateIC ;
  27.         in gdi32 ;
  28.         string lpszDriver, ;
  29.         string lpszDevice, ;
  30.         string lpszOutput, ;
  31.         string lpdvmInit

  32. Declare Integer GetDeviceCaps ;
  33.         in gdi32 ;
  34.         integer hdc, ;
  35.         integer nIndex

  36. Declare Integer DeleteDC ;
  37.         in gdi32 ;
  38.         integer hdc

  39. Try
  40.         Local iHDC
  41.         m.iHDC = CreateIC( m.lcDriver, m.lcDevice, Chr(0), m.lcDEVMODE )
  42.         If m.iHDC = 0
  43.                 ?"获取纸张信息失败"
  44.         Else
  45.                 m.PrintableX = GetDeviceCaps( m.iHDC, 8 )
  46.                 m.PrintableY = GetDeviceCaps( m.iHDC, 10 )
  47.                 m.dpiX = GetDeviceCaps( m.iHDC, 88 )
  48.                 m.dpiY = GetDeviceCaps( m.iHDC, 90 )
  49.                 m.OffsetX = GetDeviceCaps( m.iHDC, 112 )
  50.                 m.OffsetY = GetDeviceCaps( m.iHDC, 113 )
  51.                 m.ActualX = GetDeviceCaps( m.iHDC, 110 )
  52.                 m.ActualY = GetDeviceCaps( m.iHDC, 111 )

  53.                 ?"打印机 "+Left(m.lcDEVMODE,At(Chr(0),m.lcDEVMODE)-1)
  54.                 m.lcFrx=Substr(m.lcDEVMODE,71,40)
  55.                 ?"纸张名 "+Left(m.lcFrx,At(Chr(0),m.lcFrx)-1)
  56.                 ?"纸纸宽 = "
  57.                 ??Round(m.ActualX*25.4/m.dpiX,1)
  58.                 ?"纸纸高 ="
  59.                 ??Round(m.ActualY*25.4/m.dpiY,1)
  60.                 ?"上边距 ="
  61.                 ??Iif(m.OffsetY>0,Round(m.OffsetY*25.4/m.dpiY+0.05,1),0.0)
  62.                 ?"下边距 ="
  63.                 ??Iif(m.ActualY-m.PrintableY-m.OffsetY=0,0.0,Round((m.ActualY-m.PrintableY-m.OffsetY)*25.4/m.dpiY+0.05,1))
  64.                 ?"左边距 ="
  65.                 ??Iif(m.OffsetX>0,Round(m.OffsetX*25.4/m.dpiX+0.05,1),0.0)
  66.                 ?"右边距 ="
  67.                 ??Iif(m.ActualX-m.PrintableX-m.OffsetX=0,0.0,Round((m.ActualX-m.PrintableX-m.OffsetX)*25.4/m.dpiX+0.05,1))
  68.         Endif
  69. Catch
  70. Endtry
  71. Clear Dlls "GetDeviceCaps","DeleteDC"
复制代码
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表