Пример использования события OnBeforePrint
Продемонстрируем вышесказанное на практике. Создадим отчет – список клиентов, в котором будут представлены только компании, название которых начинается с буквы "А".
Создадим новый проект в Delphi, положим на форму компоненты TTable
, TfrxDBDataSet
, TfrxReport
и настроим их:
Table1:
DatabaseName = 'DBDEMOS'
TableName = 'customer.db'
frxDBDataSet1:
DataSet = Table1
UserName = 'Customers'
Зайдем в редактор отчета и создадим отчет следующего вида:
Выделим дата-бэнд и переключимся на закладку "События" в инспекторе объектов:
Чтобы создать обработчик события OnBeforePrint (именно оно нам подходит больше всего), надо сделать двойной щелчок мышью на пустом поле напротив имени события:
При этом в текст скрипта добавляется пустой обработчик и дизайнер переключается на закладку "Код":
Как видим, все очень похоже на то, как работает среда 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;
Запустим отчет на выполнение и убедимся, что скрипт работает правильно:
Поясним некоторые моменты. Вы можете назначить один обработчик сразу для нескольких событий разных объектов – в этом случае параметр Sender
определяет тот объект, который инициировал событие (аналогично параметру Sender
в событиях Delphi). Чтобы присвоить событию имя уже существующего обработчика, можно ввести его вручную в инспекторе объектов, а можно выбрать из выпадающего списка – опять же, аналогично тому, как это происходит в среде Delphi:
Удаляется ссылка на обработчик просто – выделите нужное свойство и нажмите клавишу "Delete".