SET PRINT MARKER

4D - Documentation   Français   English   German   Spanish   Japanese   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next

Version 2003 (Geändert)


SET PRINT MARKER (MarkeNum; Platzierung{; *})

ParameterTypBeschreibung
MarkeNumNumerischNummer der Marke
PlatzierungNumerischNeue 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:

KonstanteTypWert
Form HeaderLange Ganzzahl200
Form Header1...10Lange Ganzzahl201...210
Form DetailLange Ganzzahl0
Form Break0...9Lange Ganzzahl300...309
Form FooterLange Ganzzahl100

In Platzierung 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 *).

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 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
         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.


4D - Documentation   Français   English   German   Spanish   Japanese   4D Programmiersprache, Befehle nach Themen   4D Programmiersprache, Befehle alphabetisch   4D Programmiersprache, Konstanten nach Themen   Back   Previous   Next