#DEFINE OUTPUTDEVICETYPE_GDIPLUS 1
#DEFINE OUTPUTTO_PRINT 1
#DEFINE OUTPUTTO_FILE 2
#DEFINE LISTENER_TYPE_PRN 0
#DEFINE LISTENER_TYPE_PRV 1
#DEFINE LISTENER_TYPE_PAGED 2
LOCAL loRL, loForm
loRL = CREATEOBJECT("EchoListener")
REPORT FORM ? OBJECT loRL && output to the console
REPORT FORM ? OBJECT loRL NEXT 1 TO PRINT && output to console and print
_SCREEN.Cls && clear screen
REPORT FORM ? OBJECT loRL PREVIEW && to preview only, no console output
loForm = CREATEOBJECT("form")
loForm.Caption = "My Output Window"
loForm.Show()
REPORT FORM ? OBJECT loRL TO FILE c:\temp\x.txt && to file and output window
REPORT FORM ? OBJECT loRL TO FILE c:\temp\x.txt NOCONSOLE && to file only
DEFINE CLASS EchoListener as ReportListener
ListenerType = LISTENER_TYPE_PAGED
GP = 0
RHeight = 0
RWidth = 0
PROCEDURE LoadReport()
IF THIS.CommandClauses.Preview
THIS.ListenerType = LISTENER_TYPE_PRV
ELSE
IF INLIST(THIS.CommandClauses.OutputTo,OUTPUTTO_PRINT,OUTPUTTO_FILE)
THIS.ListenerType = LISTENER_TYPE_PRN
ENDIF
ENDIF
ENDPROC
PROCEDURE BeforeReport()
IF NOT (THIS.CommandClauses.NoConsole OR THIS.CommandClauses.Preview)
DECLARE integer GdipCreateFromHWND IN GDIPLUS.DLL ;
integer hwnd, integer @ nGraphics
LOCAL lH, nG
nG = 0
IF TYPE("_SCREEN.ActiveForm") = "O"
m.lH = _SCREEN.ActiveForm.HWnd
ELSE
m.lH = _SCREEN.HWnd
ENDIF
IF GdipCreateFromHWND( m.lH, @nG ) = 0
THIS.GP = m.nG
THIS.RHeight = THIS.GetPageHeight()/10 && convert 960 DPI to 96 DPI
THIS.RWidth = THIS.GetPageWidth()/10
ENDIF
ENDIF
ENDPROC
PROCEDURE OutputPage(nPageNo, ;
eDevice, ;
nDeviceType, ;
nleft, nTop, nWidth, nHeight, ;
nClipLeft,nClipTop, nClipWidth, nClipHeight)
IF THIS.GP # 0
DODEFAULT(nPageNo, THIS.GP,OUTPUTDEVICETYPE_GDIPLUS , ;
0,0,THIS.RWidth, THIS.RHeight, ;
0,0,THIS.RWidth, THIS.RHeight)
ENDIF
ENDPROC
PROCEDURE UnloadReport()
* reset:
IF NOT THIS.GP = 0
DECLARE integer GdipDeleteGraphics IN GDIPLUS.DLL integer
GdipDeleteGraphics( THIS.GP )
THIS.GP = 0
ENDIF
THIS.ListenerType = LISTENER_TYPE_PAGED
ENDPROC
ENDDEFINE