Ereignisse
Zuletzt geändert: 14.03.2026 17:06

Ereignisse (Events) #

Ereignisse (Events) sind der zentrale Mechanismus, über den Pascal-Script in die Berichtsgenerierung eingreift. Jedes Mal, wenn der Bericht gedruckt oder in der Vorschau angezeigt wird, durchläuft die Report-Engine eine festgelegte Abfolge. An bestimmten Punkten dieser Abfolge werden Ihre Event-Handler aufgerufen.

Das Ereignismodell #

Die Berichtsgenerierung läuft in zwei Phasen ab:

  1. Generate-Phase – Die Report-Engine durchläuft die Daten und bestimmt, welche Bänder und Komponenten gedruckt werden. Hier können Sie Daten vorbereiten, Sichtbarkeiten steuern und Berechnungen durchführen.
  2. Print-Phase – Die fertig generierten Elemente werden gedruckt (oder in der Vorschau dargestellt). Hier können Sie letzte Anpassungen an der Darstellung vornehmen.

Ereignisse der Bänder #

Alle Bänder (Header, Detail, Footer, Summary, Gruppenkopf, Gruppenfuß) haben die gleichen Ereignisse:

EreignisPhaseBeschreibung
BeforeGenerateGenerateWird aufgerufen bevor das Band generiert wird. Ideal für Datenprüfungen und Sichtbarkeitssteuerung.
BeforePrintPrintWird aufgerufen bevor das Band gedruckt wird. Gut für letzte Formatierungen.
AfterPrintPrintWird aufgerufen nachdem das Band gedruckt wurde.

Typischer Einsatz #

procedure DetailBeforeGenerate;
begin
  { Zeile nur anzeigen, wenn Betrag > 0 }
  if Positionen['Menge'] = 0 then
    Detail.Visible := False
  else
    Detail.Visible := True;
end;

Ereignisse des Reports #

Der Report selbst hat zusätzliche Ereignisse:

EreignisBeschreibung
BeforePrintWird vor dem Start des gesamten Druckvorgangs aufgerufen
AfterPrintWird nach Abschluss des gesamten Druckvorgangs aufgerufen

Globale Ereignisse #

In der Modul-Ansicht finden Sie zwei besondere globale Ereignisse:

EreignisBeschreibung
OnCreateWird beim Öffnen der Vorschau aufgerufen. Hier initialisieren Sie Objekte und Variablen.
OnDestroyWird beim Schließen der Vorschau aufgerufen. Hier geben Sie erzeugte Objekte wieder frei.

Beispiel: Objekt-Lebenszyklus #

{ Globale Variable }
var
  meineListe: TStringList;
procedure GlobalOnCreate;
begin
  meineListe := TStringList.Create;
  meineListe.Add('Erster Eintrag');
  meineListe.Add('Zweiter Eintrag');
end;
procedure GlobalOnDestroy;
begin
  meineListe.Free;
end;
Objekte, die Sie in OnCreate erzeugen, müssen in OnDestroy wieder freigegeben werden. Andernfalls entsteht ein Speicherleck.

Ereignisse der Komponenten #

Einzelne Komponenten (Labels, DBText, Shapes usw.) haben eigene Ereignisse:

EreignisBeschreibung
OnPrintWird aufgerufen, wenn die Komponente gedruckt wird
OnGetText(nur bei DBText) Ermöglicht es, den angezeigten Text zu verändern

Beispiel: Schriftgröße beim Druck ändern #

procedure Label1OnPrint;
begin
  Label1.Font.Size := 14;
end;

Einen Event-Handler anlegen #

  1. Wechseln Sie zum Reiter Berechnungen.
  2. Wählen Sie in der Baumansicht die Ereignis-Ansicht (Rechtsklick | Ereignisse).
  3. Klicken Sie auf die gewünschte Komponente oder das Band.
  4. Rechtsklick auf das gewünschte Ereignis in der Listenansicht.
  5. Wählen Sie Neu.
  6. Der Code-Editor zeigt den Prozedur-Rumpf:
procedure DetailBeforePrint;
begin

end;
  1. Fügen Sie Ihren Code zwischen begin und end ein.
  2. Kompilieren Sie mit Rechtsklick | Kompilieren.

Reihenfolge der Ereignisse #

Die Ereignisse werden in einer festen Reihenfolge ausgelöst. Für jede Zeile im Detail-Band gilt:

Detail.BeforeGenerate
  → Detail.BeforePrint
    → Komponente1.OnPrint
    → Komponente2.OnPrint
    → ...
  → Detail.AfterPrint

Für den gesamten Bericht:

Report.OnCreate  (einmalig beim Öffnen)
Report.BeforePrint
  Header.BeforeGenerate → Header.BeforePrint → Header.AfterPrint
  Detail.BeforeGenerate → Detail.BeforePrint → Detail.AfterPrint  (je Datensatz)
  Detail.BeforeGenerate → Detail.BeforePrint → Detail.AfterPrint
  ...
  Summary.BeforeGenerate → Summary.BeforePrint → Summary.AfterPrint
Report.AfterPrint
Report.OnDestroy  (einmalig beim Schließen)

Wann welches Ereignis nutzen? #

AufgabeEmpfohlenes Ereignis
Bänder oder Komponenten ein-/ausblendenBeforeGenerate
Schriftfarbe oder -größe ändernBeforePrint oder OnPrint
Variablen berechnenOnCalc (Variable-Komponente)
Text dynamisch zusammensetzenBeforePrint
Objekte erzeugen (StringList etc.)OnCreate
Objekte freigebenOnDestroy
Summen zurücksetzenBeforeGenerate des Gruppenkopf-Bandes