如何更改打印机使用的纸张类型
编号:QA002977
建立日期: 2000年5月24日 最后修改日期:2000年5月24日
所属类别:
小彭:
操作系统: Win99
编程工具: VB6
问题: 以前我提问过的问题:如何更改打印机使用的纸张类型?(用API函数)
现我在DELPHI的参考书中有实现的办法,但本人对DELPHI还未熟悉,故想将其全文抄录给你,相信你有所启示,找到VB下的用法。
如何更改打印机使用的纸张类型?
原理:改变打印机设置的API函数是 DocumentProperties(),其结构如下:
LONG DocumentProperties(
HWND hWnd, //显视对话框的句柄
HANDLE hPrinter, //打印机句柄
LPTSTR pDeviceName, //设备名称地址
PDEVMODE pDevmodeOutput, //指向改变后的设置后的地址
PDEVMODE pDevmodeInput, //指向原始设置地址
DWORD fMode //模式指针,取值为DM_IN_BUFFER
//DM_IN_PROMPT 或 DM_OUT_BUFFER
);
步骤:
type
pdevmode=^tdevmode;
tprinterdev=class
driver: string;
Device: string;
Port: string;
end;
implimentation
Procedure Tform1.SetPrinter;
var
Devs: pDevmode;
Devsp: pointer;
DevSize: integer;
Printerobject: Thandle;
Devname: string;
begin
Printerobject:=Printer.Handle;
DevName:=tprinterdev(printer.printers.objects[printer.printerIndex]).device;
DevSize:=DocumentProperties(0,printerobject,Pchar(DevName),Devs,Devs,0);
DevsP:=Allocmem(Devsize);
try
DocumentProperties(0,printerobject,Pchar(DevName),DevsP,nil,DM_OUT_BUFFER):
devs:=DevsP;
Devs^.dmFields:=DM_PAPERSIZE;
Devs^.papersize:=DMPAPER_FANFOLD_US;
//在这里换成你想要的纸张,
//下面的是自定义纸张,
//如果使用的是USER_DEFINE(用户自定义)纸张类型,
//那么上面的一句话需要改为:
// Devs^.dmFields:=DM_PAPERSIZE OR DM_PAPERLENGTH OR PAPERWIDTHp;
// Devs^.dmFields:=0;
//devs^.dmpaperlength:=用户输入的纸张长度;
//devs^.dmpaperwidth:=用户输入的纸张宽度;
DocumentProperties(0,printerobject,Pchar(DevName),DevsP,devsp,DM_OUT_BUFFER OR DM_IN_BUFFER):
finally
freemem(devsp,devsize);
end;
end;
end.
水平: 中级
回答:
可以参考微软的Knowledge Base的文章:“Q180645 IX: Cannot Change Page Settings During Print Job”,它使用的是同样的原理。
此问题由李海回答。
| |
|
|
| |
|
|