Zum Hauptinhalt springen

Druckobjekte erstellen

Formular-Designer - Druckobjekte erstellen Erstellen und Ändern von Druckvorlagen

Mit dem Formular-Designer können drei unterschiedliche Formular-Objekte bearbeitet werden:

  • PrintDoc Mit diesem Objekt kann ein Dokument mit umfangreicherem Text erstellt werden. Dieses Objekt sollte bei der Generierung eines Briefes oder ähnlichem verwendet werden.
  • PrintDocRecord Soll eine Liste gedruckt werden bietet sich dieses Objekt an. Es besteht aus einer Tabelle, die entsprechend konfiguriert werden kann.
  • PrintForm Ein umfangreicherer Druckjob kann aus mehreren Textbausteinen (PrintForm-Objekten) zusammengesetzt werden.

Erstellen eines Dokumentes (PrintDoc)

Das PrintDoc -Objekt wird über den Menüpunkt Datei / Neu / PrintDoc angelegt. In dieses Objekt können nur Seiten-Objekte eingefügt werden.

Innerhalb eines Seiten-Objektes können weitere Objekte definiert werden. Mit den Objekten PrtPageHeader und PrtPageFooter können entsprechende Bereiche für eine Kopf- und eine Fußzeile reserviert werden. In diesen Objekten und in der Seite selbst können weitere Objekte zur Darstellung von Text, Bildern usw. (siehe Druck-Objekte ) angelegt und frei auf der Seite platziert werden.

Ein so zusammengestelltes Formular kann in der Datenbank über den Menüpunkt Datei / Speichern oder Datei / Speichern unter gespeichert werden.

Dieses Objekt kann mit dem Befehl PrtJobOpen() geladen und anschließend die Eigenschaften aller Objekte des Druck-Jobs verändert werden. Die gespeicherte Vorlage kann so angepasst und mit den Befehlen PrtJobWrite() und PrtJobClose() geschrieben bzw. ausgedruckt werden.

Beispiel:

// Druckjob öffnen
tPrtJob # PrtJobOpen('Letter', '', _PrtJobOpenWrite, _PrtTypePrintDoc);

// Druckjob schreiben
tPrtJob->PrtJobWrite(_PrtJobDoc);

// Druckjob abschließen und in der Vorschau anzeigen
tErr # tPrtJob->PrtJobClose(_PrtJobPreview);

Sollen Änderungen innerhalb des Dokumentes vorgenommen werden, müssen diese Änderungen vor den Schreiben des Dokumentes mit PrtJobWrite () erfolgen.

Der Suchpfad für die Objekte wird beim Laden des Druckobjektes nicht umgesetzt. Soll also über die Namen der Objekte innerhalb des Objekts Letter referenziert werden, muss der Suchpfad mit dem Befehl WinSearchPath () auf den Druckjob gesetzt werden. Anschließend wird zum Beispiel das für die Empfängeradresse vorgesehene PrtText -Objekt verändert:

tPrtJob->WinSearchPath(); 
$ptReceiver->ppCaption # 'Firma vectorsoft AG' + StrChar(13) + StrChar(10) +
'Seligenstädter Grund 2' + StrChar(13) + StrChar(10) +
StrChar(13) + StrChar(10) +
'63150 Heusenstamm';
...
WinSearchClear();

Zum Schluss wird der Suchpfad wieder gelöscht.

Erstellen einer Liste (PrintDocRecord)

Beim Anlegen eines PrintDocRecord -Objekts wird ein Dialog aufgerufen, in dem verschiedene Einstellungen der Liste vorgenommen werden können.

Über diesen Dialog können die einzelnen Bereiche der Liste konfiguriert werden:

  • Tabellenkopf Der Tabellenkopf wird zu Beginn der Tabelle gedruckt.
  • Seitenkopf Der Seitenkopf wird zu Beginn jeder Seite gedruckt. Sollten Tabellenkopf und Seitenkopf auf einer Seite gedruckt werden, wird der Tabellenkopf vor dem Seitenkopf gedruckt.
  • Datenkopf Nach dem Seitenkopf wird der Datenkopf gedruckt. Hier können Spaltenüberschriften hinterlegt werden. Der Datenkopf wird vor jedem Datenbereich gedruckt.
  • Tabellenfuß Der Tabellenfuß wird am Ende der Tabelle gedruckt. Der Ausdruck erfolgt nach dem Seitenfuß der letzten Seite.
  • Seitenfuß Der Seitenfuß wird am Ende jeder Seite gedruckt.
  • Datenfuß Der Datenfuß wird nach jedem Datenbereich gedruckt. Der Ausdruck erfolgt vor dem Seitenfuß.
  • Datenbereich Der Datenbereich wird für jeden Datensatz der Tabelle gedruckt.

Folgende Einstellungen können vorgenommen werden:

  • Mit diesen Einstellungen automatisch erstellen Ist diese Checkbox aktiviert, werden die Einstellungen zu diesem Element nicht mehr abgefragt.
  • Mit Tabelle erstellen Das auf der linken Seite ausgewählte Objekt wird mit der Tabelle erzeugt. Soll zum Beispiel eine Tabelle ohne Seitenkopf erstellt werden, kann das Element über diese Checkbox deaktiviert werden.
  • Spalten Das ausgewählte Objekt wird mit der angegebenen Anzahl von Spalten generiert. Die Anzahl der Spalten ist von der Anzahl der Spalten in den anderen Bereichen unabhängig.
  • Zeilen Das ausgewählte Objekt wird mit der angegebenen Anzahl von Zeilen generiert.
  • Zellbreite Jede Zelle des ausgewählten Objektes wird mit der hier angegebenen Breite angelegt. Dies kann auch dazu führen, dass Zeilen breiter als die Seite angelegt werden. Wird hier nichts angegeben, werden die Zellen in einer Breite angelegt, die die Seitenbreite ausnutzt.
  • Zellhöhe Hier kann die Höhe einer Zelle in dem ausgewählten Bereich angegeben werden.
  • Zellhöhe-Modus Die Höhe der Zelle kann entweder automatisch erfolgen oder konstant angegeben werden. Wird die Zellhöhe automatisch bestimmt, ist sie abhängig von der Höhe des enthaltenen Objekts.

Nach Bestätigen der Einstellungen mit [OK] wird die Tabelle erzeugt. Alle Elemente können auch zu einem späteren Zeitpunkt in die Tabelle integriert werden. Im Fenster "Palette" stehen diese Objekte auf der Seite "Tabelle" zur Verfügung.

Die angegebene Anzahl von Spalten werden gleichmäßig über die gesamte Seitenbreite angeordnet. Die Breite der Spalten kann entweder mit der Maus oder über die Eigenschaft Width verändert werden. Wird beim Ändern der Breite einer Spalte mit der Maus die Umschalt -Taste gedrückt, werden alle übereinander liegenden Spalten mit verändert.

Bestehende Spalten oder Zeilen können über das Kontextmenü kopiert werden. Wird der Mauszeiger direkt vor eine Zeile positioniert, verändert er sich zu einem schwarzen Pfeil. Durch Drücken der linken Maustaste wird dann die gesamte Zeile markiert. Zur Unterscheidung, ob ein ganzer Bereich (zum Beispiel Data-Bereich oder HD-Bereich) oder eine Zeile markiert ist, erfolgt die Bereichsmarkierung in grau und die Zeilenmarkierung in blau.

Ebenso wie Zeilen können auch Spalten markiert werden. Dabei ist zu beachten, dass immer nur Spalten eines Bereiches markiert werden können. Der Mauszeiger verändert sich zu einem Pfeil nach unten, wenn er über einer Spalte positioniert wird.

Ist ein PrtTblCell -Objekt selektiert, kann über das Kontextmenü die Markierung auf die gesamte Zeile bzw. auf die gesamte Spalte ausgedehnt werden.

Das Kopieren des markierten Bereiches erfolgt über die Einträge "Zeilen duplizieren" bzw. "Spalten duplizieren". Alle in den Zellen enthaltenen Objekte werden ebenfalls kopiert.

Ist eine Spalte oder eine Zelle markiert, kann diese mit "Spalten teilen" aus den Kontextmenü in der Mitte geteilt werden.

Soll das gleiche Objekt in mehrere Zellen eingefügt werden, können die entsprechenden Zellen markiert und anschließend das Objekt aus der Palette eingefügt werden. In jeder Zelle wird das entsprechende Objekt erzeugt.

Die vorgenommenen Einstellungen werden in den Einstellungen des Designers gespeichert. Beim Erstellen der nächsten Tabelle werden die entsprechenden Einstellungen übernommen.

Um in den erzeugten Zellen Texte oder Bilder ausgeben zu können, müssen entsprechende Objekte in den Zellen erzeugt werden. Diese Objekte stehen im Fenster "Palette" auf der Seite "Druck" zur Verfügung. Werden die Objekte über die "Palette" eingefügt, muss eine Verbindung zur Datenstruktur über die Eigenschaft DbFieldName hergestellt werden. Die Verbindung wird automatisch hergestellt, wenn aus der Datenstruktur die entsprechenden Felder in die Zellen gezogen werden.

Das PrintDocRecord -Objekt liest alle Datensätze einer Datei oder einer Verknüpfung, wenn die Eigenschaften DbFileNo, DbKeyNo und DbLinkFileNo entsprechend gesetzt sind.

Eine Liste aller Datensätze kann dann mit folgenden Befehlen ausgegeben werden:

// Druckjob öffnen
tPrtJob # PrtJobOpen('Tabelle', '', _PrtJobOpenWrite, _PrtTypePrintDocRecord);

// Druckjob schreiben
tPrtJob->PrtJobWrite(_PrtJobDoc);

// Druckjob abschließen und in der Vorschau anzeigen
tErr # tPrtJob->PrtJobClose(_PrtJobPreview);

Zur Aufbereitung von komplexeren Listen, zum Beispiel die Ausgabe aller Datensätze einer Datei und den dazugehörenden verknüpften Datensätzen, ist das PrintForm -Objekt besser geeignet.

Erstellen von Textbausteinen (PrintForm)

Soll ein Dokument aus vielen unterschiedlichen Bestandteilen zusammengesetzt werden, kommen Textbausteine zum Einsatz. Mit Hilfe dieser Textbausteine können, wie mit dem Objekt PrintDocRecord Listen oder andere Formulare zusammengestellt werden.

Zunächst werden ein oder mehrere PrintForm -Objekte erstellt. Jedes dieser Objekte kann Texte, Bilder usw. enthalten. Die Höhe des PrintDoc -Objekts wird mit einem blauen Rahmen angezeigt. Werden Objekte aus dem PrintDoc-Objekt entfernt, verkleinert sich nicht automatisch die Höhe des Objekts. Dies kann über das Kontextmenü mit dem Eintrag Formgröße reduzieren oder über Einträge in den Eigenschaften FormHeight und FormWidth erfolgen. Die einzelnen PrintForm -Objekte werden prozedural zu einem ganzen Druckjob zusammengestellt.

Um einen solchen Druckjob zusammenzustellen, wird mit dem Befehl PrtJobOpen () ein Druckjob geöffnet. Anschließend wird mit PrtFormOpen () die PrintForm geladen. Diese kann jetzt mit dem Befehl PrtAdd () mehrfach zu dem Druckjob hinzugefügt werden.

Abschließend wird die PrintForm mit PrtFormClose () entladen und der Druckjob mit PrtJobClose () beendet.

Beispiel:

// Druckjob und Textbaustein öffnen
tJob # PrtJobOpen(_PrtDocDinA4, '', _PrtJobOpenWrite, _PrtTypePrintDoc);
tForm # PrtFormOpen(_PrtTypePrintForm, 'Beispiel_Form');

// Erste Seite schreiben
tPage # tJob->PrtJobWrite(_PrtJobPageStart);

// Schleife über alle Datensätze
tErg # RecRead(ART.D.Artikel, ART.S.Nummer, _RecFirst);
while (tErg < _rNoKey)
{
// Textbaustein einfügen
tPage->PrtAdd(tForm, _PrtAddPageBreak);
tErg # RecRead(ART.D.Artikel, ART.S.Nummer, _RecNext);
}

// letzte Seite schreiben
tJob->PrtJobWrite(_PrtJobPageEnd);

// Textbaustein und Druckjob schließen, Vorschau anzeigen
tForm->PrtFormClose();
tErr # tJob->PrtJobClose(_PrtJobPreview);

Auf diese Weise kann ein Druckjob aus ein oder mehreren PrintForm -Objekten zusammengesetzt werden. Der Seitenumbruch findet in diesem Beispiel erst statt, wenn eine PrintForm nicht mehr auf eine Seite gedruckt werden kann. Soll am Ende einer Seite ein Seitenfuß gedruckt werden, muss über die Eigenschaften BoundAdd und BoundMax der von PrtJobWrite ( _PrtJobPageStart ) zurückgegebenen Druckseite der noch auf der Seite zur Verfügung stehende Platz mit der Höhe (Eigenschaft FormHeight) der PrintForm und des Seitenfußes verglichen werden. Reicht der Platz nicht mehr aus, muss der Seitenfuß gedruckt und mit dem Befehl PrtJobWrite ( _PrtJobPageBreak ) ein Seitenumbruch eingefügt werden. Vor dem Abschluss der Druckaufbereitung muss die aktuelle Seite mit dem Befehl PrtJobWrite ( _PrtJobPageEnd ) abgeschlossen werden. Ein ausfürlicheres Beispiel zur Programmierung befindet sich hier .