Происходит перед тем, когда объект ReportListener начинает обрабатывать Объекты Отчета, такие как Shape или Picture.

PROCEDURE Object.AdjustObjectSize
LPARAMETERS nFRXRecno, oObjProperties

Параметры

Система Visual FoxPro направляет в программный код события AdjustObjectSize параметры, в следующем порядке:

nFRXRecno

Целое, тип объекта; определяет номер записи в файле Отчета или Этикетки  (frx / lbx), который нужно обрабатывать в текущий момент.

oObjProperties

Ссылка на объект типа Empty class, члены которого описывают различные характеристики рассматриваемого Shape или Picture:

Член Объекта
oObjProperties
Тип Данных Использование

reload

Логический, def = .F.

Определяет, может ли объект ReportListener вносить изменения.

Задание значения = True (.T.) определяет, что ReportListener может менять  height / width.

height

Целый, в диапазоне

0 - 64000

Высота элемента, в единицах 960 / дюйм.

Если изменить это значение и reload = .T., то ReportListener обрабатывает эти значения.

width

Целый, в диапазоне

0 - 64000

Ширина элемента, в единицах 960 / дюйм.

Если изменить это значение и reload = .T., то ReportListener обрабатывает эти значения.

top,left

Целый,

только_чтение 

Координаты верхнего-левого угла объекта Shape / Picture. Обеспечивает информацией для проведения дальнейших вычислений размеров объекта.

reattempt

Логический,

только_чтение 

Определяет, может ли объект размещаться на следующей странице,  когда он не входит на текущую страницу.

maxheightavailable

Целый,

только_чтение 

Содержит информацию о доступном пространстве,  с учентом дальнейшего вывода всех последующих элементов, на данной странице.

NoteОбратите Внимание

Компания Microsoft оставляет за собой право добавлять необходимые члены в указанный объект oObjProperties, который передается в программный код события AdjustObjectSize, при обработке других Элементов Отчета. Первый параметр  nFRXRecno может использоваться для тестирования передаваемых элементов, членов, например в методе Render .

Expand imageКомментарии

Применяется в: ReportListener, объект.

VisualFoxPro не вызывает событие AdjustObjectSize для каждого соответствующего объекта типа Shape / Picture, если отсутствует соответствующий программный код события при работе объекта ReportListener. Данное событие AdjustObjectSize также не выполняется в случае, когда отсутствует необходимость Растяжения графического объекта (полоса отчета фиксирована, по-высоте). Дополнительно См. раздел Диалоговый бокс Report Band Properties.

NoteОбратите Внимание

В целях повышения производительности, система Visual FoxPro не вызывает события AdjustObjectSize / EvaluateContents , если объект ReportListener не находит программного кода в этих событиях. Если вы используете стандартное размещение графических объектов, или программный код отсутствует в обоих событиях, или противоречит друг другу. Выполняется только программный код события объекта, находящегося на самом "функциональном" уровне. Производительность выполнения события AdjustObjectSize складывается из производительности данного события для каждого графического элемента Shape / Picture в Отчете; производительность выполнения события EvaluateContents может варьироваться. Дополнительно См. раздел EvaluateContents, Событие.

Объект ReportListeners оценивает возможность размещения объекта Shapes, при дальнейшем размещении пользовательского графического объекта, который может быть в дальнейшем заменить заготовку Shapes.

Событие AdjustObjectSize не поддерживается для объектов Shapes / Pictures, которые располагаются между полосой Заголовка отчета, или между последней нижней полосой и поддоном Отчета; и для объектов с изменяемой криввизной.

Хотя объект oObjProperties имеет несколько характеристик, только одно используется активно объектом ReportListener, это -  oObjProperties.height. Изменение свойства oObjProperties.heightпроисходит только в том случае, когда требуется большая высота, чем есть фактически. Изменение высоты конкретного объекта может привести к изменению высотных характеристик других, соседних объектов, или высоты конкретной Полосы Отчета

Поскольку объекты Shapes / Pictures не поддерживаются для вращаемых Полос, поэтому вы не можете изменить высоту Элементов, которые размещаются на нескольких страницах отчета. Если Картинка не помещается на текущей странице Отчета, объект ReportListener пытается изменить высоту так, чтобы разместить его на следующей странице. В некоторых случаях, когда не все полосы Отчета вмещаются на текущей странице, часть их может быть перемещена на следующую страницу Отчета. См. дополнительно раздел Полосы Отчета .

Член объекта oObjProperties.maxheightavailable определяет максимально возможную высоту размещения Объекта на текущей странице Отчета, и может быть использован для тестирования возможности размещения объекта..

Когда вы задаете значение Высоты, большее чем oObjProperties.maxheightavailable, и при этом oObjProperties.reload = True (.T.),  то объект ReportListener не вызывает на выполнение событие Render для данного элемента Отчета в текущей Странице. Взамен этого, событие  AdjustObjectPage вызывается для данного объекта на следующей страницы.

На следующей странице Отчета свойство oObjProperties.height устанавливается в прежнее значение, oObjProperties.reattempt устанавливается как = True (.T.), а свойство oObjProperties.maxheightavailable принимает новое значение, зависящее от наступивших обстоятельств и значения свойства oObjProperties.top следующей страницы. С этого момента, вы можете пересчитывать высоту графического элемента отчета для вывода на данной странице.

Caution noteОбратите Внимание

Если устанавливается большая высота объекта для некоторой страницы отчета, то данный графический объект не выводится. Никакой ошибки не происходит, вывод отчета продолжается, с учетом попыток вывода данного объекта на последующих страницах. Нужно использовать значение члена oObjProperties.reattempt для контроля переполнения текущей страницы отчета и перегрузки следующей страницы.

Изменение значения члена oObjProperties.widthне приводят ни к каким реакциям управляющего объекта ReportListener, однако данные значенияч будут переданы в ваш производный класс, для обработки в коде события Render, если oObjProperties.reload = True (.T.).

Оба значения членов (oObjProperties.height / oObjProperties.width) могут изменяться в диапазонах 0 - 64000. Если вычисляемое значение выходит за рамки диапазона 0 - 64000 - ошибки не происходит.

Значения членов (oObjProperties.top / oObjProperties.left) - не изменяются (Read_Only). Однако, Эти значения передаются во все производные классы, и в каком-то случае могут быть использованы, при обработке графических объектов управляющим механизмом ReportListener.

Expand imageПример

В рассматриваемом примере, регулируется высота Контрола Отчета (например, картинки), высота которой может меняться для каждой записи управляющей Таблицы отчета. В одном столбце таблицы хранится имя соответствующего файла картинки, в другом столбце - высота картинки, в дюймах. В различных записях таблицы могут храниться картинки с различными высотами, или картинок может не быть совсем. В данном  отчете для картинки отводится всего несколько пикселей, в высоту. Элементы отчета, расположенные ниже данного объекта, имеют отметку FLOAT, относительно данной области Отчета.

В программном коде события BeforeReport, объект ReportListener определяет для каждой записи файла FRX  - размер выводимой Картинки,  который будет использоваться в дальнейшем. Когда происходит событие AdjustObjectSize, объект ReportListener проверяет соответствие высоты представленного места с высотой картинки для текущей записи nFRXRecno,  в случае необходимости происходит корректировка данного значения высоты.

NoteСовет

Обратите вномание, что в программном коде события AdjustObjectSize определяется высота таблицы, как 960. Размер Таблицы измеряется в дюймах, и объект ReportListener переопределяет размеры объекта в Отчете, как 960 точек/дюйм (DPI).

  CopyCode imageКопировать Код
DEFINE CLASS rl AS ReportListener
FrxPic = 0

PROCEDURE BeforeReport()
SET DATASESSION TO (THIS.FRXDataSession)
SELECT FRX
LOCATE FOR ObjType = 17 && Картинка
IF EOF()
THIS.FrxPic = 0
ELSE
THIS.FrxPic = RECNO()
ENDIF
ENDPROC

PROCEDURE AdjustObjectSize(nFrxRecno,oProps)
IF nFrxRecno = THIS.FrxPic
SET DATASESSION TO (THIS.CurrentDataSession)
IF (NOT EMPTY(MyTable.picFile))
* преобразование в единицы DPI:
oProps.Height = MyTable.picInches * 960
oProps.Reload = .T.
ENDIF
ENDIF
ENDPROC

ENDDEFINE

Expand imageСм. также