FastReport: Abhängige Formatierung von Feldern

Aus GEVITAS
Wechseln zu: Navigation, Suche

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:

FastReport Feld Highlight.png

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:

FastReport Feld Highlight Daten.png


2.3 Variablen

FastReport Feld Highlight Variablen.png


2.4 Funktionen

FastReport Feld Highlight Funktionen.png


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":

FastReport Auftrag RabattTitel.png

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.


5 Links