Предоставляет доступ приемника отчетов (ReportListener ) к объекту GDIPlus Graphics для оперирования выводом.

ReportListener.GDIPlusGraphics

Expand imageВозвращаемое значение

Тип данных - целое.

По умолчанию - 0. Данное свойство только для чтения (readonly).

Expand imageЗамечания

Употребляется в: Объект ReportListener.

Данное свойство дает возможность подклассам ReportListener добавлять свой собственный вывод в выходной поток, посредством доспупа к дескриптору потока базавого класса  ReportListener.

NoteВажно

Когда код, написанный на Visual FoxPro, обращается к этому дескриптору, вы должно объявить (DECLARE) и вызывать функции из одного и того же файла GDIPLUS.DLL, который используется собственным кодом Visual FoxPro. Чтобы это обеспечить, пользуйтесь синтаксисом IN GDIPLUS.DLL без явного указания пути в команде DECLARE DLL.

Visual FoxPro поставляется с Фундаментальными Классами (Foundation Classes), облегчающими работу с GDI+ API. Для дальнейшей информации, читайте Фундаментальные Классы GDI Plus API Окружения.

Expand imageПример

Данный пример разворачивает все тексты в верхнем колотитуле страницы на заданный угол, аналогично установке угла поворота текста в Exsel spreadsheet. Такой подход удобен, когда в вашем отчете заголовки колонок занимают больше места, чем сама информация в этих колонках.

  CopyCode imageСкопировать Код
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 

Expand imageСмотрите Также