首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

VFP9的BUG?——PRTINFO()函数的有关问题

2013-04-02 
VFP9的BUG?——PRTINFO()函数的问题!系统环境:Windows Server 2003 sp2 + VFP9 sp2 (7423)需要获得当前默认

VFP9的BUG?——PRTINFO()函数的问题!
系统环境:Windows Server 2003 sp2 + VFP9 sp2 (7423)
需要获得当前默认打印机所选纸张的纸宽和纸高,然而无论在打印设置中选择的是什么规格的纸张,使用PRTINFO()函数获得的纸宽和纸高值竟然都是-1。代码为:

#DEFINE PRT_PAPERSIZE           2
#DEFINE PRT_PAPERLENGTH         3
#DEFINE PRT_PAPERWIDTH          4
MESSAGEBOX(;
"Paper size :" + TRANSFORM(PRTINFO(PRT_PAPERSIZE)) + CHR(13) + ;
"Paper width :" + TRANSFORM(PRTINFO(PRT_PAPERWIDTH)) + CHR(13) + ;
"Paper height :" + TRANSFORM(PRTINFO(PRT_PAPERLENGTH)) + CHR(13) + CHR(13) + ;
"Paper size :" + TRANSFORM(PRTINFO(2)) + CHR(13) + ;
"Paper width :" + TRANSFORM(PRTINFO(4)) + CHR(13) + ;
"Paper height :" + TRANSFORM(PRTINFO(3)),;
64,"Printer info")


对于A4纸,PRTINFO(PRT_PAPERSIZE)的返回值是9,这个是正常的。但是PRTINFO(PRT_PAPERWIDTH)与PRTINFO(PRT_PAPERLENGTH)返回的却都是-1,而不是2100和2970!

但是,使用VC++却能获得默认打印机所选纸张的准确信息,代码为:
CPrintDialog printDlg(FALSE);
if(!printDlg.GetDefaults())
{
MessageBox("您的系统上没有安装打印机!","默认打印机",MB_OK);
return FALSE;
}
CString strPrinter("");
LPDEVMODE pDevMode = printDlg.GetDevMode();
strPrinter.Format("默认打印机:%s,端口:%s,驱动:%s\r\nPaperSize:%d,PaperWidth:%d,PaperLength:%d",
printDlg.GetDeviceName(),printDlg.GetPortName(),printDlg.GetDriverName(),
pDevMode->dmPaperSize,pDevMode->dmPaperWidth,pDevMode->dmPaperLength);
MessageBox(strPrinter,"默认打印机信息",MB_OK);


对于A4纸,上述代码在MFC中返回的打印机信息为:
默认打印机:Canon iP1100 series,端口:USB001,驱动:winspool
PaperSize:9,PaperWidth:2100,PaperLength:2970

有人遇到过这种情况吗?注意:与打印机是否联机无关!另外,VFP9的PRTINFO()帮助中根本没有对参数为PRT_PAPERWIDTH和PRT_PAPERLENGTH时返回值的解释说明。
[解决办法]
我測試了,你代碼是對的,和打印機驅動有關,我預設我機子上的打印機為SHARP350時,和你的情況一樣,但換成SHARP451時返回正常!
[解决办法]
MyFll.fll 下载地址:

http://www.meizvfp.com/bbs/dispbbs.asp?BoardID=2&replyID=3211&ID=88373&skin=1
[解决办法]
运行你的程序,可以得到2970*2100,不过 提示有错误

热点排行