在打印前获取当前打印机参数并保存,然后把打印机参数设置成我自己的打印程序要求的数值,程序完成后恢复原来的参数。
这样即使用到自定义纸张之类,在程序退出后也不影响其他程序的打印(比如一般默认是A4纸,我的程序要打印A3,那么打完后最好还是设置为A4,这样不会对客户造成困扰)。

解决方案 »

  1.   

    FDevice, FDriver, FPort:array [0..255] of char;
        DeviceMode,HPrt:THandle;
        DevMode:PDeviceMode;
        DevSize :Integer;    Printer.GetPrinter(FDevice, FDriver, FPort, DeviceMode);
        OpenPrinter(FDevice, HPrt, nil);
        DevMode :=GlobalLock( DeviceMode); //该结构为各设置信息,可以赋给另外变量保存
    ----------------------
            DevMode.dmFields :=DevMode.dmFields or DM_COPIES;
            DevMode.dmCopies :=1; //设置打印份数为1,
     ------------------------    
         //打完设回
         DevMode.dmFields :=DevMode.dmFields or DM_COPIES;
         DevMode.dmCopies :=保存的值; //设置打印份数为1,
      

  2.   

    uses Printers;  if Printer.Printers.Count > 0 then
        ShowMessage('安装了打印机')
      else
        ShowMessage('未安装打印机');
      

  3.   

    直接调用打印设置对话框不行吗?
    var PrinterSetupDialog: TPrinterSetupDialog; //打印对话框
    begin
      PrinterSetupDialog := TPrinterSetupDialog.Create(nil); 
      //执行打印设置框,获得最新信息
      PrinterSetupDialog.Execute;
      PrinterSetupDialog.Free;
    end;
      

  4.   

    楼上的试过么?PrinterSetupDialog只能返回设定值,并不能自动的设置。
      

  5.   

    to lijinghe1(副乡长):代码不全啊。给点程序说明好吗?Printer这个对象哪里来的?
      

  6.   

    printer是一个可以直接用的函数,他返回的一个Tprinter的全局实例