2011. január 6., csütörtök

How to control the print margins when printing a TRichEdit


Problem/Question/Abstract:

How do I set the left margin when printing the contents of a TRichEdit?

Answer:

You can set TRichEdit.PageRect for the margins. Get the printer information with GetDeviceCaps.

procedure TForm1.Button1Click(Sender: TObject);
var
  PixelsX, PixelsY: integer;
  LeftSpace, TopSpace: integer;
  R: TRect;
begin
  if PrintDialog1.Execute then
  begin
    {get pixels per inch}
    PixelsX := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
    PixelsY := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
    {get non-printable margins}
    LeftSpace := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
    TopSpace := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
    {1' margin all around}
    R.Left := Round(PixelsX * 1) - LeftSpace;
    R.Right := Round(PixelsX * 7.5) - LeftSpace;
    R.Top := Round(PixelsY * 1) - TopSpace;
    R.Bottom := Round(PixelsY * 10) - TopSpace;
    RichEdit1.PageRect := R;
    RichEdit1.Print('Test');
  end;
end;

Nincsenek megjegyzések:

Megjegyzés küldése