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;
      {Set the bin to use}
      pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;
      pDMode^.dmDefaultSource := DMBIN_MANUAL;      GlobalUnlock(hDMode);
    end;
  end;
  Printer.PrinterIndex := Printer.PrinterIndex;
  result:=true;
end;