Komponenten Steuern
Zuletzt geändert: 14.03.2026 17:06

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 #

KonstanteStil
fsBoldFett
fsItalicKursiv
fsUnderlineUnterstrichen
fsStrikeOutDurchgestrichen

Kombinationen sind möglich:

DBTextFeld.Font.Style := [fsBold, fsItalic];

Verfügbare Farben #

KonstanteFarbe
clBlackSchwarz
clRedRot
clGreenGrün
clBlueBlau
clWhiteWeiß
clGrayGrau
clYellowGelb
clNavyDunkelblau
clMaroonDunkelrot

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 Sie BeforeGenerate für Sichtbarkeitsentscheidungen und BeforePrint für Formatierungen. So stellen Sie sicher, dass die Layoutberechnung mit den korrekten Sichtbarkeiten arbeitet.