Der Befehl SET PRINT MARKER definiert die Position der Marke während des Druckvorgangs. In Kombination mit den Befehlen Get print marker und OBJECT MOVE 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.
Die Auswirkung des Befehls beschränkt sich auf das Drucken; auf dem Bildschirm erscheint keine Änderung. In Formularen gemachte Änderungen werden nicht gesichert.
Im Parameter MarkeNum setzen Sie eine Konstante aus dem Thema Formularbereich ein:
Konstante |
Typ |
Wert |
Form break0 |
Lange Ganzzahl |
300 |
Form break1 |
Lange Ganzzahl |
301 |
Form break2 |
Lange Ganzzahl |
302 |
Form break3 |
Lange Ganzzahl |
303 |
Form break4 |
Lange Ganzzahl |
304 |
Form break5 |
Lange Ganzzahl |
305 |
Form break6 |
Lange Ganzzahl |
306 |
Form break7 |
Lange Ganzzahl |
307 |
Form break8 |
Lange Ganzzahl |
308 |
Form break9 |
Lange Ganzzahl |
309 |
Form detail |
Lange Ganzzahl |
0 |
Form footer |
Lange Ganzzahl |
100 |
Form header |
Lange Ganzzahl |
200 |
Form header1 |
Lange Ganzzahl |
201 |
Form header10 |
Lange Ganzzahl |
210 |
Form header2 |
Lange Ganzzahl |
202 |
Form header3 |
Lange Ganzzahl |
203 |
Form header4 |
Lange Ganzzahl |
204 |
Form header5 |
Lange Ganzzahl |
205 |
Form header6 |
Lange Ganzzahl |
206 |
Form header7 |
Lange Ganzzahl |
207 |
Form header8 |
Lange Ganzzahl |
208 |
Form header9 |
Lange Ganzzahl |
209 |
In MarkePos geben Sie die gewünschte neue Position der Marke in Pixel an.
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. Verweisen Sie auf eine Marke, die im Formular nicht existiert, führt der Befehl nichts aus.
- Die Funktionsweise der Druckmarken im Designmodus wird beibehalten, d.h. die Marke kann nicht höher als die davorliegende, oder tiefer als die darauffolgende Marke liegen (ohne Angabe des Parameters *).
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 folgendermaßen 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"
$vLheight:=Print form([Film];"Print_List3";Form header)
$vLheight:=21
vLprinted_height:=vLprinted_height+$vLheight
While(Not(End selection([Film])))
vSprint_area:="Detail"
$vLheight:=Print form([Film];"Print_List3";Form detail)
vLprinted_height:=vLprinted_height+$vLheight
If(OK=0)
PAGE BREAK
vLprinted_height:=0
vSprint_area:="Header"
$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
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")
OBJECT GET COORDINATES([Film]Actors;$l;$t;$r;$b)
$fixed_wdth:=$r-$l
$exact_hght:=$b-$t
OBJECT GET BEST SIZE([Film]Actors;$wdth;$hght;$fixed_wdth)
$movement:=$hght-$exact_hght
OBJECT GET COORDINATES([Film]Summary;$l1;$t1;$r1;$b1)
$fixed_wdth1:=$r1-$l1
$exact_hght1:=$b1-$t1
OBJECT GET BEST SIZE([Film]Summary;$wdth1;$hght1;$fixed_wdth1)
$movement1:=$hght1-$exact_hght1
If($movement1>$movement)
$movement:=$movement1
End if
If($movement>0)
$position:=Get print marker(Form detail)
$final_pos:=$position+$movement
SET PRINT MARKER(Form detail;$final_pos;*)
OBJECT MOVE([Film]Actors;$l;$t;$r;$hght+$t;*)
OBJECT MOVE([Film]Summary;$l1;$t1;$r1;$hght1+$t1;*)
OBJECT GET COORDINATES(*;"H1Line";$l;$t;$r;$b)
OBJECT MOVE(*;"H1Line";$l;$final_pos-1;$r;$final_pos;*)
For($i;1;4;1)
OBJECT GET COORDINATES(*;"VLine"+String($i);$l;$t;$r;$b)
OBJECT MOVE(*;"VLine"+String($i);$l;$t;$r;$final_pos;*)
End for
End if
$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)
CANCEL
End if
End case