Событие OnAfterData

 Это событие генерируется после того, как объект отчета был наполнен данными, к которым он привязан. Событие удобно использовать для анализа значения поля БД или выражения, которое содержится в объекте. Дело в том, что это значение помещается в служебную переменную Value, значение которой доступно только в этом событии. Так, имея два объекта "Текст" с содержимым [Table1."Field1"] и [<Table2."Field1"> + 10], удобно анализировать значение этих выражений, ссылаясь на переменную Value:

 

PascalScript:

 

if Value > 3000 then

 Memo1.Color := clRed

 

C++ Script:

 

if (Value > 3000)

 Memo1.Color = clRed;

 

вместо того, чтобы писать что-то вроде:

 

PascalScript:

 

if <Table1."Field1"> > 3000 then

 Memo1.Color := clRed

 

C++ Script:

 

if (<Table1."Field1"> > 3000)

 Memo1.Color = clRed;

 

 Более того, использование Value вместо выражения дает возможность написания одного универсального обработчика события OnAfterData и подключения его к нескольким объектам.

 

 Одно замечание – если в объекте содержится несколько выражений, например [expr1] [expr2] – в переменную Value попадет значение последнего выражения.

 

 Событие OnAfterData отлично подходит для вычисления высоты и ширены таких объектов как "Текст", т.е. если в скрипте отчета нужно получить реальное значение высоты объекта (растягиваемый объект), а в объекте "Текст" используется выражение, то можно использовать такой скрипт в событии OnAfterData:

 

PascalScript:

 

var

 MemoWidth: Extended;

                                                     

begin

 MemoWidth := TfrxMemoView(Sender).CalcWidth;                                    

end;

 

C++ Script:

 float MemoWidth;

 

 MemoWidth = TfrxMemoView(Sender).CalcWidth;

 

 Если данный код поместить в событие OnBeforePrint, то результатом будет высота объекта, в котором содержится выражения, а не его значение.