Читать «Виртуальная библиотека Delphi» онлайн - страница 142
Unknown
void __fastcall TForm1::Button1Click(TObject *Sender) {
PreviewForm->Show();
QuickReport1->Preview();
}
Далее создадим обработчик события OnPreview компонента TQuickRep:
void __fastcall TQuickReport1::QuickReport1Preview(TObject *Sender) {
PreviewForm->QRPreview1->QRPrinter = QuickReport1->QRPrinter;
}
После этого данный отчет будет появляться не в стандартном окне просмотра, а в форме PreviewForm.
Самый простой способ – использовать компоненты TQRLabel, текст в которых динамически меняется во время печати (то есть способ, которым можно напечатать все, что угодно, написав при этом немного кода). В принципе можно двумерное сечение куба записать во временную таблицу или в компонент TClientDataSet, написав соответствующий цикл, и сделать отчет на ее основе. Использование DecisionQuery в качестве источника данных для отчета также вполне возможно. Другие возможные варианты – это использование автоматизации Word или Excel, либо вычисление сумм внутри отчета. Можно также использовать другие генераторы отчетов – например, с помощью Crystal Reports можно создавать отчеты, содержащие кросс-таблицы.
В составе Crystal Reports Professional имеется VCL-компонент для Delphi, элемент управления ActiveX, модуль CRPE32.PAS, котором объявлены все функции и структуры Print Engine API, и описание опубликованных методов Crystal Reports как сервера автоматизации. Соответственно есть следующие возможности подключения Crystal Reports к Delphi:
1. Использование функций Report Engine API из библиотеки CRPE32 DLL. В этом случае следует добавить в проект модуль CRPE32.PAS и сослаться на этот модуль в предложении uses. Ниже приведен пример соответствующего кода:
procedure TForm1.Button1Click(Sender: TObject);
VAR RepNam:PChar;
begin
if OpenDialog1.Execute then
begin
If PEOpenEngine then
begin RepNam := StrAlloc(80);
StrPCopy(RepNam, OpenDialog1.Filename);
JN := PEOpenPrintJob(RepNam);
if JN = 0 then
ShowMessage('Ошибка открытия отчета');
StrDispose(RepNam);
end
else
ShowMessage('Ошибка открытия отчета');
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
PEClosePrintJob(JN);
PECloseEngine;
Close;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
PEOutputToWindow(jn,'Пример использования Crystal Reports Print
Engine',30,30,600,400,0,0) ;
if PEStartPrintJob(JN, True) = False then