Предоставляет доступ приемника отчетов (ReportListener ) к объекту GDIPlus Graphics для оперирования выводом.
ReportListener.GDIPlusGraphics |
Возвращаемое значение
Тип данных - целое.
По умолчанию - 0. Данное свойство только для чтения (readonly).
Замечания
Употребляется в: Объект ReportListener.
Данное свойство дает возможность подклассам ReportListener добавлять свой собственный вывод в выходной поток, посредством доспупа к дескриптору потока базавого класса ReportListener.
Важно |
|---|
|
Когда код, написанный на Visual FoxPro, обращается к этому дескриптору, вы должно объявить (DECLARE) и вызывать функции из одного и того же файла GDIPLUS.DLL, который используется собственным кодом Visual FoxPro. Чтобы это обеспечить, пользуйтесь синтаксисом IN GDIPLUS.DLL без явного указания пути в команде DECLARE DLL. |
Visual FoxPro поставляется с Фундаментальными Классами (Foundation Classes), облегчающими работу с GDI+ API. Для дальнейшей информации, читайте Фундаментальные Классы GDI Plus API Окружения.
Пример
Данный пример разворачивает все тексты в верхнем колотитуле страницы на заданный угол, аналогично установке угла поворота текста в Exsel spreadsheet. Такой подход удобен, когда в вашем отчете заголовки колонок занимают больше места, чем сама информация в этих колонках.
Скопировать Код | |
|---|---|
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
* Взять нужные координаты
x = nLeft
y = nTop
* сохранить текущее состояние дескриптора графики
z = GdipSaveGraphics(this.GDIPlusGraphics, @xx)
* теперь поместим точку отсчета 0,0 в заданное место,
* чтобы, когда мы вращали текст, то это бы происходило вокруг
* заданной точки
z = GdipTranslateWorldTransform(this.GDIPlusGraphics,x,y,0)
* здесь следует проверить z -- должно быть 0, если не произошли ошибки
* теперь изменим угол поворота текста
z = GdipRotateWorldTransform ( this.GDIPlusGraphics,-20,0)
* следует проверить z опять также
* восстановить точку отчета 0,0
z = GdipTranslateWorldTransform(this.GDIPlusGraphics,-x,-y, 0)
* следует проверить z опять также
ENDIF
* явный вызов родительского кода,
* когда мы для него готовы
DODEFAULT(nFRXRecNo, nLeft, nTop, nWidth, nHeight, ;
nObjectContinuationType, cContentsToBeRendered, ;
GDIPlusImage)
* восстановить состаяние дескриптора графики
IF THIS.IsInPageHeader
GdipRestoreGraphics(this.GDIPlusGraphics, xx)
ENDIF
* здесь подавить выполнение родительского кода
NODEFAULT
ENDPROC
ENDDEFINE | |
Важно