Проблемы с TfrRichView
1.При печати отчета содержащего frRichView со шрифтом Times New Roman 9 и менее внизу страницы остается пустая область, хотя на экране страница заполнена полностью . Как побороть?
2.Когда ожидать у frRichView выравнивания по ширине (Justify)?
2.Когда ожидать у frRichView выравнивания по ширине (Justify)?
Комментарии
1) попробуйте изменить FR_Rich.pas:
procedure TfrRichView.ShowRich(Render: Boolean);
var
Range: TFormatRange;
LogX, LogY, mm: Integer;
EMF: TMetafile;
EMFCanvas: TMetafileCanvas;
BMP: TBitmap;
re: TRichEdit;
begin
if Render then
re := RichEdit else
re := SRichEdit;
if FillColor = clNone then
re.Color := clWhite else
re.Color := FillColor;
FillChar(Range, SizeOf(TFormatRange), 0);
with Range do
begin
if Render then
hdc := Canvas.Handle else
hdc := GetDC(0);
if Render then
{ if IsPrinting then
begin
if FillColor = clNone then
SetBkMode(hdc, Transparent);
LogX := GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX);
LogY := GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY);
rc := Rect(DRect.Left * 1440 div LogX, DRect.Top * 1440 div LogY,
DRect.Right * 1440 div LogX, DRect.Bottom * 1440 div LogY);
end
else}
begin
LogX := Screen.PixelsPerInch;
LogY := LogX;
rc := Rect(0, 0, Round((SaveDX - SaveGX * 2) * 1440 / LogX),
Round((SaveDY - SaveGY * 2) * 1440 / LogY));
EMF := TMetafile.Create;
EMF.Width := SaveDX - SaveGX * 2;
EMF.Height := SaveDY - SaveGY * 2;
EMFCanvas := TMetafileCanvas.Create(EMF, 0);
EMFCanvas.Brush.Style := bsClear;
hdc := EMFCanvas.Handle;
end
else
begin
LogX := Screen.PixelsPerInch;
LogY := LogX;
rc := Rect(0, 0, Round((DX - GapX * 2) * 1440 / LogX),
Round((DY - GapY * 2) * 1440 / LogY));
end;
hdcTarget := hdc;
rcPage := rc;
LastChar := CharFrom;
chrg.cpMax := -1;
chrg.cpMin := LastChar;
mm := SetMapMode(hdc, MM_TEXT);
LastChar := re.Perform(EM_FORMATRANGE, Integer(Render), Integer(@Range));
SetMapMode(hdc, mm);
end;
re.Perform(EM_FORMATRANGE, 0, 0);
if not Render then
ReleaseDC(0, Range.hdc)
else //if not IsPrinting then
begin
EMFCanvas.Free;
if DocMode <> dmDesigning then
Canvas.StretchDraw(DRect, EMF)
else
begin
BMP := TBitmap.Create;
BMP.Width := DRect.Right - DRect.Left + 1;
BMP.Height := DRect.Bottom - DRect.Top + 1;
BMP.Canvas.StretchDraw(Rect(0, 0, BMP.Width, BMP.Height), EMF);
Canvas.Draw(DRect.Left, DRect.Top, BMP);
BMP.Free;
end;
EMF.Free;
end;
end;