Impressao - obtendo as margens

Top  Previous  Next

uses 

  Printers; 

 

type 

  TMargins = record 

    Left

    Top, 

    Right

    Bottom: Double 

end

 

procedure GetPrinterMargins(var Margins: TMargins); 

var 

  PixelsPerInch: TPoint; 

  PhysPageSize: TPoint; 

  OffsetStart: TPoint; 

  PageRes: TPoint; 

begin 

  PixelsPerInch.y := GetDeviceCaps(Printer.Handle, LOGPIXELSY); 

  PixelsPerInch.x := GetDeviceCaps(Printer.Handle, LOGPIXELSX); 

  Escape(Printer.Handle, GETPHYSPAGESIZE, 0, nil, @PhysPageSize); 

  Escape(Printer.Handle, GETPRINTINGOFFSET, 0, nil, @OffsetStart); 

  PageRes.y := GetDeviceCaps(Printer.Handle, VERTRES); 

  PageRes.x := GetDeviceCaps(Printer.Handle, HORZRES); 

  // Top Margin 

  Margins.Top := OffsetStart.y / PixelsPerInch.y; 

  // Left Margin 

  Margins.Left := OffsetStart.x / PixelsPerInch.x; 

  // Bottom Margin 

  Margins.Bottom := ((PhysPageSize.y - PageRes.y) / PixelsPerInch.y) - 

    (OffsetStart.y / PixelsPerInch.y); 

  // Right Margin 

  Margins.Right := ((PhysPageSize.x - PageRes.x) / PixelsPerInch.x) - 

    (OffsetStart.x / PixelsPerInch.x); 

end

 

function InchToCm(Pixel: Single): Single; 

// Convert inch to Centimeter 

begin 

  Result := Pixel * 2.54 

end

 

procedure TForm1.Button1Click(Sender: TObject); 

var 

  Margins: TMargins; 

begin 

 GetPrinterMargins(Margins); 

 ShowMessage(Format('Margins: (Left: %1.3f, Top: %1.3f, Right: %1.3f, Bottom: %1.3f)'

  [InchToCm(Margins.Left), 

   InchToCm(Margins.Top), 

   InchToCm(Margins.Right), 

   InchToCm(Margins.Bottom)])); 

end