| 4D v20.1SET PRINT MARKER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
 | 
    4D v20.1
 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 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 wirdDie 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
									Get print marker
									
									OBJECT GET BEST  SIZE
									
									OBJECT GET COORDINATES 
									
									OBJECT MOVE
									
									PAGE BREAK
									
									Print form
									
									PRINT RECORD
									
									PRINT SELECTION
									
	Produkt: 4D
	Thema: Drucken
	Nummer: 
        709
        
        
        
	
	Geändert: 4D 2003
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	4D Programmiersprache ( 4D v20)
	
	
	4D Programmiersprache ( 4D v20.1)
	
	
	
 Fehler melden
Fehler melden