如何取得当前默认打印机上自定义纸张的大小? 如题,我想得到当前默认打印机上自定义纸张的大小,例如,自定义格式:210x140 宽度:21.00cm,高度:14.50cm 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 www.wave12.com 有报表打印控件 建议去看看 Fastreport 可以直接定义纸张的大小 fastreport是可以自定义纸张大小,但是不能动态修改,我是想根据当前默认打印机上自定义纸张的大小,动态设置frf文件中自定义纸张大小。因为客户可能经常换打印纸 prntDlg->GetDefaults();//CPrintDlg prntDlg(FALSE); m_hdcPrinter = prntDlg->GetPrinterDC(); LPDEVMODE lpDefPrntDevMode; lpDefPrntDevMode = prntDlg->GetDevMode(); m_pDCPrinter = CDC::FromHandle(m_hdcPrinter); m_pDCPrinter->SetMapMode(MM_LOMETRIC); CRect rectPrint, rectPaperSize; rectPaperSize.top = 0; rectPaperSize.left = 0; rectPaperSize.right = lpDefPrntDevMode->dmPaperWidth; rectPaperSize.bottom = lpDefPrntDevMode->dmPaperLength; rectPrint.top = 0; rectPrint.left = 0; rectPrint.right = m_pDCPrinter->GetDeviceCaps(HORZRES); rectPrint.bottom = m_pDCPrinter->GetDeviceCaps(VERTRES); 得到打印机纸张可以用DeviceCapabilities函数,具体用法还是建议参考msdn,一下是例子:......var sPrinterName, sPort: String; //打印机的名称,连接端口如LPT1 lpwPapers: Pointer; //得到纸张类型名称 dResult: DWORD;begin dResult := DeviceCapabilities(PChar(sPrinterName),PChar(sPort),DC_PAPERNAMES, nil, nil); if dResult > 0 then begin GetMem(lpwPapers, 65); //分配空间,msdn上注明:每个纸张名都是64个字符 try if DeviceCapabilitiesA(PChar(sPrinterName),PChar(sPort),DC_PAPERNAMES, lpwPapers, nil) = - 1 then raise Exception.Create('Error'); ShowMessage(StrPas(lpwPapers)); finally FreeMem(lpwPapers, 65); end; end; end;...... 如何实现ping 域名,返回IP? 如何最简单的实现网络视频监控 执行Program Reset出错.是IDE的问题还是系统问题? 數據庫小問題,我弱弱的問~ 150分求传数据到ie浏览栏插件的方法 CHAR类型的处理 delphi7中没有fastnet,该怎么添加,或能用什么代替,谢谢回复! 大侠们怎样对报表进行分列100分,快来! 各位好!我想知道如何查毒! 我做一些程序如保与大家共享(上载到那个网站)! ListView中的GetItemAt怎么不能精确返回ListItem?各位多多关照!! delphi 里如何实现打印报表自适应纸张的功能 求 窗体拖放并停靠另一窗体面板的控件! 谢谢
m_hdcPrinter = prntDlg->GetPrinterDC();
LPDEVMODE lpDefPrntDevMode;
lpDefPrntDevMode = prntDlg->GetDevMode(); m_pDCPrinter = CDC::FromHandle(m_hdcPrinter);
m_pDCPrinter->SetMapMode(MM_LOMETRIC);
CRect rectPrint, rectPaperSize;
rectPaperSize.top = 0;
rectPaperSize.left = 0;
rectPaperSize.right = lpDefPrntDevMode->dmPaperWidth;
rectPaperSize.bottom = lpDefPrntDevMode->dmPaperLength;
rectPrint.top = 0;
rectPrint.left = 0;
rectPrint.right = m_pDCPrinter->GetDeviceCaps(HORZRES);
rectPrint.bottom = m_pDCPrinter->GetDeviceCaps(VERTRES);
......
var
sPrinterName, sPort: String; //打印机的名称,连接端口如LPT1
lpwPapers: Pointer; //得到纸张类型名称
dResult: DWORD;
begin
dResult := DeviceCapabilities(PChar(sPrinterName),PChar(sPort),DC_PAPERNAMES, nil, nil);
if dResult > 0 then begin
GetMem(lpwPapers, 65); //分配空间,msdn上注明:每个纸张名都是64个字符
try
if DeviceCapabilitiesA(PChar(sPrinterName),PChar(sPort),DC_PAPERNAMES,
lpwPapers, nil) = - 1 then
raise Exception.Create('Error');
ShowMessage(StrPas(lpwPapers));
finally
FreeMem(lpwPapers, 65);
end;
end;
end;
......