Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Композитный отчет QReport [D5]


REP ©   (2002-11-25 07:47:00) 

Вот кусочек исходника

unit UPreView;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
QRPrntr, ToolWin, ComCtrls, ExtCtrls, ImgList, StdCtrls,Printers, Buttons,
QRExport, TeeProcs, TeEngine, Chart, DBChart, QrTee, QuickRpt, Spin;

type
{$WARNINGS OFF}
TfrmPV = class(TForm)
Prev1: TQRPreview;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
private
jPageNum:Integer;
{ Private declarations }
fQRPrinter : TQRPrinter;
public
constructor Create(AOwner : TComponent;
AQRPrinter : TQRPrinter); virtual;

{ Public declarations }
end;

//Создаем класс предварительного просмотра
TQRCustomPreviewInterface = class(TQRPreviewInterface)
public
function Show(AQRPrinter : TQRPrinter) : TWinControl; override;
function ShowModal(AQRPrinter : TQRPrinter): TWinControl; override;
end;
{$WARNINGS ON}

var
frmPV: TfrmPV;

function TQRCustomPreviewInterface.Show(
AQRPrinter: TQRPrinter): TWinControl;
var
frm : TfrmPV;
begin
frm := TfrmPV.Create(Application, AQRPrinter);
frm.Show;
Result := frm;
end;

function TQRCustomPreviewInterface.ShowModal(
AQRPrinter: TQRPrinter): TWinControl;
var
frm : TfrmPV;
begin
frm := TfrmPV.Create(Application, AQRPrinter);
frm.ShowModal;
Result := frm;
end;

procedure TfrmPV.FormShow(Sender: TObject);
begin

...

end;


constructor TfrmPV.Create(AOwner : TComponent;
AQRPrinter : TQRPrinter);
begin
inherited Create(AOwner);
fQRPrinter := AQRPrinter;
Prev1.QRPrinter := AQRPrinter;
end;

procedure TfrmPV.FormCreate(Sender: TObject);
begin

RegisterPreviewClass(TQRCustomPreviewInterface);

end;

В отчете:
procedure TfrmAmort.qrAmortPreview(Sender: TObject);
begin
IF frmMain.ActiveMDIChild is TfrmPV Then
(frmMain.ActiveMDIChild as TfrmPV).Prev1.QRPrinter:=TQRPrinter(Sender);
//frmPV.Show;
end;



Так вот, при создании обычного отчета:
Я пишу

1. Application.CreateForm(TfrmPV, frmPV);
2. frmAmort.qrAmort.Preview;

Выполняются процедуры:
1.
procedure TfrmPV.FormCreate(Sender: TObject);
procedure TfrmPV.FormShow(Sender: TObject);
procedure TfrmPV.FormActivate(Sender: TObject);
2.
procedure TfrmAmort.qrAmortPreview(Sender: TObject);

А если выполять композитный отчет:
Мой код:
1. Application.CreateForm(TfrmPV, frmPV);
2. frmRVyb.CR.Preview;//композитный отчет

Выполняются процедуры:
1.
procedure TfrmPV.FormCreate(Sender: TObject);
procedure TfrmPV.FormShow(Sender: TObject);
procedure TfrmPV.FormActivate(Sender: TObject);
2.
function TQRCustomPreviewInterface.Show( AQRPrinter: TQRPrinter): TWinControl;
constructor TfrmPV.Create(AOwner : TComponent;
AQRPrinter : TQRPrinter);
procedure TfrmPV.FormCreate(Sender: TObject);
procedure TfrmPV.FormShow(Sender: TObject);
procedure TfrmPV.FormActivate(Sender: TObject);

В результате образуется 2 экземпляра формы.
Один пустой второй с отчетом.

Я так понимаю, дело в том, что у композитного отчета нет события OnPreview. но как быть не представляю.

Помогите, кто чем может.


REP   (2002-11-25 11:06:00) [1]

У меня создается композитный отчет и показывается в окне собственного просмотрщика. Дело в том, что создаю я preview в MDICild окне динамически. Т.е. окон может быть много и у каждого свой заголовок. Так вот, при создании окна создается 2 экземпляра окна. Причем в первом окне присваевается заголовок какой нужно, а сам отчет отображается в другом окне.:(((


Lola   (2002-11-25 10:54:00) [2]

А если тебе необходимо обработать OnPreview, то делай это для каждого отчета, или, если надо, для какого-то отдельно.


Lola   (2002-11-25 10:47:00) [3]

Честно говоря, я даже не стала смотреть код, потому что только на прошлой неделе сама делала композитный отчет.
Для формирования отчета делаешь обработчик события OnAddReport:
procedure TPagesDlg.QRCompositeReport1AddReports(Sender: TObject);
begin
QRCompositeReport1.Reports.Add(QRListForm1.QuickRep1);
QRCompositeReport1.Reports.Add(QRListForm2.QuickRep1);
end;

Предварительный просмотр составного отчета можно выполнить с помощью вызова метода QRCompositeReport1.Preview.
Больше ничего не надо. У меня работает на ура.


Наверх

Титульная страница Поиск, карта сайта Написать письмо