Witam,

Zrobiłem prosty edytor tekstu oparty na RichEdicie.
Szerokość RichEdita ustawiłem na 210 mm (czyli A4):

LOff = 210;
HDC screen = GetDC(0);
XRes = GetDeviceCaps(screen, LOGPIXELSX);
ReleaseDC(0, screen);

LOff = RoundTo(LOff*XRes/25.4,0);
JvRichEdit1->Width = LOff;

Ustawiłem obszar roboczy RichEdita, tak aby z obu stron było po 20mm:

TRect R;
int Margin = RoundTo(20*XRes/25.4,0);
R = RichEdit1->ClientRect;
R.Left = Margin;
R.Top = Margin;
R.Bottom = R.Bottom - Margin;
R.Right = LOff - Margin;
SendMessage(RichEdit1->Handle, EM_SETRECT, 0, Longint(&R));

Ustawiłem czcionkę na Times New Roman, wielkość 12.
Wypełniłem całą linię znakami 'r' i zrobiłem wydruk (za pomocą funkcji Print()).
Przed wydrukiem ustawiłem marginesy wydruku:

TPrinter *Prntr = Printer();

XOffs = GetDeviceCaps(Prntr->Handle, PHYSICALOFFSETX );
YOffs = GetDeviceCaps(Prntr->Handle, PHYSICALOFFSETY );
XRes = GetDeviceCaps(Prntr->Handle, LOGPIXELSX);
YRes = GetDeviceCaps(Prntr->Handle, LOGPIXELSY);

LOff = RoundTo(20XRes/25.4,0)-XOffs;
TOff = RoundTo(20
YRes/25.4,0)-YOffs;
ROff = Prntr->PageWidth - RoundTo(20XRes/25.4,0)-XOffs;
BOff = Prntr->PageHeight -RoundTo(20
YRes/25.4,0)-YOffs;

RichEdit1->PageRect = Rect( LOff, TOff, ROff, BOff );

Wydruk jest na dwóch liniach. W pierwszej nie zmieściły się 4 znaki 'r'.
Próbowałem z różnymi czcionkami i prawie zawsze jest różnica w tym co mieści się w linii w RichEdicie, i tym co mam na wydruku.

Proszę o pomoc.