Пример использования события OnBeforePrint

       Продемонстрируем вышесказанное на практике. Создадим отчет – список клиентов, в котором будут представлены только компании, название которых начинается с буквы "А".

 

       Создадим новый проект в Delphi, положим на форму компоненты TTable, TfrxDBDataSet, TfrxReport и настроим их:

 

Table1:

DatabaseName = 'DBDEMOS'

TableName = 'customer.db'

 

frxDBDataSet1:

DataSet = Table1

UserName = 'Customers'

 

       Зайдем в редактор отчета и создадим отчет следующего вида:

 

clip0180

 

       Выделим дата-бэнд и переключимся на закладку "События" в инспекторе объектов:

 

clip0181

 

       Чтобы создать обработчик события OnBeforePrint (именно оно нам подходит больше всего), надо сделать двойной щелчок мышью на пустом поле напротив имени события:

 

clip0182

 

       При этом в текст скрипта добавляется пустой обработчик и дизайнер переключается на закладку "Код":

 

clip0183

 

       Как видим, все очень похоже на то, как работает среда Delphi. Нам остается только вписать следующий код в тело обработчика:

 

PascalScript:

 

if Copy(<Customers."Company">, 1, 1) = 'A' then

MasterData1.Visible := True else

MasterData1.Visible := False;

 

C++Script:

 

if (Copy(<Customers."Company">, 1, 1) == "A")

MasterData1.Visible = true;

else

MasterData1.Visible = false;

 

       Запустим отчет на выполнение и убедимся, что скрипт работает правильно:

 

_img251

 

       Поясним некоторые моменты. Вы можете назначить один обработчик сразу для нескольких событий разных объектов – в этом случае параметр Sender определяет тот объект, который инициировал событие (аналогично параметру Sender в событиях Delphi). Чтобы присвоить событию имя уже существующего обработчика, можно ввести его вручную в инспекторе объектов, а можно выбрать из выпадающего списка – опять же, аналогично тому, как это происходит в среде Delphi:

 

clip0184

 

       Удаляется ссылка на обработчик просто – выделите нужное свойство и нажмите клавишу Delete.