|
-
- *------------------------------------------------------------------------
- * 功 能 获取纸张页边距
- * 运行环境: Microsoft Visual FoxPro 9.0
- * 日 期: yxgzs于2005年6月
- * 阿杰整理收集于:2010年8月10日
- *------------------------------------------------------------------------
- If Sys(1037)="0"
- Return
- Endif
- Clear
- Local lcSelect, lcFrx, lcDriver, lcDevice, lcDEVMODE
- m.lcSelect=Select()
- m.lcFrx=Sys(2023)+""+Sys(3)
- Create Cursor lcCursor (EmpID N(1))
- Create Report (m.lcFrx+".FRX") From Dbf() Fields (Field(1))
- Use (m.lcFrx+".FRX") Exclusive
- *!* 如果是VFP9以前版本或报表设置为保存打印机环境,以下两句不要
- Replace Expr With "",Tag With "",TAG2 With ""
- =Sys(1037,2)
- m.lcDriver = Substr(Mline(Expr,Atline("DRIVER",Expr)),8)
- m.lcDevice = Substr(Mline(Expr,Atline("DEVICE",Expr)),8)
- m.lcDEVMODE=TAG2
- Use
- Select (m.lcSelect)
- Delete File (m.lcFrx+".*")
- Declare Integer CreateIC ;
- in gdi32 ;
- string lpszDriver, ;
- string lpszDevice, ;
- string lpszOutput, ;
- string lpdvmInit
- Declare Integer GetDeviceCaps ;
- in gdi32 ;
- integer hdc, ;
- integer nIndex
- Declare Integer DeleteDC ;
- in gdi32 ;
- integer hdc
- Try
- Local iHDC
- m.iHDC = CreateIC( m.lcDriver, m.lcDevice, Chr(0), m.lcDEVMODE )
- If m.iHDC = 0
- ?"获取纸张信息失败"
- Else
- m.PrintableX = GetDeviceCaps( m.iHDC, 8 )
- m.PrintableY = GetDeviceCaps( m.iHDC, 10 )
- m.dpiX = GetDeviceCaps( m.iHDC, 88 )
- m.dpiY = GetDeviceCaps( m.iHDC, 90 )
- m.OffsetX = GetDeviceCaps( m.iHDC, 112 )
- m.OffsetY = GetDeviceCaps( m.iHDC, 113 )
- m.ActualX = GetDeviceCaps( m.iHDC, 110 )
- m.ActualY = GetDeviceCaps( m.iHDC, 111 )
- ?"打印机 "+Left(m.lcDEVMODE,At(Chr(0),m.lcDEVMODE)-1)
- m.lcFrx=Substr(m.lcDEVMODE,71,40)
- ?"纸张名 "+Left(m.lcFrx,At(Chr(0),m.lcFrx)-1)
- ?"纸纸宽 = "
- ??Round(m.ActualX*25.4/m.dpiX,1)
- ?"纸纸高 ="
- ??Round(m.ActualY*25.4/m.dpiY,1)
- ?"上边距 ="
- ??Iif(m.OffsetY>0,Round(m.OffsetY*25.4/m.dpiY+0.05,1),0.0)
- ?"下边距 ="
- ??Iif(m.ActualY-m.PrintableY-m.OffsetY=0,0.0,Round((m.ActualY-m.PrintableY-m.OffsetY)*25.4/m.dpiY+0.05,1))
- ?"左边距 ="
- ??Iif(m.OffsetX>0,Round(m.OffsetX*25.4/m.dpiX+0.05,1),0.0)
- ?"右边距 ="
- ??Iif(m.ActualX-m.PrintableX-m.OffsetX=0,0.0,Round((m.ActualX-m.PrintableX-m.OffsetX)*25.4/m.dpiX+0.05,1))
- Endif
- Catch
- Endtry
- Clear Dlls "GetDeviceCaps","DeleteDC"
复制代码 |
|