procedure TForm1.Button1Click(Sender: TObject);
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
      {Set to legal}
      pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
      pDMode^.dmPaperSize := DMPAPER_LEGAL;     {Set to custom size}
      pDMode^.dmFields := pDMode^.dmFields or 
                          DM_PAPERSIZE or
                          DM_PAPERWIDTH or
                          DM_PAPERLENGTH;
      pDMode^.dmPaperSize := DMPAPER_USER;
      pDMode^.dmPaperWidth := 100 {SomeValueInTenthsOfAMillimeter};
      pDMode^.dmPaperLength := 100 {SomeValueInTenthsOfAMillimeter};
     {Set the bin to use}
      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;

解决方案 »

  1.   

    你要设置的是自定义打印纸张的大小吗?如果是,试试下面的:procedure TForm1.Button1Click(Sender: TObject);
    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
          {Set to legal}
          pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
          pDMode^.dmPaperSize := DMPAPER_LEGAL;     {Set to custom size}
          pDMode^.dmFields := pDMode^.dmFields or 
                              DM_PAPERSIZE or
                              DM_PAPERWIDTH or
                              DM_PAPERLENGTH;
          pDMode^.dmPaperSize := DMPAPER_USER;
          pDMode^.dmPaperWidth := 100 {SomeValueInTenthsOfAMillimeter};
          pDMode^.dmPaperLength := 100 {SomeValueInTenthsOfAMillimeter};
         {Set the bin to use}
          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.   

    各位兄台:
        都怪我没把问题说清楚
        我想问的是:在NT中察看打印机属性,选择默认纸张,怎么让默认纸张
    栏中选择非规则纸张(未在列表中列出的纸张类型),而NT不支持自定义纸张。
        谢谢大家。
      

  3.   

    var
      ADevice, ADriver, APort: array[0..255] of Char;
      DeviceHandle: THandle;
      DevMode: PDeviceMode;
    begin
        //初始化打印机
        Printer.GetPrinter(ADevice, ADriver, APort, DeviceHandle);
        if DeviceHandle = 0 then
        begin
          Printer.PrinterIndex := Printer.PrinterIndex;
          Printer.GetPrinter(ADevice, ADriver, APort, DeviceHandle);
        end;
        if DeviceHandle = 0 then
          Raise Exception.Create('不能初始化打印机!')
        else
          DevMode := GlobalLock(DeviceHandle);
        if DeviceHandle <> 0 then
        begin
          GlobalUnLock(DeviceHandle);
          with DevMode^ do
          begin
            dmFields := dmFields or DM_PAPERSIZE;
            dmPaperSize := DMPAPER_A3; //设置打印机默认纸张
          { dmPaperSize := DMPAPER_USER; //设置自定义打印纸张
            dmPaperWidth := 3400;
            dmPaperLength := 2400; }
            Printer.SetPrinter(ADevice, ADriver, APort, DeviceHandle);
          end;
    end;
      

  4.   

    各位兄台:
        都怪我没把问题说清楚
        我想问的是:在NT中察看打印机属性,选择默认纸张,怎么让默认纸张
    栏中选择非规则纸张(未在列表中列出的纸张类型),而NT不支持自定义纸张。
        谢谢大家。