Volviendo a tu primera función, prueba de esta forma:
Código Delphi
[-]procedure TForm5.PrintRichEdit(Rich: TRxRichEdit; LMargin, RMargin, TMargin, BMargin: real;
Copies: integer; JobTitle: string);
var
Loff, TOff, ROff, BOff : integer;
XRes, YRes, XOffs, YOffs : integer;
R: TRect;
begin
LOff := Round(LMargin*10);
TOff := Round(TMargin*10);
ROff := Round(RMargin*10);
BOff := Round(BMargin*10);
XOffs := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX );
YOffs := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY );
XRes := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
YRes := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
LOff := Round(LOff*XRes/25.4);
TOff := Round(TOff*YRes/25.4);
ROff := Round(ROff*XRes/25.4);
BOff := Round(BOff*YRes/25.4);
if Loff < XOffs then Loff := XOffs;
if TOff < YOffs then TOff := YOffs;
if ROff < XOffs then ROff := XOffs;
if BOff < YOffs then BOff := YOffs;
Rich.PageRect := Rect( LOff, TOff, Printer.PageWidth-ROff, Printer.PageHeight-BOff);
while Copies > 0 do begin
Application.ProcessMessages;
Rich.Print(JobTitle);
Dec(Copies);
end;
end;
Saludos