Provides access to the GDIPlus Graphics object the ReportListener uses to handle output.
Integer data type.
The default is 0. This property is readonly.
Applies To: ReportListener Object.
This property gives derived ReportListener-based classes a way to inject their own output into the output stream, by accessing the baseclass ReportListener's handle to this stream.
|When code written in Visual FoxPro accesses this handle, it must DECLARE and use functions based in the same file copy of GDIPLUS.DLL that the product uses in native code. To ensure this, use the syntax IN GDIPLUS.DLL with no explicit path in your DECLARE DLL statements.|
Visual FoxPro ships with a number of Foundation Classes designed to make working with the GDI+ API easier to use. For more information, see GDI Plus API Wrapper Foundation Classes.
This example adjusts all text in the Page Header band of a report by rotating it to an angle, similar to an angled set of headers in a spreadsheet. Such an approach is useful when you have a report with many columns and the labels for each column header would ordinarily take up much more room than the contents of each column requires in the Detail band.
LOCAL oListener oListener = CREATEOBJECT("rotateText") oListener.ListenerType = 1 REPORT FORM ? OBJECT oListener #define FRX_OBJCOD_PAGEHEADER 1 DEFINE CLASS rotateText AS ReportListener IsInPageHeader = .F. PROCEDURE Init() DECLARE integer GdipRotateWorldTransform In GDIPlus.Dll ; integer graphics,single angle,integer enumMatrixOrder_order DECLARE integer GdipTranslateWorldTransform In GDIPlus.Dll ; integer graphics,single dx,single dy,; integer enumMatrixOrder_order DECLARE integer GdipSaveGraphics IN GDIPlus.DLL ; integer graphics, integer @xx DECLARE integer GdipRestoreGraphics IN GDIPlus.DLL ; integer graphics, integer xx ENDPROC PROCEDURE BeforeBand(nBandObjCode, nFRXRecNo) DODEFAULT(nBandObjCode, nFRXRecNo) IF (nBandObjCode = FRX_OBJCOD_PAGEHEADER) THIS.IsInPageHeader = .T. ENDIF ENDPROC PROCEDURE AfterBand(nBandObjCode, nFRXRecNo) IF (nBandObjCode = FRX_OBJCOD_PAGEHEADER) THIS.IsInPageHeader = .F. ENDIF DODEFAULT(nBandObjCode, nFRXRecNo) ENDPROC PROCEDURE Render(nFRXRecNo, nLeft, nTop, nWidth, nHeight,; nObjectContinuationType, cContentsToBeRendered, GDIPlusImage) LOCAL xx,x,y, z xx = 0 IF THIS.IsInPageHeader * get appropriate versions of coords x = nLeft y = nTop * save the current state of the graphics handle z = GdipSaveGraphics(this.GDIPlusGraphics, @xx) * now move the 0,0 point to where we'd like it to be * so that when we rotate we're rotating around the * appropriate point z = GdipTranslateWorldTransform(this.GDIPlusGraphics,x,y,0) * should check z here -- will be 0 if no error occurred * now change the angle at which the draw will occur z = GdipRotateWorldTransform ( this.GDIPlusGraphics,-20,0) * should check z as above * restore the 0,0 point z = GdipTranslateWorldTransform(this.GDIPlusGraphics,-x,-y, 0) * should check z as above ENDIF * explicitly call the baseclass behavior * when we are ready for it DODEFAULT(nFRXRecNo, nLeft, nTop, nWidth, nHeight, ; nObjectContinuationType, cContentsToBeRendered, ; GDIPlusImage) * put back the state of the graphics handle IF THIS.IsInPageHeader GdipRestoreGraphics(this.GDIPlusGraphics, xx) ENDIF * don't let the baseclass render * when and how it would otherwise do it NODEFAULT ENDPROC ENDDEFINE