Version 2003 (Geändert)
SET PRINT MARKER (MarkeNum; Position{; *})
Parameter | Typ | Beschreibung | |
MarkeNum | Numerisch | Nummer der Marke | |
Position | Numerisch | Neue Position der Marke | |
* | * | Mit Angabe = Nachfolgende Marke bewegen | |
Ohne Angabe = Nachfolgende Marke nicht bewegen |
Beschreibung
Mit dem Befehl SET PRINT MARKER definieren Sie die Position der Marke während des Druckvorgangs. In Kombination mit den Befehlen Get print marker und MOVE OBJECT können Sie die Größe des Druckbereichs einstellen.
SET PRINT MARKER lässt sich in zwei Kontexten verwenden:
In den Befehlen PRINT SELECTION und PRINT RECORD während des Formularereignisses On header.
In der Funktion Print form während des Formularereignisses On Printing Detail. Diese Operation erleichtert das Drucken eigener Berichte (siehe Beispiel).
Der Befehl wirkt sich nur auf das Drucken aus. Die Änderungen erscheinen nicht auf dem Bildschirm und werden auch nicht gesichert.
Im Parameter MarkeNum setzen Sie eine Konstante aus dem Thema "Formularbereich" ein:
Konstante | Typ | Wert |
Form Header | Lange Ganzzahl | 200 |
Form Header1...10 | Lange Ganzzahl | 201...210 |
Form Detail | Lange Ganzzahl | 0 |
Form Break0...9 | Lange Ganzzahl | 300...309 |
Form Footer | Lange Ganzzahl | 100 |
Die Position der Marke wird in Pixel angegeben.
Ist der optionale Parameter * übergeben, werden alle Marken, die auf die in MarkeNum angegebene Marke folgen, dieselbe Anzahl Pixel und in dieselbe Richtung bewegt. Achtung: In diesem Fall werden alle darunter liegenden Objekte ebenfalls bewegt.
Mit dem Parameter * können Sie die Position der Marke MarkeNum über die ursprüngliche Position nachfolgender Marken bewegen nachfolgende Marken werden simultan verschoben.
Hinweise:
Dieser Befehl ändert nur die Position einer bereits vorhandenen Marke. Sie können damit keine neue Marke hinzufügen. In diesem Fall hat der Befehl keine Auswirkung.
Die Positionierung der Druckmarke ist begrenzt, d.h. die Marke kann nicht über die davor- bzw. dahinterliegende Marke hinausgehen. (ohne Angabe des Parameters *).
Beispiel
Dieses Beispiel generiert einen dreispaltigen Bericht, die Zeilenhöhe wird je nach Feldinhalt on-the-fly berechnet.
Das Ausgabeformular für den Druck sieht folgendermaßen aus:
Für das Formular wurde das Formularereignis On Printing Detail gewählt.
Zur Erinnerung: Es spielt keine Rolle, welcher Bereich gedruckt wird. Die Funktion Print form generiert nur diese Art von Formularereignis.
Die Zeilenhöhe muss für jeden Datensatz angepasst werden an die Spalten "Actors" oder "Summary". Das Ergebnis sieht folgendermassen aus:
Die Projektmethode für Drucken sieht folgendermaßen aus:
C_LONGINT(vLprint_height;$vLheight;vLprinted_height) C_STRING(31;vSprint_area) PAGE SETUP([Film];"Print_List3") GET PRINTABLE AREA(vLprint_height) vLprinted_height:=0 ALL RECORDS([Film]) vSprint_area:="Header" Kopfbereich drucken $vLheight:=Print form([Film];"Print_List3";Form Header) $vLheight:=21 `Feste Höhe vLprinted_height:=vLprinted_height+$vLheight While(Not(End selection([Film]))) vSprint_area:="Detail" `Detailbereich drucken $vLheight:=Print form([Film];"Print_List3";Form Detail) `Detailberechnung wird in Formularmethode ausgeführt vLprinted_height:=vLprinted_height+$vLheight If(OK=0) `CANCEL wurde in Formularmethode ausgeführt PAGE BREAK vLprinted_height:=0 vSprint_area:="Header" `Kopfbereich erneut drucken $vLheight:=Print form([Film];"Print_List3";Form Header) $vLheight:=21 vLprinted_height:=vLprinted_height+$vLheight vSprint_area:="Detail" $vLheight:=Print form([Film];"Print_List3";Form Detail) vLprinted_height:=vLprinted_height+$vLheight End if NEXT RECORD([Film]) End while PAGE BREAK `Stellt sicher, dass die letzte Seite gedruckt wird
Die Formularmethode Print_List3 lautet:
C_LONGINT($l;$t;$r;$b;$fixed_wdth;$exact_hght;$l1;$t1;$r1;$b1) C_LONGINT($final_pos;$i) C_LONGINT($detail_pos;$header_pos;$hght_to_print;$hght_remaining) Case of : (vSprint_area="Detail") `Printing of detail underway GET OBJECT RECT([Film]Actors;$l;$t;$r;$b) $fixed_wdth:=$r-$l `Calculation of the Actors text field size $exact_hght:=$b-$t BEST OBJECT SIZE([Film]Actors;$wdth;$hght;$fixed_wdth) `Optimale Feldgrösse gemäss dessen Inhalt $movement:=$hght-$exact_hght GET OBJECT RECT([Film]Summary;$l1;$t1;$r1;$b1) $fixed_wdth1:=$r1-$l1 `Berechnet die Grösse des Textfeldes Summary $exact_hght1:=$b1-$t1 BEST OBJECT SIZE([Film]Summary;$wdth1;$hght1;$fixed_wdth1) `Optimale Feldgrösse gemäss dessen Inhalt $movement1:=$hght1-$exact_hght1 If($movement1>$movement) `Wir legen das höchste Feld fest $movement:=$movement1 End if If($movement>0) $position:=Get print marker(Form Detail) $final_pos:=$position+$movement `Wir bewegen die Marke Detail und darauffolgende Marken SET PRINT MARKER(Form Detail ;$final_pos;*) `Resizing of text areas MOVE OBJECT([Film]Actors;$l;$t;$r;$hght+$t;*) MOVE OBJECT([Film]Summary;$l1;$t1;$r1;$hght1+$t1;*) `Trennlinien anpassen GET OBJECT RECT(*;"H1Line";$l;$t;$r;$b) MOVE OBJECT(*;"H1Line";$l;$final_pos-1;$r;$final_pos;*) For ($i;1;4;1) GET OBJECT RECT(*;"VLine"+String($i);$l;$t;$r;$b) MOVE OBJECT(*;"VLine"+String($i);$l;$t;$r;$final_pos;*) End for End if `Verfügbaren Platz berechnen $detail_pos:=Get print marker(Form Detail) $header_pos:=Get print marker(Form Header) $hght_to_print:=$detail_pos-$header_pos $hght_remaining:=printing_height-vLprinted_height If($hght_remaining<$hght_to_print) `Ungenügende Höhe CANCEL `Bewegt Formular zur nächsten Seite End if End case
Referenz
BEST OBJECT SIZE, GET OBJECT RECT, Get print marker, MOVE OBJECT, PAGE BREAK, Print form, PRINT RECORD, PRINT SELECTION.