4D v16.3

SET PRINT MARKER

Home

 
4D v16.3
SET PRINT MARKER

SET PRINT MARKER 


 

SET PRINT MARKER ( MarkeNum ; MarkePos {; *} ) 
Parameter Typ   Beschreibung
MarkeNum  Lange Ganzzahl in Nummer der Marke
MarkePos  Lange Ganzzahl in Neue Position der Marke
Operator in 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:

  • 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" //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 der Formularmethode ausgeführt
    vLprinted_height:=vLprinted_height+$vLheight
    If(OK=0) `CANCEL wurde in der 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 `Sicherstellen, 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") `Detailbereich wird gedruckt
       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)
  `Größe des Feldes wird passend zum Inhalt optimiert
       $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)
  `Größe des Feldes wird passend zum Inhalt optimiert
       $movement1:=$hght1-$exact_hght1
       If($movement1>$movement)
  `Das höchste Feld festlegen
          $movement:=$movement1
       End if
 
       If($movement>0)
          $position:=Get print marker(Form detail)
          $final_pos:=$position+$movement
  `Die Marke Detail und nachfolgende Marken bewegen
          SET PRINT MARKER(Form detail;$final_pos;*)
  `Textbereiche anpassen
          OBJECT MOVE([Film]Actors;$l;$t;$r;$hght+$t;*)
          OBJECT MOVE([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`Höhe ist zu gering
          CANCEL `Formular auf die nächste Seite setzen
       End if
 End case



Siehe auch 

Get print marker
OBJECT GET BEST SIZE
OBJECT GET COORDINATES
OBJECT MOVE
PAGE BREAK
Print form
PRINT RECORD
PRINT SELECTION

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Drucken
Nummer: 709

 
GESCHICHTE 

Geändert: 4D 2003

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)