打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VF设置打印机若干方法

很久以来,关于VFP打印的纸张设置一直是个难题。也有很多这方面的贴子。其实他们也解决了大部分问题。只是没有归纳起来。童心未免win2000/xp纸张设置,李彤的在Visual FoxPro 6中动态修改打印纸张大小(win98,他们都解决了在win2000\\xp\\98中自定义纸张的设置问题。我在他们的基础上稍作归纳,加上了一点自己的想法,做成了一个类。可以自己根据系统设置自定义纸张。

其中heap类就是童心未免的,函数setwin98_page就是李彤的。当然我在他们的基础上根据我的想法做了一定的修改。

整个调用是这样的:在主程序中先建立heap类实列(如Oheap)(也可以将heap添加到表单),在表单中添加Myplt

表单在打印或预览时代码如下:

oApp.setpage(\"FHMX\",this.pageWidth,this.pagehight)

(报表文件名,宽度(mm,宽度(mm)

*设置预览尺寸(cm)
IF this.pagehight>0 AND this.pageWidth>0
this.myplt1.sheight=this.pagehight/10
this.myplt1.swidth =this.pageWidth/10
ELSE
this.myplt1.sheight=29.7
this.myplt1.swidth =21
ENDIF 
this.myplt1.ListenerType=1

loreport=.NULL.
DO (_REPORTPREVIEW) WITH loreport
WITH loreport
.Caption = \"
订单预览\"
.ZoomLevel = 4 && 75%
.CanvasCount = 1
ENDWITH
this.myplt1.PreviewContainer =loreport

REPORT FORMreports\\fhmx TO PRINTER Object this.myplt1

可能里面有些代码有问题,因为它是和我的程序配合使用的,我开始并没有单独做,才整理的,没做测试。但里面的代码没有原则问题。我在win2000\\xp\\98都作了测试。如果有问题,稍做改动就可以了,我想各位没问题。

 

 

 

 

 

 

 

 

 

 

VFP进行系统打印机的走向和纸张设置

时间:2012-11-2519:26:34 点击: 231

  核心提示:SetPrinter来进行系统打印机的走向和纸张设置...

*----------------------------声明--------------------------------*

DECLARE INTEGER OpenPrinter INwinspool.drv;
         STRING pPrinterName,INTEGER @phPrinter, INTEGER pDefault
DECLARE INTEGER GetProfileString IN kernel32;
         STRING lpApp, STRINGlpKey, STRING lpDefault,;
         STRING @lpReturnedString,INTEGER nSize
DECLARE INTEGER ClosePrinter IN winspool.drv INTEGER hPrinter
DECLARE INTEGER DocumentProperties IN winspool.drv;
         INTEGER hWnd, INTEGERhPrinter, STRING pDeviceName,;
         STRING @pDevModeOutput,STRING @pDevModeInput, INTEGER fMode
DECLARE INTEGER SetPrinter IN winspool.drv;
        INTEGER hPrinter,;
        INTEGER lvl,;
        STRING @ pPrinter,;
        INTEGER cmd
DECLARE INTEGER GetPrinter IN winspool.drv AS GetPrinterA;
        INTEGER   hPrinter,;
        INTEGER   Lvl,;
        STRING   @pPrinter,;
        INTEGER   cbBuf,;

        INTEGER@ pcbNeeded 

*----------------------------实例--------------------------------*

nOrient=2&&横向
PaperSize=0x0B&& A5
nSize=0
lcBuffer = Repli(Chr(0), 120)
GetProfileString("Windows", "Device",",,,",    @lcBuffer, Len(lcBuffer))
lcBuffer = STRTRAN(lcBuffer, Chr(0), "")
cPrinter = SUBSTR(lcBuffer, 1, AT(",", lcBuffer, 1)-1)&&系统
当前默认打印机名称
hPrinter = 0
OpenPrinter(cPrinter,@hPrinter,0)
nBufsize = DocumentProperties(0, hPrinter,cPrinter,0,0,0)
GetPrinterA(hPrinter,2,0,0,@nSize)
pPrinter=REPLICATE(CHR(0),nSize)
GetPrinterA(hPrinter,2,@pPrinter,nSize,@nSize)
s=CTOBIN(SUBSTR(pPrinter,29,4),'4rs')
cDevmode=SYS(2600,s,nBufsize)&&
读取Devmode结构
aDevmode=AT(cDevmode,pPrinter)&&
找出Devmode结构在PRINTER_INFO_2中的位置
&&
设置新的走向,就是把PRINTER_INFO_2中的Devmode结构中的走向改掉
pPrinter=STUFF(pPrinter,aDevmode+44,1,CHR(nOrient))
pPrinter=STUFF(pPrinter,aDevmode+76,1,CHR(nOrient))
&&
纸张就是把PRINTER_INFO_2中的Devmode结构中的纸张改掉
pPrinter=STUFF(pPrinter,aDevmode+46,1,CHR(PaperSize))
pPrinter=STUFF(pPrinter,aDevmode+78,1,CHR(PaperSize))
SetPrinter(hPrinter,2,@pPrinter,0)
ClosePrinter(hPrinter)

再打开控制面板中的默认打印机看看是不是走向和纸张都变了?

 

VFP更改当前程序打印机的打印方向

时间:2012-11-2519:24:10 点击: 41

  核心提示:DocumentProperties函数来更改当前程序打印机的打印方向:程序代码如下...

DocumentProperties函数来更改当前程序打印机的打印方向:
*-----------------------------------------------------------------*
*-VFP
应用程式算法群*
*-----------------------------------------------------------------*

 

*----------------------------声明--------------------------------*

DECLARE INTEGER OpenPrinter INwinspool.drv;
         STRING pPrinterName,INTEGER @phPrinter, INTEGER pDefault
DECLARE INTEGER GetProfileString IN kernel32;
         STRING lpApp, STRINGlpKey, STRING lpDefault,;
         STRING @lpReturnedString,INTEGER nSize
DECLARE INTEGER ClosePrinter IN winspool.drv INTEGER hPrinter
DECLARE INTEGER DocumentProperties IN winspool.drv;
         INTEGER hWnd, INTEGERhPrinter, STRING pDeviceName,;
         STRING @pDevModeOutput,STRING @pDevModeInput, INTEGER fMode
DECLARE INTEGER SetPrinter IN winspool.drv;
        INTEGER hPrinter,;
        INTEGER lvl,;
        STRING @ pPrinter,;
        INTEGER cmd
DECLARE INTEGER GetPrinter IN winspool.drv AS GetPrinterA;
        INTEGER   hPrinter,;
        INTEGER   Lvl,;
        STRING   @pPrinter,;
        INTEGER   cbBuf,;

        INTEGER@ pcbNeeded 

 

*----------------------------实例--------------------------------*


#DEFINE IDCANCEL 2&&
横向
#DEFINE DM_OUT_BUFFER 2
#DEFINE DM_IN_BUFFER 8
#DEFINE DM_IN_PROMPT 4
local hWindow, cPrinter, cDriver, cPort, hPrinter, nBufsize, cDevmode
APRINTERS(gaPrinters)&&
改函数用来获取VFP默认打印机名称,注意vfp默认并不代表系统全局默认。
cPrinter=gaPrinters(1,1)
hPrinter = 0
OpenPrinter(cPrinter,@hPrinter,0)
IF hPrinter = 0
     Messagebox("
不能打开默认打印机!", 48, "错误")
     RETURN
ENDIF
nBufsize = DocumentProperties(hWindow, hPrinter, cPrinter,0,0,0)&&
获取DEVMODE结构大小
cDevmode = Repli(Chr(0), nBufsize)
nOrient= DMORIENT_LANDSCAPE&&
横向
DocumentProperties(hWindow, hPrinter, cPrinter, @cDevmode, 0,DM_OUT_BUFFER)&&
获取DEVMODE结构缓冲区字串
cDevmode=SUBSTR(cDevmode,1,44)+BINTOC(nOrient,'2rs')+SUBSTR(cDevmode,47,nBufsize-47)&&
更改DEVMODE结构中打印走向的部分
DocumentProperties(hWindow, hPrinter, cPrinter,@cDevmode,@cDevmode,DM_IN_BUFFER+DM_OUT_BUFFER)&&
更新打印机DEVMOD
DocumentProperties(hWindow, hPrinter, cPrinter, @cDevmode, @cDevmode,DM_IN_PROMPT+DM_IN_BUFFER+DM_OUT_BUFFER)&&
看看变了没
ClosePrinter(hPrinter)

这样设置打印机是不是很简单?如果在VFP中测试本段代码会发现在vfp中打印机设置确实变了,但在控制面板中并没有变,这就是所谓的
DocumentProperties
函数是用来设置当前单一程序的打印机。

 

 

VFP更改当前程序打印机的打印方向

时间:2012-11-2519:24:10 点击: 41

  核心提示:DocumentProperties函数来更改当前程序打印机的打印方向:程序代码如下...

DocumentProperties函数来更改当前程序打印机的打印方向:
*-----------------------------------------------------------------*
*-VFP
应用程式算法群*
*-----------------------------------------------------------------*

 

*----------------------------声明--------------------------------*

DECLARE INTEGER OpenPrinter INwinspool.drv;
         STRING pPrinterName,INTEGER @phPrinter, INTEGER pDefault
DECLARE INTEGER GetProfileString IN kernel32;
         STRING lpApp, STRINGlpKey, STRING lpDefault,;
         STRING @lpReturnedString,INTEGER nSize
DECLARE INTEGER ClosePrinter IN winspool.drv INTEGER hPrinter
DECLARE INTEGER DocumentProperties IN winspool.drv;
         INTEGER hWnd, INTEGERhPrinter, STRING pDeviceName,;
         STRING @pDevModeOutput,STRING @pDevModeInput, INTEGER fMode
DECLARE INTEGER SetPrinter IN winspool.drv;
        INTEGER hPrinter,;
        INTEGER lvl,;
        STRING @ pPrinter,;
        INTEGER cmd
DECLARE INTEGER GetPrinter IN winspool.drv AS GetPrinterA;
        INTEGER   hPrinter,;
        INTEGER   Lvl,;
        STRING   @pPrinter,;
        INTEGER   cbBuf,;

        INTEGER@ pcbNeeded 

 

*----------------------------实例--------------------------------*


#DEFINE IDCANCEL 2&&
横向
#DEFINE DM_OUT_BUFFER 2
#DEFINE DM_IN_BUFFER 8
#DEFINE DM_IN_PROMPT 4
local hWindow, cPrinter, cDriver, cPort, hPrinter, nBufsize, cDevmode
APRINTERS(gaPrinters)&&
改函数用来获取VFP默认打印机名称,注意vfp默认并不代表系统全局默认。
cPrinter=gaPrinters(1,1)
hPrinter = 0
OpenPrinter(cPrinter,@hPrinter,0)
IF hPrinter = 0
     Messagebox("
不能打开默认打印机!", 48, "错误")
     RETURN
ENDIF
nBufsize = DocumentProperties(hWindow, hPrinter, cPrinter,0,0,0)&&
获取DEVMODE结构大小
cDevmode = Repli(Chr(0), nBufsize)
nOrient= DMORIENT_LANDSCAPE&&
横向
DocumentProperties(hWindow, hPrinter, cPrinter, @cDevmode, 0,DM_OUT_BUFFER)&&
获取DEVMODE结构缓冲区字串
cDevmode=SUBSTR(cDevmode,1,44)+BINTOC(nOrient,'2rs')+SUBSTR(cDevmode,47,nBufsize-47)&&
更改DEVMODE结构中打印走向的部分
DocumentProperties(hWindow, hPrinter, cPrinter,@cDevmode,@cDevmode,DM_IN_BUFFER+DM_OUT_BUFFER)&&
更新打印机DEVMOD
DocumentProperties(hWindow, hPrinter, cPrinter, @cDevmode, @cDevmode,DM_IN_PROMPT+DM_IN_BUFFER+DM_OUT_BUFFER)&&
看看变了没
ClosePrinter(hPrinter)

这样设置打印机是不是很简单?如果在VFP中测试本段代码会发现在vfp中打印机设置确实变了,但在控制面板中并没有变,这就是所谓的
DocumentProperties
函数是用来设置当前单一程序的打印机。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VB 报表页面设置
如何通过使用 Visual C#.net 将原始数据发送到打印机
DocumentProperties函数功能
RawDataToPrinter
3D打印机DRV8825步进电机驱动器,这个驱动如何?|创意DIY
看到一个VB打印模块,保存一下
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服