老生常谈 自定义纸张大小的问题(50分)

  • 主题发起人 主题发起人 Lambert
  • 开始时间 开始时间
L

Lambert

Unregistered / Unconfirmed
GUEST, unregistred user!
大家都知道,如果要输出自定义纸张的报表,要把在程序中设定纸张类型为自定义,还要在
系统中把打印机的属性也设成自定义纸张类型,但我现在问题是,这样的方法在Win9x中还
可以使用,到了WindowsNT或Win2000中就不能在系统中设置自定义了,请各位大侠助拳。
 
急于想知道答案!
 
我也碰到了,用epson580k+就有,现在还没法处理。
 
先将Printer()的纸张大小设置成QuickReport的纸张大小,再取Printer()的
pDevMode结构的dmPaperSize、dmPaperLength、dmPaperWidth,再调用API的
GetPrinter()和SetPrinter()将相应的系统打印机的纸张属性设置成一致。
98和2000都没问题。
 
_Julian: 谢谢你提供的答案。但我看得不太明白。请问能不能再说得详细一点,最好有
程序说明。 你老人家的大恩大德,在下没齿难忘! :)
 
bool SetSysPrinterPaperSize(
int PaperSize,
do
uble PaperLength,
do
uble PaperWidth)
{
_PRINTER_INFO_2A *PrinterInfo;
DWORD dwNeededSize = 1000;
HDC hPrinter = NULL;
String PrinterName = GetCurrentPrinterName();
if( PrinterName.IsEmpty()) return false;

OpenPrinter( PrinterName.c_str(),&hPrinter,NULL);
if( ! hPrinter) return false;

PrinterInfo = (_PRINTER_INFO_2A *)new char[ dwNeededSize];
if( ! GetPrinter( hPrinter, 2,
(LPBYTE)PrinterInfo, dwNeededSize, &dwNeededSize)) {
delete[] PrinterInfo;
PrinterInfo = (_PRINTER_INFO_2A *)new char[ dwNeededSize];
if( ! GetPrinter( hPrinter, 2,
(LPBYTE)PrinterInfo, dwNeededSize, &dwNeededSize))
return false;
}

PrinterInfo->pDevMode->dmPaperSize = PaperSize;

PrinterInfo->pDevMode->dmPaperLength = PaperLength;
PrinterInfo->pDevMode->dmPaperWidth = PaperWidth ;

PrinterInfo->pDevMode->dmFields = PrinterInfo->pDevMode->dmFields
| DM_PAPERSIZE | DM_PAPERLENGTH | DM_PAPERWIDTH ;

bool Ret = SetPrinter( hPrinter, 2, (LPBYTE)PrinterInfo, 0);
delete[] PrinterInfo;
ClosePrinter (hPrinter) ;
return Ret;
}
 
答案接受。
多谢。
我的OICQ是197654 能不能多交流一下?
 
后退
顶部