4D v15.4SET PRINT MARKER |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v15.4
SET PRINT MARKER
|
SET PRINT MARKER ( numTaquet ; position {; *} ) | ||||||||
Paramètre | Type | Description | ||||||
numTaquet | Entier long |
![]() |
Numéro de taquet | |||||
position | Entier long |
![]() |
Nouvelle position du taquet | |||||
* | Opérateur |
![]() |
Si passé = déplacer les marqueurs suivants Si omis = ne pas déplacer les marqueurs suivants | |||||
La commande SET PRINT MARKER permet de définir la position d’un taquet au moment de l’impression. Combinée aux commandes Get print marker, OBJECT MOVE ou Print form, cette commande permet d’ajuster la taille des zones d’impression.
SET PRINT MARKER peut être appelée dans deux contextes :
L’effet de la commande est limité à l’impression, aucune modification n’apparaît à l’écran. Les modifications apportées aux formulaires ne sont pas sauvegardées.
Passez dans le paramètre numTaquet une des constantes du thème “Zone de formulaire” :
Constante | Type | Valeur |
Corps formulaire | Entier long | 0 |
Entête formulaire | Entier long | 200 |
Entête formulaire1 | Entier long | 201 |
Entête formulaire10 | Entier long | 210 |
Entête formulaire2 | Entier long | 202 |
Entête formulaire3 | Entier long | 203 |
Entête formulaire4 | Entier long | 204 |
Entête formulaire5 | Entier long | 205 |
Entête formulaire6 | Entier long | 206 |
Entête formulaire7 | Entier long | 207 |
Entête formulaire8 | Entier long | 208 |
Entête formulaire9 | Entier long | 209 |
Pied de page formulaire | Entier long | 100 |
Rupture formulaire0 | Entier long | 300 |
Rupture formulaire1 | Entier long | 301 |
Rupture formulaire2 | Entier long | 302 |
Rupture formulaire3 | Entier long | 303 |
Rupture formulaire4 | Entier long | 304 |
Rupture formulaire5 | Entier long | 305 |
Rupture formulaire6 | Entier long | 306 |
Rupture formulaire7 | Entier long | 307 |
Rupture formulaire8 | Entier long | 308 |
Rupture formulaire9 | Entier long | 309 |
Passez dans position la nouvelle position souhaitée du taquet, exprimée en pixels.
Si vous passez le paramètre optionnel *, tous les marqueurs situés au-dessous du marqueur désigné par numTaquet seront déplacés du même nombre de pixels et dans la même direction que lui lors de l’exécution de la commande. Attention : dans ce cas, les objets éventuellement présents dans les zones situées au-dessous du marqueur sont également déplacés.
Lorsque le paramètre * est utilisé, il est donc possible de positionner le marqueur numTaquet au-delà de la position initiale des marqueurs qui le suivent — ces derniers étant déplacés simultanément.
Notes :
Cet exemple complet permet de générer l’impression d’un état sur trois colonnes, la hauteur de chaque ligne étant calculée à la volée en fonction du contenu des champs.
Le formulaire de sortie utilisé pour l’impression est le suivant :
L’événement formulaire On Printing Detail a été sélectionné pour le formulaire (rappelons que la commande Print form ne génère que cet événement, quelle que soit la zone imprimée).
Pour chaque enregistrement, la hauteur de la ligne doit être adaptée en fonction du contenu de la colonne “Acteurs” ou “Résumé” (colonne ayant le plus de contenu). Voici le résultat souhaité :
La méthode projet d’impression est la suivante :
C_LONGINT(vLhauteur_imp;$vLhauteur;vLhauteur_imprimee)
C_TEXT(vSimpr_zone)
PAGE SETUP([MOVIES];"Print_List3")
GET PRINTABLE AREA(vLhauteur_imp)
vLhauteur_imprimee:=0
ALL RECORDS([Film])
vSimpr_zone:="Entete" `Impression de la zone d’en-tête
$vLhauteur:=Print form([MOVIES];"Print_List3";Form header)
$vLhauteur:=17 `Hauteur fixe
vLhauteur_imprimee:=vLhauteur_imprimee+$vLhauteur
While(Not(End selection([Film])))
vSimpr_zone:="Corps" `Impression de la zone de corps
$vLhauteur:=Print form([MOVIES];"Print_List3";Form detail)
`Le calcul du corps est effectué dans la méthode formulaire
vLhauteur_imprimee:=vLhauteur_imprimee+$vLhauteur
If(OK=0) `NE PAS VALIDER a été exécutée dans la méthode formulaire
PAGE BREAK
vLhauteur_imprimee:=0
vSimpr_zone:="Entete" `Réimpression de la zone d’en-tête
$vLhauteur:=Print form([MOVIES];"Print_List3";Form header)
$vLhauteur:=17
vLhauteur_imprimee:=vLhauteur_imprimee+$vLhauteur
vSimpr_zone:="Corps"
$vLhauteur:=Print form([MOVIES];"Print_List3";Form detail)
vLhauteur_imprimee:=vLhauteur_imprimee+$vLhauteur
End if
NEXT RECORD([MOVIES])
End while
PAGE BREAK `Assurons-nous que la dernière page est imprimée
La méthode du formulaire Print_List3 est la suivante :
C_LONGINT($g;$h;$d;$b;$larg_fix;$haut_préc;$g1;$h1;$d1;$b1)
C_LONGINT($pos_finale;$i)
C_LONGINT($position_c;$position_e;$hauteur_a_imprimer;$hauteur_restante)
Case of
:(vSimpr_zone="Corps") //Impression du corps en cours
//Calcul de la liste des acteurs
RELATE MANY([MOVIES]ID)
RELATE ONE SELECTION([MOVIE_ACTOR];[ACTORS])
vAct:=""
$n:=Records in selection([ACTORS])
For($i;1;$n)
GOTO SELECTED RECORD([ACTORS];$i)
vAct:=vAct+[ACTORS]FirstName+" "+[ACTORS]LastName+", "
End for
vAct:=Substring(vAct;1;Length(vAct)-2)
OBJECT GET COORDINATES(*;"vAct";$g;$h;$d;$b)
$larg_fix:=$d-$g `Calcul de la taille de la variable vAct
$haut_préc:=$b-$h
OBJECT GET BEST SIZE([*;"vAct";$larg;$haut;$larg_fix)
`Taille optimale de la zone en fonction du contenu
$deplacement:=$haut-$haut_préc
OBJECT GET COORDINATES([MOVIES]Résumé;$g1;$h1;$d1;$b1)
$larg_fix1:=$d1-$g1 `Calcul de la taille du champ texte Résumé
$haut_préc1:=$b1-$h1
OBJECT GET BEST SIZE([MOVIES]Résumé;$larg1;$haut1;$larg_fix1)
`Taille optimale du champ en fonction du contenu
$deplacement1:=$haut1-$haut_préc1
If($deplacement1>$deplacement)
`On détermine le champ le plus haut
$deplacement:=$deplacement1
End if
If($deplacement>0)
$position:=Get print marker(Form detail)
$pos_finale:=$position+$deplacement
`On déplace le taquet Corps et ceux qui le suivent
SET PRINT MARKER(Form detail;$pos_finale;*)
`Redimensionnement des zones de texte
OBJECT MOVE(*;"vAct";$g;$h;$d;$haut+$h;*)
OBJECT MOVE([MOVIES]Résumé;$g1;$h1;$d1;$haut1+$h1;*)
`Redimensionnement des lignes de séparation
OBJECT GET COORDINATES(*;"LigneH1";$g;$h;$d;$b)
OBJECT MOVE(*;"LigneH1";$g;$pos_finale-1;$d;$pos_finale;*)
For($i;1;4;1)
OBJECT GET COORDINATES(*;"LigneV"+String($i);$g;$h;$d;$b)
OBJECT MOVE(*;"LigneV"+String($i);$g;$h;$d;$pos_finale;*)
End for
End if
`Calcul de la place disponible
$position_c:=Get print marker(Form detail)
$position_e:=Get print marker(Form header)
$hauteur_a_imprimer:=$position_c-$position_e
$hauteur_restante:=vLhauteur_imp-vLhauteur_imprimee
If($hauteur_restante<$hauteur_a_imprimer) `Hauteur insuffisante
CANCEL `Passer la ligne sur la page suivante
End if
End case
Get print marker
OBJECT GET BEST SIZE
OBJECT GET COORDINATES
OBJECT MOVE
PAGE BREAK
Print form
PRINT RECORD
PRINT SELECTION
Produit : 4D
Thème : Impressions
Numéro :
709
Modifié : 4D 2003
4D - Langage ( 4D v15.4)
4D - Langage ( 4D v15.3)