Создание собственного окна предварительного просмотра композитного отчета.
LOGic_BBS
Казань
Прежде чем приступим к созданию собственного окна предварительного просмотра композитного отчета, обратимся к документации FastReport и почитаем, я здесь позволю себе процитировать немного документацию FastReport.
Из цитат понятно, что это возможно сделать, но возникает ряд вопросов. Во первых к какому из репортов мы присвоим ссылку на свойство TfrxReport.Preview, не забываем что у нас пакетная печать и frxReport может быть несколько (в примере их два). Во вторых мы хотим выводить свою форму а не форму FastReport. Ну да ладно сейчас мы эту задачку будем успешно решать.
Создадим основную форму и назовем ее FormMain на нее кинем кнопку Button1, создадим еще форму она у нас и будет Форма предварительного просмотра, назовем ее PreviewForm. Теперь перейдет к кнопке Button1 формы FormMain и напишем обработчик события нажатия на кнопку.
Report.Preview:= PreviewForm.frxPreviewMain и показываем его модально PreviewForm.ShowModal;
Единственное на что хочется обратить внимание это на строчку Report.Preview := nil ;.
Все остальное хорошо документировано в документации FastReport.
Форму предварительного просмотра PreviewForm нет смысла описывать, потому что здесь можно сделать все, что пожелает ваша фантазия и возможности TfrxPreview в примере довольно все хорошо комментировано.
Создание собственных окон предварительного просмотра
FastReport показывает отчеты в стандартном окне предварительного просмотра. Если по каким-то причинам вас это не устраивает, можно создать собственную форму предварительного просмотра. Для этих целей служит компонент TfrxPreview из палитры компонентов FastReport.
…………………………………
Построение композитных отчетов (пакетная печать)
В некоторых случаях требуется организовать печать нескольких отчетов одним заданием, или формирование и отображение нескольких отчетов в одном окне просмотра. Для этого в FastReport есть средства, позволяющие построить новый отчет в дополнение к уже существующему. Метод TfrxReport.PrepareReport имеет один необязательный параметр ClearLastReport: Boolean, по умолчанию он равен True. Этот параметр определяет, надо ли очищать страницы ранее построенного отчета.
…………………………………
Из цитат понятно, что это возможно сделать, но возникает ряд вопросов. Во первых к какому из репортов мы присвоим ссылку на свойство TfrxReport.Preview, не забываем что у нас пакетная печать и frxReport может быть несколько (в примере их два). Во вторых мы хотим выводить свою форму а не форму FastReport. Ну да ладно сейчас мы эту задачку будем успешно решать.
Создадим основную форму и назовем ее FormMain на нее кинем кнопку Button1, создадим еще форму она у нас и будет Форма предварительного просмотра, назовем ее PreviewForm. Теперь перейдет к кнопке Button1 формы FormMain и напишем обработчик события нажатия на кнопку.
procedure TFormMain.Button1Click(Sender: TObject);
var
Report: TfrxReport;
begin
Report:= frxReportMain;
Report.Preview := nil;
Report.Script.Variables['dDAT'] := Edit1.Text;
Report.LoadFromFile( ExtractFilePath(Application.ExeName) + 'ReportList\Test.fr3 ');
Report.PrepareReport(True);
Report.LoadFromFile( ExtractFilePath(Application.ExeName) + 'ReportList\Test2.fr3 ');
Report.PrepareReport(False);
Report.Preview:= PreviewForm.frxPreviewMain;
PreviewForm.ShowModal;
end;
Мы загружаем первый отчет и строим его, не показывая его. Затем загружаем второй отчет в этот же объект Report и строим его с параметром ClearLastReport = False. При этом отчет добавляется к ранее построенному. После этого мы готовому отчету присваиваем ссылку на свойство TfrxReport.Preview нашего окна предварительного просмотраReport.Preview:= PreviewForm.frxPreviewMain и показываем его модально PreviewForm.ShowModal;
Единственное на что хочется обратить внимание это на строчку Report.Preview := nil ;.
Все остальное хорошо документировано в документации FastReport.
Форму предварительного просмотра PreviewForm нет смысла описывать, потому что здесь можно сделать все, что пожелает ваша фантазия и возможности TfrxPreview в примере довольно все хорошо комментировано.