1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| uses QuickRpt, QRCtrls;
TMyQRImage = class(TQRImage)
private
protected
procedure Print(OfsX, OfsY: Integer); override;
public
published
property Transparent;
end;
implementation
uses QRPrntr;
...
procedure TMyQRImage.Print(OfsX, OfsY : Integer);
var
Dest : TRect;
DC, SavedDC : THandle;
begin
if parentreport.Exporting then
begin
TQRExportFilter(ParentReport.ExportFilter).acceptgraphic(
qrprinter.XPos(OfsX + self.Size.Left),
qrprinter.YPos(OfsY+ self.size.top ), self );
end;
Dest.Top := QRPrinter.YPos(OfsY + Size.Top);
Dest.Left := QRPrinter.XPos(OfsX + Size.Left);
Dest.Right := QRPrinter.XPos(OfsX + Size.Width + Size.Left);
Dest.Bottom := QRPrinter.YPos(OfsY + Size.Height + Size.Top);
if Stretch then
begin
if Picture.Graphic is TBitmap then
begin
if Transparent then
begin
QRPrinter.Canvas.Brush.Color := Parent.Color;
QRPrinter.Canvas.BrushCopy(Dest, Picture.Bitmap, Picture.Bitmap.Canvas.ClipRect, Picture.Bitmap.TransparentColor);
end
else
PrintBitmap(QRPrinter.Canvas, Dest, TBitmap(Picture.Graphic));
end
else
with QRPrinter.Canvas do
StretchDraw(Dest, Picture.Graphic);
end
else
begin
IntersectClipRect(QRPrinter.Canvas.Handle, Dest.Left, Dest.Top, Dest.Right, Dest.Bottom);
DC := GetDC(QRPrinter.Canvas.Handle);
SavedDC := SaveDC(DC);
Dest.Right := Dest.Left +
round(Picture.Width / Screen.PixelsPerInch * 254 * ParentReport.QRPrinter.XFactor);
Dest.Bottom := Dest.Top +
round(Picture.Height / Screen.PixelsPerInch * 254 * ParentReport.QRPrinter.YFactor);
if Center then OffsetRect(Dest,
(QRPrinter.XSize(Size.Width) -
round(Picture.Width / Screen.PixelsPerInch * 254 * ParentReport.QRPrinter.XFactor)) div 2,
(QRPrinter.YSize(Size.Height) -
round(Picture.Height / Screen.PixelsPerInch * 254 * ParentReport.QRPrinter.YFactor)) div 2);
if Picture.Graphic is TBitmap then
begin
if Transparent then
begin
QRPrinter.Canvas.Brush.Color := Parent.Color;
QRPrinter.Canvas.BrushCopy(Dest, Picture.Bitmap, Picture.Bitmap.Canvas.ClipRect, Picture.Bitmap.TransparentColor);
end
else
PrintBitmap(QRPrinter.Canvas, Dest, TBitmap(Picture.Graphic));
end
else
QRPrinter.Canvas.StretchDraw(Dest, Picture.Graphic);
RestoreDC(DC, SavedDC);
SelectClipRgn(QRPrinter.Canvas.Handle, 0);
end;
if ParentReport.FinalPass and Frame.AnyFrame then
Frame.PaintIt(ParentReport.QRPrinter.Canvas,
Rect(ParentReport.QRPrinter.XPos(OfsX + Size.Left),
ParentReport.QRPrinter.YPos(OfsY + Size.Top),
ParentReport.QRPrinter.XPos(OfsX + Size.Left + Size.Width),
ParentReport.QRPrinter.YPos(OfsY + Size.Top + Size.Height)),
ParentReport.QRPrinter.XFactor,
ParentReport.QRPrinter.YFactor);
end; |
Partager