FastReport: Abhängige Formatierung von Feldern
Inhaltsverzeichnis
1 Allgemeines
Felder in einem Report kann man im FastReport-Designer selbst ja ganz einfach formatieren, indem man man das Feld markiert (einfach anklickt) und dann in den Formatlietsen oben einstellt:
- Schriftart
- Schriftgröße
- Schriftstil
- Ausrichtung
usw. Hier wird beschrieben, wie man die Formatierung auch abhängig von bestimmten Werten (z.B. einem Druck-Kennzeichen aus der Datenbank) ändern kann.
2 Highlight setzen
2.1 Feld bearbeiten
Klicken Sie mit der rechten Maustaste auf das Feld und wählen Bearbeiten aus.
Dann wählen Sie in dem Bearbeitungsfenster die Seite Highlight aus.
Beispiel:
Hier können Sie nun Formeln angeben, die unter bestimmten Ergebnissen die Formatierung des Feldes festlegen.
Für ein Feld können mehrere Formeln hinterlegt werden. So ist es z.B. möglich, dass ein Feld in Fettschrift ausgegeben wird, wenn ein bestimmtes Kennzeichen der Wert 1 hat und in roter Farbe, wenn der Wert 2 ist.
Um eine Formel hinzuzufügen klicken Sie auf Hinzufügen, zum Bearbeiten einer Formel auf Ändern.
2.2 Daten
Hier kann man Formeln mit Datenbank-Feldern erstellen:
2.3 Variablen
2.4 Funktionen
3 Formatierung per Code ändern
Eine Alternative zum oben beschriebenen Highlight-Verfahren ist es, Felder per Code zu formatieren. Dieser Code wird erst kurz vor dem Drucken (oder anzeigen) des Objektes ausgeführt und ändert z.B. die Schrift des Feldes.
Das ist etwas aufwändiger, aber viel mächtiger.
3.1 OnBeforePrint: Kurz vor dem Drucken
Jedes Objekt in einem Report hat im Objekt-Inspektor Ereignisse. Uns interessiert von diesen Ereignissen nur eines:
OnBeforePrint
Dieses Ereignis wird von FastReport kurz vor dem Drucken des Objekts aufgerufen. Sie können nun einen Code schreiben, der das Objekt (oder andere!) formatiert, positioniert usw.
3.1.1 Einfaches Beispiel
In einem Angebots-/Auftragsreport gibt es im Titel ein Feld "Rabatt":
Nun will man aber, dass dieses Feld nicht gedruckt wird, wenn es gar keinen Rabatt im Auftrag gibt. Also öffnet man im Objektinspektor das Ereignis OnBeforePrint mit einem Doppelklick darauf und gibt diesen Code ein:
// Titel "Rabatt" in Überschrift unterdrücken, wenn keine // Rabatt-Postion vorhanden ist. if <AuftrStatistik."AnzahlRabattPos"> = 0 then memoHeaderRabattTitel.Visible := False else memoHeaderRabattTitel.Visible := True;
- Hinweis:
- Hinter diesem Feld liegt ein leeres Textfeld, das den Rahmen anzeigt, wenn dieses Feld unsichtbar ist! Damit dieses Feld sich der maximalen Höhe des Bandes anpasst, wurde die Eigenschaft Auf Maximalhöhe dehnen eingeschaltet.
3.1.2 Aufwändiges Beispiel
In einem Angebots-/Auftragsreport will man die Position hervorheben, die zu einem Set oder Zubehör gehören:
- Die Hauptartikel sollen in Fettschrift gedruckt werden.
- Die Unterartikel sollen eingerückt werden.
Diese Aufgaben erledigt man am Besten per Code im Ereignis OnBeforePrint des zugehörigen Bandes.
Also klickt man zuerst auf das Band DetailPositionen und öffnet im Objektinspektor das Ereignis OnBeforePrint mit einem Doppelklick darauf und gibt diesen Code ein:
// Formatierungen für Sets und Zubehör: // Dieser Code wird ausgeführt, BEVOR das Positionen-Detail-Band // ausgegeben wird. Hier werden z.B. die Feld-Schrift-Styles geändert, // wenn die Position einen Haupt-Set-Artikel oder -Zubehör-Artikel // beinhaltet. // Standard-Einstellungen: memoPosBezeichnung.Font.Style := 0; // Schrift-Stil "Normal" memoPosMengeAuftrag.Font.Style := 0; memoPosEinzelPreis.Font.Style := 0; memoPosRabattBetrag.Font.Style := 0; memoPosGesBetrag.Font.Style := 0; memoPosBezeichnung.Left := 1.3 * fr1cm; // Position links memoPosBezeichnung.Width := 9.2 * fr1cm; // Breite // Set-Hauptling: if ( <Positionen."SetNr"> > 0 ) and ( <Positionen."SetNrHauptArtikel"> > ) then begin memoPosBezeichnung.Font.Style := fsBold; memoPosMengeAuftrag.Font.Style := fsBold; memoPosEinzelPreis.Font.Style := fsBold; memoPosRabattBetrag.Font.Style := fsBold; memoPosGesBetrag.Font.Style := fsBold; end; // Set-Position: if ( <Positionen."SetNr"> > 0 ) and ( <Positionen."SetNrHauptArtikel"> = ) then begin // memoPosBezeichnung.Font.Style := fsItalic; memoPosBezeichnung.Left := 2.3 * fr1cm; memoPosBezeichnung.Width := 8.2 * fr1cm; end; // Zubehör-Hauptartikel: if <Positionen."ZubehoerKennzch_1Haupt_2Unter"> = 1 then begin memoPosBezeichnung.Font.Style := fsBold; memoPosMengeAuftrag.Font.Style := fsBold; memoPosEinzelPreis.Font.Style := fsBold; memoPosRabattBetrag.Font.Style := fsBold; memoPosGesBetrag.Font.Style := fsBold; end; // Zubehör-Unterposition: if <Positionen."ZubehoerKennzch_1Haupt_2Unter"> = 2 then begin memoPosBezeichnung.Font.Style := fsItalic; memoPosMengeAuftrag.Font.Style := fsItalic; memoPosEinzelPreis.Font.Style := fsItalic; memoPosRabattBetrag.Font.Style := fsItalic; memoPosGesBetrag.Font.Style := fsItalic; memoPosBezeichnung.Left := 2.3 * fr1cm; memoPosBezeichnung.Width := 8.2 * fr1cm; end;
Bitte beachten Sie, dass durch diesen Code die Position des Bezeichnungsfeld festgelegt wird. Egal, wo das Feld im Designer platziert wurde, wird es bei der Ausführung des Reports immer fest positioniert! Will man Feld z.B. nach rechts vesrchieben, weil die Mengenspalte links hin kommen soll, muss man auch die Koordinaten im Code ändern!
3.2 Positionsangaben im Code
Bitte beachten Sie, dass Positionsangaben und Objekt-Koordinaten im Code (Left, Top, Width, Height) in Pixeln gemacht werden!
Damit die Umrechnung einfach wird, stellt FastReport mehrere Konstanten zur Vefügung:
Konstante | Erläuterung | Wert |
---|---|---|
fr01cm | Umrechnung von Pixeln in Millimeter. | 3.77953 |
fr1cm | Umrechnung von Pixeln in Centimeter. | 37.7953 |
fr01in | Umrechnung von Pixeln in 0,1 Inch (Zoll). | 9.6 |
fr1in | Umrechnung von Pixeln in 1 Inch (Zoll). | 96 |
Beispiel: Um die Höhe eines Bandes aus 5 mm zu setzen kann man angeben:
Band.Height := fr01cm * 5;
oder
Band.Height := fr1cm * 0.5;
4 Farben
Sie können jedem Objekt eine Farbe zuweisen, abhängig von einem Wert in einem Datenbank-Feld. Dazu kann man der Eigenschaft "Color" eine Farb-Konstante oder eine Hexadezimale Zahl zuweisen.
Siehe FastReport Farb-Konstanten.