Streachable objects
Stretching Objects
Betrachten wir einen Fall, in dem wir mehrzeiligen Text unterschiedlicher Länge haben. Das "Text"-Objekt, das die Informationen aus diesem Feld anzeigt, hat eine feste Größe. Deshalb erscheinen einige Zeilen abgeschnitten. Was kann man dagegen tun?

Natürlich könnte entweder die Größe des Objekts erhöht oder die Schriftgröße verringert werden. Dies könnte jedoch zu Platzverschwendung auf der Ausgabeseite führen, da einige Fische lange Beschreibungen haben, während andere kurze haben. FastReport hat einige Eigenschaften, die uns helfen, dieses Problem zu lösen.
Diese Eigenschaften ermöglichen es einem Band oder einem Objekt, seine Höhe automatisch anzupassen, um den notwendigen Platz für einen bestimmten Datensatz (Zeile) zu schaffen. Um dies zu erreichen, müssen wir nur die „Stretch“-Eigenschaft sowohl des Bands als auch des „Text“-Objekts aktivieren. Das ist jedoch noch nicht alles, denn ein „Text“-Objekt mit längerem Text sollte in der Lage sein, sich selbst zu dehnen, daher müssen wir auch einige seiner anderen Eigenschaften einstellen.
Das „Text“-Objekt kann automatisch seine Höhe und Breite anpassen, um Platz für seinen Inhalt zu schaffen. „AutoWidth“ und „StretchMode“ können dafür verwendet werden. „AutoWidth“ ermöglicht es dem „Text“-Objekt, seine Breite zu variieren, sodass alle Zeilen Platz schaffen, ohne Wörter zu trennen. Dieser Modus ist nützlich, wenn ein Objekt eine einzelne Textzeile hat und wenn das Wachstum nach rechts andere Objekte nicht beeinflusst. Die „Stretch“-Eigenschaft ermöglicht es der Höhe des Objekts, zu wachsen, um den Text unterzubringen, ohne die Breite des Objekts zu ändern. "Stretch" hat mehrere Modi, die im Objektinspektor ausgewählt werden können:
smDontStretch – das Objekt nicht dehnen (der Standard)
smActualHeight – das Objekt dehnen, sodass Platz für den gesamten Text geschaffen wird
smMaxHeight – das Objekt dehnen, sodass sein Boden den Boden des Bands erreicht, in dem es platziert ist - wir werden uns diesen Modus später ansehen
Hier sind wir an der „Stretch“-Eigenschaft des „Text“-Objekts interessiert. Aktivieren Sie es über das Kontextmenü des Objekts oder indem Sie "StretchMode" auf smActualHeight setzen. Aktivieren Sie auch die „Stretch“-Eigenschaft des Bands. Vorschau des Berichts und stellen Sie sicher, dass jetzt alles wie erwartet ist.
Um Text in eine neue Zeile zu fließen, verwenden wir die Eigenschaft "Word Wrap", die aktiviert sein muss, was bereits der Standardwert ist. Diese Eigenschaft ist sinnvoll, wenn die "AutoWidth"-Eigenschaft aktiviert ist.
Wie Sie sehen können, füllt FastReport beim Erstellen des Berichts Objekte mit Daten und dehnt sie, wenn „Stretch“ aktiviert ist. Es berechnet dann die Höhe des Bands, sodass jedes Objekt genügend Platz hat. Wenn die „Stretch“-Eigenschaft des Bands deaktiviert ist, wird diese Höhenanpassung nicht durchgeführt und das Band wird in der im Design festgelegten Höhe angezeigt. In diesem Fall würden wir sehen, dass die Objekte mit längerem Text weiterhin gedehnt werden, das Band jedoch nicht, was zu Überlagerungen von Text führt, da das folgende Band sofort nach dem vorherigen angezeigt wird.
Seitenumbrüche
Wenn ein Bericht erstellt wird, füllt die FastReport-Engine den weißen Raum der Seite mit den Bändern. Nach der Anzeige jedes Bands verschiebt sich die aktuelle Position nach unten. Wenn FastReport feststellt, dass nicht genügend weißer Raum vorhanden ist, um das nächste Band anzuzeigen (seine Höhe ist größer als der verbleibende weiße Raum auf der Seite), erstellt FastReport eine neue Seite und fährt von dort mit der Anzeige des Bands fort. Diese Sequenz wiederholt sich so oft, wie es Datensätze im Datensatz gibt.
Unser Bericht enthält ein Objekt mit großem Text, weshalb die Bandhöhe ziemlich groß ist. Darüber hinaus wird, wenn ein großes Band nicht genügend Platz auf einer Seite hat, es auf die nächste verschoben, wobei am unteren Rand der Seite viel ungenutzter Platz bleibt, wie hier gezeigt:

Um Papierverschwendung zu begrenzen, nutzen wir eine FastReport-Funktion, die Absätze aus dem Inhalt eines Bands erstellt. Alles, was wir tun müssen, ist, die „AllowSplit“-Eigenschaft des „First level data“-Bands zu aktivieren. Sie werden sehen, dass jetzt weniger weißer Raum am unteren Rand der Berichtseiten vorhanden ist:

Wie funktioniert diese Bandteilung? Es gibt einige Objekte in FastReport, die diese Funktion unterstützen. Sie sind die „Text“, „Line“ und „RichEdit“-Objekte. Sie können „geteilt“ werden, während andere Objekte dies nicht können. Wenn FastReport ein Band teilen muss, geschieht dies auf folgende Weise:
- zeigt die nicht teilbaren Objekte an, die Platz im weißen Raum haben
- zeigt teilweise teilbare Objekte an („Text“-Objekte werden so angezeigt, dass alle Zeilen Platz im Objekt haben)
- erstellt eine neue Seite und fährt mit der Anzeige der Objekte im Band fort
- wenn ein nicht teilbares Objekt keinen Platz im weißen Raum hat, wird es auf die nächste Seite verschoben; gleichzeitig werden alle Objekte, die sich darunter befinden, nach Bedarf verschoben
- der Prozess wird fortgesetzt, bis alle Bandobjekte vollständig angezeigt werden.
Der Teilungsalgorithmus wird klarer, wenn wir uns dieses Beispiel ansehen:

Es sollte beachtet werden, dass der Teilungsalgorithmus nicht perfekt ist und die endgültige Ausgabe möglicherweise nicht ganz wie erwartet ist. Sie sollten diese Option sehr vorsichtig verwenden, wenn Objekte im geteilten Band auf komplizierte Weise gruppiert sind und/oder ihre Schriftgrößen unterschiedlich sind. Hier ist ein Beispiel dafür, was generiert werden könnte:

Shifting Objects
Schauen wir uns die verschiedenen Modi des Verschiebens an. Zu diesem Zweck verwenden wir die „ShiftMode“-Eigenschaft. Schauen wir uns den 'smWhenOverlapped' Verschiebemodus an. In diesem Modus erfolgt die Objektverschiebung, wenn das Objekt darüber sich dehnt und das Objekt darunter überlappt. Hier sind zwei Szenarien:
1: Die drei oberen Objekte haben „Stretch“ aktiviert und die drei unteren Objekte haben „ShiftMode“ auf 'smAlways' gesetzt. Die unteren Objekte verschieben sich nur so weit, dass Platz für das darüber gestreckte Objekt geschaffen wird:

2: Die drei oberen Objekte haben „Stretch“ aktiviert und die drei unteren Objekte haben „ShiftMode“ auf 'smWhenOverlapped' gesetzt. Die unteren Objekte verschieben sich, um Platz für das gestreckte Objekt zu schaffen und auch, um die geplante Trennung der beiden Objekte aufrechtzuerhalten:

Dies ermöglicht die Erstellung komplizierter Berichte, insbesondere wenn ein Objekt mehrere andere Objekte darüber gleichzeitig überlappen könnte. Im folgenden Beispiel enthalten alle oberen Objekte dehnbaren Text und alle unteren befinden sich im 'smWhenOverlapped'-Modus. Die unteren Objekte werden immer in der Nähe des Objekts darüber angezeigt, unabhängig von der Textlänge in den Objekten darüber:
