| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1523 人关注过本帖
标题:VFP打印表单问题
只看楼主 加入收藏
fnxyy
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2009-3-25
结帖率:0
收藏
已结贴  问题点数:10 回复次数:8 
VFP打印表单问题
请教如何将表单内容打印出来,从网上搜的内容都是出自一篇文章,

搜索更多相关主题的帖子: 如何 文章 打印 表单 
2012-09-16 20:10
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用fnxyy在2012-9-16 20:10:46的发言:

请教如何将表单内容打印出来,从网上搜的内容都是出自一篇文章,
请楼主把问题说明白。
表单内容直接打印出来。
表单内容通过VFP报表或EXCEL工作簿打印出来。
不知是那种意思。

坚守VFP最后的阵地
2012-09-16 20:15
fnxyy
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2009-3-25
收藏
得分:0 
都是出自一位红虎工作室写的,其它再也搜不了
2012-09-16 20:37
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
是用WINAPI函数写的代码?
到行者孙博客中搜索下
http://hi.baidu.com/myvfp/item/85db4f5a371f3413da16355e

[ 本帖最后由 sdta 于 2012-9-16 20:41 编辑 ]

坚守VFP最后的阵地
2012-09-16 20:40
fnxyy
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2009-3-25
收藏
得分:0 
哦,是这样的,表单中有个OLE控件,打印了一个曲线图,这样用报表的方法可能无法打印了,所以从表单中直接打印更适合些,但从网上搜不到更好的文章,所以请教诸位
2012-09-16 20:41
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:10 
以下是引用fnxyy在2012-9-16 20:41:01的发言:

哦,是这样的,表单中有个OLE控件,打印了一个曲线图,这样用报表的方法可能无法打印了,所以从表单中直接打印更适合些,但从网上搜不到更好的文章,所以请教诸位
把你那个代码帖上来看看

坚守VFP最后的阵地
2012-09-16 20:42
fnxyy
Rank: 1
等 级:新手上路
帖 子:8
专家分:5
注 册:2009-3-25
收藏
得分:0 
如何将表单内容直接打印出来,OLE控件生成的图形,不能用报表了
2012-09-16 20:55
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
回复 7楼 fnxyy
程序代码:
VFP中将表单的内容直接打印 

在某表单的一个command
按纽中执行 do PrintForm.prg 


*-- 定义常量
#DEFINE LOGPIXELSX 88
#DEFINE LOGPIXELSY 90
#DEFINE PHYSICALOFFSETX 112
#DEFINE PHYSICALOFFSETY 113
#DEFINE SRCCOPY 13369376
#DEFINE DIB_RGB_COLORS 0

*-- 调用本程序段中的子过程
DO decl

*-- 定义变量
PRIVATE pnWidth, pnHeight, lnBitsPerPixel, lnBytesPerScan
STORE 0 TO pnWidth, pnHeight, lnBitsPerPixel, lnBytesPerScan
LOCAL hwnd, hFormDC, hPrnDC, hMemDC, hMemBmp, hSavedBitmap,;
xOffsPrn, yOffsPrn, xScale, yScale, lcDocInfo, lcBInfo, lpBitsArray

*-- 得到打印机设备的坐标偏移量
hPrnDC = getDefaultPrnDC() && 没有进行错误检查
xOffsPrn = GetDeviceCaps(hPrnDC, PHYSICALOFFSETX)
yOffsPrn = GetDeviceCaps(hPrnDC, PHYSICALOFFSETY)

*-- 得到屏幕的窗口句柄,及她们的宽度、高度等。
hwnd = GetFocus() && a window with keyboard focus
hFormDC = GetWindowDC(hwnd)
= getWinRect (hwnd, @pnWidth, @pnHeight)

*-- 根据屏幕和打印机得到缩放值
xScale = GetDeviceCaps(hPrnDC, LOGPIXELSX)/GetDeviceCaps(hFormDC,LOGPIXELSX)
yScale = GetDeviceCaps(hPrnDC, LOGPIXELSY)/GetDeviceCaps(hFormDC,LOGPIXELSY)

*-- 将屏幕的内容创建为位图图象数据
hMemDC = CreateCompatibleDC (hFormDC)
hMemBmp = CreateCompatibleBitmap (hFormDC, pnWidth, pnHeight)
hSavedBitmap = SelectObject(hMemDC, hMemBmp)

*-- 将位图数据从屏幕拷贝到虚拟设备上
= BitBlt (hMemDC, 0,0, pnWidth,pnHeight, hFormDC, 0,0, SRCCOPY)
= SelectObject(hMemDC, hSavedBitmap)

* retrieving bits from the compatible bitmap into a buffer
* as a device-independent bitmap (DIB) with a BitsPerPixel value
* as one of the printer device context
lcBInfo = InitBitmapInfo(hPrnDC)
lpBitsArray = InitBitsArray()
= GetDIBits (hMemDC, hMemBmp, 0, pnHeight,;
lpBitsArray, @lcBInfo, DIB_RGB_COLORS)

lcDocInfo = Chr(20) + Repli(Chr(0), 19) && DOCINFO struct - 20 bytes
IF StartDoc(hPrnDC, @lcDocInfo) > 0
= StartPage(hPrnDC)

= StretchDIBits (hPrnDC, xOffsPrn, yOffsPrn,;
xOffsPrn + Int(xScale * pnWidth),;
yOffsPrn + Int(yScale * pnHeight),;
0,0, pnWidth, pnHeight,;
lpBitsArray, @lcBInfo, DIB_RGB_COLORS, SRCCOPY)

= EndPage(hPrnDC)
= EndDoc(hPrnDC)
ENDIF

*-- 退出时释放系统资源
= GlobalFree(lpBitsArray)
= DeleteObject(hMemBmp)
= DeleteDC(hMemDC)
= DeleteDC(hPrnDC)
= ReleaseDC(hwnd, hFormDC)
RETURN

PROCEDURE getWinRect (lnHwnd, lnWidth, lnHeight)
*-- 返回指定句柄的窗口的宽和高
#DEFINE maxDword 4294967295 && 0xffffffff
LOCAL lpRect, lnLeft, lnTop, lnRight, lnBottom
lpRect = REPLI (Chr(0), 16)
= GetWindowRect (lnHwnd, @lpRect)

lnRight = buf2dword(SUBSTR(lpRect, 9,4))
lnBottom = buf2dword(SUBSTR(lpRect, 13,4))

lnLeft = buf2dword(SUBSTR(lpRect, 1,4))
IF lnLeft > lnRight
lnLeft = lnLeft - maxDword
ENDIF
lnTop = buf2dword(SUBSTR(lpRect, 5,4))
IF lnTop > lnBottom
lnTop = lnTop - maxDword
ENDIF

lnWidth = lnRight - lnLeft
lnHeight = lnBottom - lnTop
RETURN

FUNCTION getDefaultPrnDC
* returns device context for the default printer
#DEFINE PD_RETURNDC 256
#DEFINE PD_RETURNDEFAULT 1024
LOCAL lcStruct, lnFlags
lnFlags = PD_RETURNDEFAULT + PD_RETURNDC

* fill PRINTDLG structure
lcStruct = num2dword(66) + Repli(Chr(0), 16) +;
num2dword(lnFlags) + Repli(Chr(0), 42)
IF PrintDlg (@lcStruct) <> 0
RETURN buf2dword (SUBSTR(lcStruct, 17,4))
ENDIF
RETURN 0

FUNCTION InitBitmapInfo(hTargetDC)
#DEFINE BI_RGB 0
#DEFINE RGBQUAD_SIZE 4 && RGBQUAD
#DEFINE BHDR_SIZE 40 && BITMAPINFOHEADER

LOCAL lnRgbQuadSize, lcRgbQuad, lcBIHdr

* use printer BitPerPixel value
lnBitsPerPixel = 24

* initializing BitmapInfoHeader structure
lcBIHdr = num2dword(BHDR_SIZE) +;
num2dword(pnWidth) + num2dword(pnHeight) +;
num2word(1) + num2word(lnBitsPerPixel) +;
num2dword(BI_RGB) + Repli(Chr(0), 20)

* creating a buffer for the color table
IF lnBitsPerPixel <= 8
lnRgbQuadSize = (2^lnBitsPerPixel) * RGBQUAD_SIZE
lcRgbQuad = Repli(Chr(0), lnRgbQuadSize)
ELSE
lcRgbQuad = ""
ENDIF
RETURN lcBIHdr + lcRgbQuad

PROCEDURE InitBitsArray()
#DEFINE GMEM_FIXED 0
LOCAL lnPtr, lnAllocSize

* making sure the value is DWORD-aligned
lnBytesPerScan = Int((pnWidth * lnBitsPerPixel)/8)
IF Mod(lnBytesPerScan, 4) <> 0
lnBytesPerScan = lnBytesPerScan + 4 - Mod(lnBytesPerScan, 4)
ENDIF

lnAllocSize = pnHeight * lnBytesPerScan
lnPtr = GlobalAlloc (GMEM_FIXED, lnAllocSize)
= ZeroMemory (lnPtr, lnAllocSize)
RETURN lnPtr

FUNCTION num2word (lnValue)
RETURN Chr(MOD(m.lnValue,256)) + CHR(INT(m.lnValue/256))

FUNCTION num2dword (lnValue)
#DEFINE m0 256
#DEFINE m1 65536
#DEFINE m2 16777216
LOCAL b0, b1, b2, b3
b3 = Int(lnValue/m2)
b2 = Int((lnValue - b3*m2)/m1)
b1 = Int((lnValue - b3*m2 - b2*m1)/m0)
b0 = Mod(lnValue, m0)
RETURN Chr(b0)+Chr(b1)+Chr(b2)+Chr(b3)

FUNCTION buf2word (lcBuffer)
RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;
Asc(SUBSTR(lcBuffer, 2,1)) * 256

FUNCTION buf2dword (lcBuffer)
RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;
Asc(SUBSTR(lcBuffer, 2,1)) * 256 +;
Asc(SUBSTR(lcBuffer, 3,1)) * 65536 +;
Asc(SUBSTR(lcBuffer, 4,1)) * 16777216

PROCEDURE decl && so many of them declared here
DECLARE INTEGER GetFocus IN user32
DECLARE INTEGER EndDoc IN gdi32 INTEGER hdc
DECLARE INTEGER GetWindowDC IN user32 INTEGER hwnd
DECLARE INTEGER DeleteObject IN gdi32 INTEGER hObject
DECLARE INTEGER CreateCompatibleDC IN gdi32 INTEGER hdc
DECLARE INTEGER ReleaseDC IN user32 INTEGER hwnd, INTEGER hdc
DECLARE INTEGER GetWindowRect IN user32 INTEGER hwnd, STRING @lpRect
DECLARE INTEGER GlobalAlloc IN kernel32 INTEGER wFlags, INTEGER dwBytes
DECLARE INTEGER GetDeviceCaps IN gdi32 INTEGER hdc, INTEGER nIndex
DECLARE INTEGER SelectObject IN gdi32 INTEGER hdc, INTEGER hObject
DECLARE INTEGER StartDoc IN gdi32 INTEGER hdc, STRING @ lpdi
DECLARE INTEGER GlobalFree IN kernel32 INTEGER hMem
DECLARE INTEGER PrintDlg IN comdlg32 STRING @ lppd
DECLARE INTEGER DeleteDC IN gdi32 INTEGER hdc
DECLARE INTEGER StartPage IN gdi32 INTEGER hdc
DECLARE INTEGER EndPage IN gdi32 INTEGER hdc

DECLARE RtlZeroMemory IN kernel32 As ZeroMemory;
INTEGER dest, INTEGER numBytes

DECLARE INTEGER CreateCompatibleBitmap IN gdi32;
INTEGER hdc, INTEGER nWidth, INTEGER nHeight

DECLARE INTEGER BitBlt IN gdi32;
INTEGER hDestDC, INTEGER x, INTEGER y,;
INTEGER nWidth, INTEGER nHeight, INTEGER hSrcDC,;
INTEGER xSrc, INTEGER ySrc, INTEGER dwRop

DECLARE INTEGER StretchDIBits IN gdi32;
INTEGER hdc, INTEGER XDest, INTEGER YDest,;
INTEGER nDestWidth, INTEGER nDestHeight, INTEGER XSrc,;
INTEGER YSrc, INTEGER nSrcWidth, INTEGER nSrcHeight,;
INTEGER lpBits, STRING @lpBitsInfo,;
INTEGER iUsage, INTEGER dwRop

DECLARE INTEGER GetDIBits IN gdi32;
INTEGER hdc, INTEGER hbmp, INTEGER uStartScan,;
INTEGER cScanLines, INTEGER lpvBits, STRING @lpbi,;
INTEGER uUsage
RETURN && decl 
楼主自己研究吧,转载

坚守VFP最后的阵地
2012-09-16 21:05
ddd16
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2019-3-15
收藏
得分:0 
回复 2楼 sdta
请问一下将表单里面的内容 通过报表怎么打印出来呢
2019-03-20 11:42
快速回复:VFP打印表单问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032301 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved