4D v13.4SET PRINT MARKER |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v13.4
SET PRINT MARKER
|
SET PRINT MARKER ( MarkeNum ; MarkePos {; *} ) | ||||||||
Parameter | Typ | Beschreibung | ||||||
MarkeNum | Lange Ganzzahl |
![]() |
Nummer der Marke | |||||
MarkePos | Lange Ganzzahl |
![]() |
Neue Position der Marke | |||||
* | Operator |
![]() |
Mit Angabe = Nachfolgende Marke bewegen Ohne Angabe = Nachfolgende Marke nicht bewegen |
|||||
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:
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:
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"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
OBJECT GET COORDINATES([Film]Actors;$l;$t;$r;$b)
$fixed_wdth:=$r-$l `Berechnet die Größe des Textfeldes Actors
$exact_hght:=$b-$t
OBJECT GET BEST SIZE([Film]Actors;$wdth;$hght;$fixed_wdth)
`Optimale Feldgröße gemäß dessen Inhalt
$movement:=$hght-$exact_hght
OBJECT GET COORDINATES([Film]Summary;$l1;$t1;$r1;$b1)
$fixed_wdth1:=$r1-$l1 `Berechnet die Größe des Textfeldes Summary
$exact_hght1:=$b1-$t1
OBJECT GET BEST SIZE([Film]Summary;$wdth1;$hght1;$fixed_wdth1)
`Optimale Feldgröße gemäß 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;*)
`Textbereiche anpassen
OBJECT MOVE([Film]Actors;$l;$t;$r;$hght+$t;*)
OBJECTMOVE([Film]Summary;$l1;$t1;$r1;$hght1+$t1;*)
`Trennlinien anpassen
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
`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
Produkt: 4D
Thema: Drucken
Nummer:
709
Alphabetische Liste der Befehle
Geändert: 4D 2003
Get print marker
OBJECT GET BEST SIZE
OBJECT GET COORDINATES
OBJECT MOVE
PAGE BREAK
Print form
PRINT RECORD
PRINT SELECTION