热情软件屋

 

如何更改打印机使用的纸张类型


编号: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”,它使用的是同样的原理。

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio