Komponenten steuern #
Einer der mächtigsten Aspekte von Pascal-Script ist die Möglichkeit, die Eigenschaften von Berichtskomponenten zur Laufzeit zu verändern. Sie können Farben, Schriftarten, Sichtbarkeit und Texte dynamisch an die Daten anpassen.
Sichtbarkeit steuern #
Komponenten ein- und ausblenden #
Jede Komponente hat eine Eigenschaft Visible. Setzen Sie sie auf False, um die Komponente auszublenden:
procedure DetailBeforeGenerate;
begin
{ Rabattspalte nur anzeigen, wenn Rabatt vorhanden }
LabelRabatt.Visible := Positionen['Rabatt'] > 0;
DBTextRabatt.Visible := Positionen['Rabatt'] > 0;
end;
Bänder ausblenden #
Auch ganze Bänder können unsichtbar gemacht werden:
procedure SummaryBeforeGenerate;
begin
{ Summary nur drucken, wenn mehr als eine Position }
Summary.Visible := Positionen.RecordCount > 1;
end;
Unterberichte umschalten #
Ein typisches Muster bei EULANDA-Rechnungsformularen: Je nach Belegart werden unterschiedliche Unterberichte angezeigt (siehe auch Beispiele):
procedure SummaryBeforePrint;
begin
SubRechnungNetto.Visible := not istBrutto;
SubRechnungBrutto.Visible := istBrutto;
end;
Schrift steuern #
Schriftfarbe ändern #
procedure DetailBeforePrint;
begin
{ Negative Beträge rot anzeigen }
if Positionen['Gesamtpreis'] < 0 then
DBTextPreis.Font.Color := clRed
else
DBTextPreis.Font.Color := clBlack;
end;
Schriftgröße und -stil #
procedure DetailBeforePrint;
begin
{ Hauptpositionen fett und größer }
if Positionen['Positionsart'] = 0 then
begin
DBTextBezeichnung.Font.Size := 12;
DBTextBezeichnung.Font.Style := [fsBold];
end
else
begin
DBTextBezeichnung.Font.Size := 10;
DBTextBezeichnung.Font.Style := [];
end;
end;
Verfügbare Schriftstile #
| Konstante | Stil |
|---|---|
fsBold | Fett |
fsItalic | Kursiv |
fsUnderline | Unterstrichen |
fsStrikeOut | Durchgestrichen |
Kombinationen sind möglich:
DBTextFeld.Font.Style := [fsBold, fsItalic];
Verfügbare Farben #
| Konstante | Farbe |
|---|---|
clBlack | Schwarz |
clRed | Rot |
clGreen | Grün |
clBlue | Blau |
clWhite | Weiß |
clGray | Grau |
clYellow | Gelb |
clNavy | Dunkelblau |
clMaroon | Dunkelrot |
Beliebige RGB-Farben erzeugen Sie mit der Funktion RGB(Rot, Grün, Blau):
DBTextFeld.Font.Color := RGB(255, 128, 0); { Orange }
Texte dynamisch zusammensetzen #
Label-Caption setzen #
procedure HeaderBeforePrint;
begin
LabelTitel.Caption := 'Rechnung Nr. ' + Rechnungskopf['RechNr'];
end;
Felder verketten #
Ein häufiger Anwendungsfall ist das Zusammensetzen von Adresszeilen:
procedure DetailBeforePrint;
var
Zeile: String;
begin
Zeile := Adresse['Strasse'];
if Adresse['Land'] <> '' then
Zeile := Adresse['Land'] + '-' + Adresse['Plz'] + ' ' + Adresse['Ort']
else
Zeile := Adresse['Plz'] + ' ' + Adresse['Ort'];
LabelAdresszeile.Caption := Zeile;
end;
Adresse in ein Memo laden #
Für mehrzeilige Adressen verwenden Sie eine Memo-Komponente. Leere Zeilen werden unterdrückt:
procedure Memo1OnPrint;
var
Zeile: String;
begin
Memo1.Lines.Clear;
{ Name }
Zeile := Adresse['Name1'];
if Zeile <> '' then
Memo1.Lines.Add(Zeile);
{ Zusatz }
Zeile := Adresse['Name2'];
if Zeile <> '' then
Memo1.Lines.Add(Zeile);
{ Straße }
Zeile := Adresse['Strasse'];
if Zeile <> '' then
Memo1.Lines.Add(Zeile);
{ PLZ + Ort }
Zeile := Adresse['Plz'] + ' ' + Adresse['Ort'];
Memo1.Lines.Add(Zeile);
{ Land }
Zeile := Adresse['Land'];
if Zeile <> '' then
Memo1.Lines.Add(Zeile);
end;
Position und Größe #
Komponenten verschieben #
procedure DetailBeforePrint;
begin
{ Label nach rechts verschieben, wenn kein Rabatt }
if Positionen['Rabatt'] = 0 then
LabelPreis.Left := 5.0
else
LabelPreis.Left := 3.5;
end;
Höhe anpassen #
procedure DetailBeforePrint;
begin
{ Bandhöhe verdoppeln bei langen Texten }
if Length(Positionen['Langtext']) > 200 then
Detail.Height := 1.0
else
Detail.Height := 0.5;
end;
Praxisbeispiel: Bedingte Zeilenformatierung #
Ein vollständiges Beispiel, das Zebrastreifen und Hervorhebungen kombiniert:
var
Zeilennr: Integer;
procedure GlobalOnCreate;
begin
Zeilennr := 0;
end;
procedure DetailBeforeGenerate;
begin
Zeilennr := Zeilennr + 1;
end;
procedure DetailBeforePrint;
begin
{ Zebrastreifen }
if (Zeilennr mod 2) = 0 then
ShapeHintergrund.Color := RGB(240, 240, 240)
else
ShapeHintergrund.Color := clWhite;
{ Kritische Bestände rot markieren }
if Artikel['Bestand'] < Artikel['Mindestbestand'] then
begin
DBTextBestand.Font.Color := clRed;
DBTextBestand.Font.Style := [fsBold];
end
else
begin
DBTextBestand.Font.Color := clBlack;
DBTextBestand.Font.Style := [];
end;
end;
Tipp: Verwenden SieBeforeGeneratefür Sichtbarkeitsentscheidungen undBeforePrintfür Formatierungen. So stellen Sie sicher, dass die Layoutberechnung mit den korrekten Sichtbarkeiten arbeitet.