DarkReality
Турист
- Credits
- 0
Всем доброго времени суток! Подскажите, пожалуйста, каким образом решить следующую проблему: есть TRichEdit с текстом на 1 лист А4, при печати устанавливаю поля следущим кодом:
Вроде все ок, но! На одном принтере печатается все ок, на другом правое поле больше и в итоге текст перетекает на следующую страницу.
Каким образом можно сделать какой нибудь универсальный вариант?
Код:
procedure SetRichEditMargins(const mLeft, mRight, mTop, mBottom: extended;
const re : TRichEdit) ;
var
ppiX, ppiY : integer;
spaceLeft, spaceTop : integer;
r : TRect;
begin
// pixels per inch
ppiX := GetDeviceCaps(Printer.Handle, LOGPIXELSX) ;
ppiY := GetDeviceCaps(Printer.Handle, LOGPIXELSY) ;
// non-printable margins
spaceLeft := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX) ;
spaceTop := GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY) ;
//calc margins
R.Left := Round(ppiX * mLeft) - spaceLeft;
R.Right := Printer.PageWidth - Round(ppiX * mRight) - spaceLeft;
R.Top := Round(ppiY * mTop) - spaceTop;
R.Bottom := Printer.PageHeight - Round(ppiY * mBottom) - spaceTop;
// set margins
re.PageRect := r;
end;
Вроде все ок, но! На одном принтере печатается все ок, на другом правое поле больше и в итоге текст перетекает на следующую страницу.
Каким образом можно сделать какой нибудь универсальный вариант?