怎么设置一台打印机打印不同尺寸的纸张 想通过程序设置在一台打印机上打印不同尺寸的纸张,現在的做法是在QuickReport中设定好报表的尺寸后还要在本机的“打印机和传真->打印首选项->布局->高级”中将纸张规格改成报表设计时相应的尺寸,这样做比较麻烦,不知该怎么直接在程序中设定打印机的纸张规格,请大家帮助给个方法~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 首先你要知道你用哪个打印机,一般的是首选打印机,然后参考下面文章http://wenku.baidu.com/view/e608321d59eef8c75fbfb369.html varPrtInfo2: PPrinterInfo2;//具体的内容 查查MSDNDeviceMode: PDeviceMode;//具体的内容 查查MSDNstrPrintName:string;//打印机名称............. Printer.SetPrinter(pchar(Printer.Printers[Printer.PrinterIndex]), PrtInfo2.pDriverName, PrtInfo2.pPortName, 0);//不修改系统默认打印机,仅修改当前程序所使用的打印机....... DeviceMode^.dmPaperSize := 256; //要设为其它可查API中的DevMode,自定义纸张 DeviceMode^.dmPaperLength := Trunc(StrToFloat(XMLPrintM.DocumentElement.AttributeNodes[3].text) * 100); DeviceMode^.dmPaperWidth := Trunc(StrToFloat(XMLPrintM.DocumentElement.AttributeNodes[2].text) * 100); DeviceMode^.dmFields := DeviceMode^.dmFields or DM_ORIENTATION; DeviceMode^.dmFields := DeviceMode^.dmFields or DM_PAPERSIZE; DeviceMode^.dmFields := DeviceMode^.dmFields or DM_PAPERLENGTH; DeviceMode^.dmFields := DeviceMode^.dmFields or DM_PAPERWIDTH; StrPCopy(DeviceMode^.dmDeviceName, strPrintName); ResetDC(Printer.Handle, DeviceMode^);原来做过几个程序跟打印机有关的 问题已经解决了,2楼讲得对但未说详细,DeviceMode^.dmPaperSize := 256中的自定义纸张编号256只在Win98.me中生效,在Win2000、XP中自定义纸张的编号不是固定的256,第将次新加自定义纸张时都会变化的。具体步骤:在“打印机和传真”中点菜单“文件->服务器属性”在格式选项卡中选择“创建新格式”创建一个所需尺寸的自定义纸张将自定义纸张设为当前打印机的默认值通过如下代码获取当前自定义纸张的编号:[code=Delphi(Pascal]procedure TMainForm.Button1Click(Sender: TObject);var Device : array[0..cchDeviceName - 1] of Char; Driver : array[0..(MAX_PATH-1)] of Char; Port : array[0..32]of Char; hDMode : THandle; pDMode : PDevMode;begin Printer.GetPrinter(Device,Driver,Port,hDMode);// 获取打印机DevMode结构的句柄值,存放在hDMode中 if hDMode <> 0 then begin pDMode := GlobalLock(hDMode); // 获取指向打印机DevMode结构的指针 ShowMessage('纸张尺寸编号:' + IntToStr(pDMode^.dmPaperSize)); //打印机默认纸张尺寸编号 GlobalUnlock(hDMode); end;end;[/code]之后的设定可按2楼的来处理。 dxtreelist在edlphi2010里找不到。。。。 Delphi的UDL文件连接数据库的问题!请教各位大哥! 一个很强的问题 请高手看看我这程序哪里有问题啊 请问要hook一个程序内部的函数,要怎么做?在delphi里如何保护现场以及还原现场? 急!老板叫我用线程做一个项目,现有对多线程技术的7问!望各位大侠解小弟之惑! 怎么样在程序中动态设置Cursor 今天买了双新皮鞋,感觉不错。散分。 偷电被老师捉到了,送分! 请教有哪位高手知道有关HOOK的具体使用?非常感谢!! 有没有给java做过web service的,需不需要特殊处理一下? delphi 2007 打不开了
http://wenku.baidu.com/view/e608321d59eef8c75fbfb369.html
var
PrtInfo2: PPrinterInfo2;//具体的内容 查查MSDN
DeviceMode: PDeviceMode;//具体的内容 查查MSDN
strPrintName:string;//打印机名称
.............
Printer.SetPrinter(pchar(Printer.Printers[Printer.PrinterIndex]), PrtInfo2.pDriverName, PrtInfo2.pPortName, 0);//不修改系统默认打印机,仅修改当前程序所使用的打印机
.......
DeviceMode^.dmPaperSize := 256; //要设为其它可查API中的DevMode,自定义纸张
DeviceMode^.dmPaperLength := Trunc(StrToFloat(XMLPrintM.DocumentElement.AttributeNodes[3].text) * 100);
DeviceMode^.dmPaperWidth := Trunc(StrToFloat(XMLPrintM.DocumentElement.AttributeNodes[2].text) * 100);
DeviceMode^.dmFields := DeviceMode^.dmFields or DM_ORIENTATION;
DeviceMode^.dmFields := DeviceMode^.dmFields or DM_PAPERSIZE;
DeviceMode^.dmFields := DeviceMode^.dmFields or DM_PAPERLENGTH;
DeviceMode^.dmFields := DeviceMode^.dmFields or DM_PAPERWIDTH;
StrPCopy(DeviceMode^.dmDeviceName, strPrintName);
ResetDC(Printer.Handle, DeviceMode^);原来做过几个程序跟打印机有关的
在“打印机和传真”中点菜单“文件->服务器属性”
在格式选项卡中选择“创建新格式”创建一个所需尺寸的自定义纸张
将自定义纸张设为当前打印机的默认值
通过如下代码获取当前自定义纸张的编号:
[code=Delphi(Pascal]
procedure TMainForm.Button1Click(Sender: TObject);
var
Device : array[0..cchDeviceName - 1] of Char;
Driver : array[0..(MAX_PATH-1)] of Char;
Port : array[0..32]of Char;
hDMode : THandle;
pDMode : PDevMode;
begin
Printer.GetPrinter(Device,Driver,Port,hDMode);// 获取打印机DevMode结构的句柄值,存放在hDMode中
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode); // 获取指向打印机DevMode结构的指针
ShowMessage('纸张尺寸编号:' + IntToStr(pDMode^.dmPaperSize)); //打印机默认纸张尺寸编号
GlobalUnlock(hDMode);
end;
end;
[/code]
之后的设定可按2楼的来处理。