Line 1508 is
CODE
r := Rect(Round(AbsLeft * ScaleX) - 20, Round(AbsTop * ScaleY) - 20,
Round((AbsLeft + Width) * ScaleX + 20),
Round((AbsTop + Height) * ScaleY + 20));
full code:
CODE
procedure TfrxPreviewPages.DrawPage(Index: Integer; Canvas: TCanvas;
ScaleX, ScaleY, OffsetX, OffsetY: Extended);
var
i: Integer;
Page: TfrxReportPage;
l: TList;
c: TfrxComponent;
IsPrinting: Boolean;
SaveLeftMargin, SaveRightMargin: Extended;
rgn: HRGN;
function ViewVisible(c: TfrxComponent): Boolean;
var
r: TRect;
begin
with c do
r := Rect(Round(AbsLeft * ScaleX) - 20, Round(AbsTop * ScaleY) - 20,
Round((AbsLeft + Width) * ScaleX + 20),
Round((AbsTop + Height) * ScaleY + 20));
OffsetRect(r, Round(OffsetX), Round(OffsetY));
Result := RectVisible(Canvas.Handle, r) or (Canvas is TMetafileCanvas);
end;
begin
Page := GetPage(Index);
if Page = nil then Exit;
SaveLeftMargin := Page.LeftMargin;
SaveRightMargin := Page.RightMargin;
if Page.MirrorMargins and (Index mod 2 = 1) then
begin
Page.LeftMargin := SaveRightMargin;
Page.RightMargin := SaveLeftMargin;
end;
IsPrinting := Canvas is TfrxPrinterCanvas;
rgn := 0;
if not IsPrinting then
begin
rgn := CreateRectRgn(0, 0, 10000, 10000);
GetClipRgn(Canvas.Handle, rgn);
IntersectClipRect(Canvas.Handle,
Round(OffsetX),
Round(OffsetY),
Round(OffsetX + Page.PaperWidth * fr01cm * ScaleX) - 1,
Round(OffsetY + Page.PaperHeight * fr01cm * ScaleY) - 1);
end;
Page.IsPrinting := IsPrinting;
Page.Draw(Canvas, ScaleX, ScaleY, OffsetX, OffsetY);
OffsetX := OffsetX + Page.LeftMargin * fr01cm * ScaleX;
OffsetY := OffsetY + Page.TopMargin * fr01cm * ScaleY;
l := Page.AllObjects;
for i := 0 to l.Count - 1 do
begin
c := l[i];
if (c is TfrxView) and ViewVisible(c) then
if not IsPrinting or TfrxView(c).Printable then
begin
c.IsPrinting := IsPrinting;
{ needed for TOTALPAGES macro }
if c is TfrxCustomMemoView then
begin
THackMemoView(c).FTotalPages := Count;
THackMemoView(c).FCopyNo := FCopyNo;
THackMemoView(c).FPrintScale := FPrintScale;
end;
{ draw the object }
TfrxView(c).Draw(Canvas, ScaleX, ScaleY, OffsetX, OffsetY);
c.IsPrinting := False;
end;
end;
Page.LeftMargin := SaveLeftMargin;
Page.RightMargin := SaveRightMargin;
if not IsPrinting then
begin
SelectClipRgn(Canvas.Handle, rgn);
DeleteObject(rgn);
end
end;