Anwendung des Objektes Engine

Navigation:  Bericht im FR-Designer > Script >

Anwendung des Objektes Engine

Previous pageReturn to chapter overviewNext page

Wir haben schon erwähnt, dass das Objekt Engine die Reportengine darstellt und die Reporterstellung steuert. Durch die Verwendung der Eigenschaften und Methoden der Engine, steuert man den Prozess der Bandverteilung auf der Seite. Am Anfang etwas Theorie.

 

Die Grafik unten zeigt die Darstellung einer Reportseite und der Namen der Eigenschaften, welche die Maße steuern.

_img242

 

Eine Seite besitzt die physischen Maße PaperWidth, PaperHeight. Diese entsprechen namentlich den Eigenschaften der Seite, welche im Objektinspektor zusehen sind. Die Seite besitzt das Format A4 und ist 210õ297 mm groß.

 

Die Parameter PageWidth, PageHeight bestimmen die Größe der Seite auf der der Druck erfolgt. Diese ist in der Regel kleiner als die eigentliche Seite. Die Maße der bedruckbaren Fläche der Seite werden über die Eigenschaften LeftMargin, TopMargin, RightMargin, BottomMargin gesteuert. Die Eingabe der Maße der bedruckbaren Fläche in Pixel erfolgt über die Eigenschaften Engine.PageWidth, Engine.PageHeight

 

Das Parameter FreeSpace bestimmt die Höhe der freien Fläche der Seite. Enthält die Seite das Band "Seitenfuß" (Page Footer), so wird dessen Höhe beim Berechnen der Höhe durch FreeSpace berücksichtigt. Dieses Parameter in Pixel ist die Funktion Engine.FreeSpace. Man muss hinzufügen, dass nach dem Anzeigen des nächsten Bandes der freie Platz auf der Seite abnimmt. Auch dies berücksichtigt FreeSpace beim Berechnen.

 

Wie erfolgt das Formieren der Seiten eines fertigen Reports? Der Kern von FastReport fügt der Seite Bänder hinzu, solange es genügend Platz für das Band gibt. Reicht der Platz nicht aus, wird das Band "Seitenfuß" gedruckt (falls vorhanden) und eine neue Seite wird erstellt. Wie oben erwähnt, reduziert sich nach dem nächsten Band die freie Fläche. Außerdem wird das folgende Band von der gegenwärtigen Position angezeigt, die durch Koordinaten auf der X-Achse und Y-Achse definiert wird. Die Steuerung erfolgt über die Eigenschaften Engine.CurX, Engine.CurY. Nach dem Druck des nächsten Bandes erhöht CurY automatisch die Höhe, entsprechend der des Bandes. Nach dem Erstellen der neuen Seite ist CurY = 0. CurX verändert sich nur bei Multispalten-Reporten.

 

Die Eigenschaften Engine.CurX, Engine.CurY sind nicht nur zum Lesen verfügbar, sondern auch zum Schreiben. Die Bänder können dadurch manuell verschoben werden indem man eines der Ereignisse nutzt. Betrachten wir folgendes Beispiel:

 

_img243

 

Man kann ihn folgendermaßen drucken:

 

_img244

 

Die ist das  Resultat eines Scripts, zugeteilt dem Ereignis OnBeforePrint  des Bandes:

 

PascalScript:

 

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);

begin

 Engine.CurX := Engine.CurX + 5;

end;

 

C++ Script:

 

void MasterData1OnBeforePrint(TfrxComponent Sender)

{

 Engine.CurX = Engine.CurX + 5;

}

 

Durch Manipulation der Eigenschaft CurY kann man die Bänder übereinander darstellen:

 

_img245

 

Das verantwortliche Script:

 

PascalScript:

 

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);

begin

 Engine.CurY := Engine.CurY - 15;

end;

 

C++ Script:

 

void MasterData1OnBeforePrint(TfrxComponent Sender)

{

 Engine.CurY = Engine.CurY - 15;

}

 

Die Methode Engine.NewPage erlaubt die Trennung der Seite an der gewünschten Stelle. Der Druck erfolgt auf der nächsten Seite. In unserem Beispiel trennen wir die Seite nach der zweiten Zeile:

 

 

PascalScript:

 

procedure MasterData1OnAfterPrint(Sender: TfrxComponent);

begin

if <Line> = 2then

   Engine.NewPage;

end;

 

C++ Script:

 

void MasterData1OnAfterPrint(TfrxComponent Sender)

{

if (<Line> == 2)

   Engine.NewPage();

}

 

Beachten Sie, dass wir es jetzt im Ereignis OnAfterPrint machen, sprich nachdem das Band schon erstellt worden ist. Die Systemvariable Line fügt die korrekte Nummer des Eintrags ein.

 

Die Methode Engine.NewColumn trennt die Spalten im Multispalten-Report. Nach der letzten Spalte wird eine neue Seite erstellt.