怎样改变windows控制面板里面打印机默认设置:如打印机纸张类型或自定义纸张的尺寸,否则每打一张报表就要到windows控制面板里定义打印参数,太麻烦了!!!谢谢!!!通过改TDeviceMode我怎么用了就是不可以啊!可否给一个例子!!![email protected],谢谢!

解决方案 »

  1.   

    在执行打印前调用以下函数:
    procedure SetPaperSize(X, Y: Integer);
    // 单位是0.1mm
    // A4时 Printer.Pagewidth:=1440;  A5时 Printer.Pagewidth:=1049;
    // B5时 Printer.Pagewidth:=1290;  16K时 Printer.Pagewidth:=1035;
    // lq1600宽行打印机这个值宽度最大为42cm左右, 长度大约2m。
    //改变devicemode结构
    var
      Device: array[0..255] of char;
      Driver: array[0..255] of char;
      Port: array[0..255] of char;
      hDMode: THandle;
      PDMode: PDEVMODE;
    begin
      Printer.PrinterIndex := Printer.PrinterIndex;
      Printer.GetPrinter(Device, Driver, Port, hDMode);
      if hDMode <> 0 then
      begin
        pDMode := GlobalLock(hDMode);
        if pDMode <> nil then
        begin
          if (x = 0) or (y = 0) then
          begin
            {Set to legal}
            pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
            {pDMode^.dmPaperSize := DMPAPER_LEGAL; changed by wulianmin}
            pDMode^.dmPaperSize := DMPAPER_FANFOLD_US;
          end
          else
          begin
            {Set to custom size}
            pDMode^.dmFields := pDMode^.dmFields or
              DM_PAPERSIZE or
              DM_PAPERWIDTH or
              DM_PAPERLENGTH;
            pDMode^.dmPaperSize := DMPAPER_USER;
            pDMode^.dmPaperWidth := x {SomeValueInTenthsOfAMillimeter};
            pDMode^.dmPaperLength := y {SomeValueInTenthsOfAMillimeter};
          end;
          {设定纸张来源}
          pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;
          pDMode^.dmDefaultSource := DMBIN_MANUAL;      GlobalUnlock(hDMode);
        end;
      end;
      Printer.PrinterIndex := Printer.PrinterIndex;
      //以下开始打印
      Printer.BeginDoc;
      Printer.Canvas.TextOut(100,100, 'Test 1');
      Printer.EndDoc;
    end;
      

  2.   

    我也做过,不行。但有这样一个解决方法:你可以在上面的代码中用
    pDMode^.dmPaperSize := DMPAPER_A3;
    这样的形式设成差不多大小的纸型,那样就差不多了。
      

  3.   

    http://www.csdn.net/expert/topic/1015/1015086.xml?temp=.4705469