FastReport---Report construction with the help of a code

减小字体 增大字体 作者:佚名  来源:转载  发布时间:2010-10-30 13:00:59

The FastReport engine usually is responsible for report’s constructing. It shows

report’s bands in a particular order as many times, as the datasource to which it is

connected requires, thus forming a finished report. Sometimes it is necessary to create a

report of a non-standard form, which FastReport’s engine is unable to produce. In this

case, one can use the ability of constructing a report manually, with the help of the

«TfrxReport.OnManualBuild» event. If to define a handler of this event, the FastReport

engine sends management to it. At the same time, allocation of responsibilities for

forming a report is changed in the following way:

FastReport engine:

- report’s preparation (script, data sources initialization, bands’ tree forming)

- all calculations (aggregate functions, event handlers)

- new pages/columns’ forming (automatic showing a page/column header/footer, report

title/summary)

- other routine work

Handler:

- bands’ presentation in a certain order

16 FastReport 4.6 Programmer's manual

© 1998-2008 Fast Reports Inc.

The «OnManualBuild» handler’s essence is to issue commands concerning

presenting certain bands to the FastReport’s engine. The engine itself will do the rest: a

new page will be created, as soon as there is no place in the current one; execution of

scripts will be performed, etc.

The engine is represented with the «TfrxCustomEngine» class. A link to the

instance of this class is located in the «TfrxReport.Engine» property.

procedure NewColumn;

Creates a new column. If a column is the last one, it creates a new page.

procedure NewPage;

Creates a new page.

procedure ShowBand(Band: TfrxBand); overload;

Presents a band.

procedure ShowBand(Band: TfrxBandClass); overload;

Presents a band of the given type.

function FreeSpace: Extended;

Returns the amount of free space on the page (in pixels). After the next band is presented,

this value descends.

property CurColumn: Integer;

Returns/sets the current column’s number

property CurX: Extended;

Returns/sets the current X position.

property CurY: Extended;

Returns/sets the current Y position. After the next band is presented, this value ascends.

property DoublePass: Boolean;

Defines whether a report is a two-pass one.

property FinalPass: Boolean;

Defines whether the current pass is the last one.

property FooterHeight: Extended;

Returns the page footer height.

property HeaderHeight: Extended;

Returns the page header height.

property PageHeight: Extended;

Returns the height of the page’s printable region.

Working with TfrxReport component 17

© 1998-2008 Fast Reports Inc.

property PageWidth: Extended;

Returns the width of the page’s printable region.

property TotalPages: Integer;

Returns the number of pages in a finished report (only on the second pass of the two-pass

report).

Let us give an example of a simple handler. There is two «Master Data» bands in a

report, which are not connected to data. The handler presents these bands in an interlaced

order, six times each one. After six bands, a small gap is made.

Pascal:

var

i: Integer;

Band1, Band2: TfrxMasterData;

{ find required bands }

Band1 := frxReport1.FindObject('MasterData1'as TfrxMasterData;

Band2 := frxReport1.FindObject('MasterData2'as TfrxMasterData;

for i := to do

begin

{ lead/deduce bands one after another }

frxReport1.Engine.ShowBand(Band1);

frxReport1.Engine.ShowBand(Band2);

{ make a small gap }

if i = then

frxReport1.Engine.CurY := frxReport1.Engine.CurY + 10;

end;

C++:

int i;

TfrxMasterData * Band1;

TfrxMasterData * Band2;

// find required bands

Band1 := dynamic_cast <TfrxMasterData *> (frxReport1->FindObject("MasterData1"));

Band2 := dynamic_cast <TfrxMasterData *> (frxReport1->FindObject("MasterData2"));

for(i = 1; i <= 6; i++)

{

// lead/deduce bands one after another

frxReport1->Engine->ShowBand(Band1);

frxReport1->Engine->ShowBand(Band2);

// make a small gap

if(i == 3)

frxReport1->Engine->CurY += 10;

}

The next example shows two groups of bands alongside each other.

Pascal:

18 FastReport 4.6 Programmer's manual

© 1998-2008 Fast Reports Inc.

var

i, j: Integer;

Band1, Band2: TfrxMasterData;

SaveY: Extended;

Band1 := frxReport1.FindObject('MasterData1'as TfrxMasterData;

Band2 := frxReport1.FindObject('MasterData2'as TfrxMasterData;

SaveY := frxReport1.Engine.CurY;

for j := to do

begin

for i := to do

begin

frxReport1.Engine.ShowBand(Band1);

frxReport1.Engine.ShowBand(Band2);

if i = then

frxReport1.Engine.CurY := frxReport1.Engine.CurY + 10;

end;

frxReport1.Engine.CurY := SaveY;

frxReport1.Engine.CurX := frxReport1.Engine.CurX + 200;

end;

C++:

int i, j;

TfrxMasterData * Band1;

TfrxMasterData * Band2;

Extended SaveY;

Band1 = dynamic_cast <TfrxMasterData *> (frxReport1->FindObject("MasterData1"));

Band2 = dynamic_cast <TfrxMasterData *> (frxReport1->FindObject("MasterData2"));

SaveY = frxReport1->Engine->CurY;

for(j = 1; j <= 2; j++)

{

for(i = 1; i <= 6; i++)

{

frxReport1->Engine->ShowBand(Band1);

frxReport1->Engine->ShowBand(Band2);

if(i == 3)

frxReport1->Engine->CurY += 10;

}

frxReport1->Engine->CurY = SaveY;

frxReport1->Engine->CurX += 200;

}

Tags:

作者:佚名
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论

广告位置B