Search code examples
delphidelphi-7

Printer Print Size


How can I set the printing size (width and height) by code without showing a dialog?


Solution

  • See the MSDN documentation for GetPrinter and SetPrinter. You can find basic examples of their use in Delphi here and here. The second example has specific code for setting paper size, which I've provided below.

    procedure SetPrinterSettings(FPrinter: TPrinter);
    var
      FDevice: PChar;
      FDriver: PChar;
      FPort: PChar;
      DeviceMode: THandle;
      DevMode: PDeviceMode;
    begin
      {to get a current printer settings}
      FPrinter.GetPrinter(FDevice, FDriver, FPort, DeviceMode);
      {lock a printer device}
      DevMode := GlobalLock(DeviceMode);
    
      {set a paper size as A4-Transverse}
      if ((DevMode^.dmFields and DM_PAPERSIZE) = DM_PAPERSIZE) then
      begin
        DevMode^.dmFields := DevMode^.dmFields or DM_PAPERSIZE;
        DevMode^.dmPaperSize := DMPAPER_A4_TRANSVERSE;
      end;
    
      {set a paper source as Tractor bin}
      if  ((DevMode^.dmFields and DM_DEFAULTSOURCE) = DM_DEFAULTSOURCE) then
      begin
        DevMode^.dmFields := DevMode^.dmFields or DM_DEFAULTSOURCE;
        DevMode^.dmDefaultSource := DMBIN_TRACTOR;
      end;
    
      {set a Landscape orientation}
      if  ((DevMode^.dmFields and DM_ORIENTATION) = DM_ORIENTATION) then
      begin
        DevMode^.dmFields := DevMode^.dmFields or DM_ORIENTATION;
        DevMode^.dmOrientation := DMORIENT_LANDSCAPE;
      end;
    
      {set a printer settings}
      FPrinter.SetPrinter(FDevice, FDriver, FPort, DeviceMode);
    
      {unlock a device}
      GlobalUnlock(DeviceMode);
    end;