version 2003 (Modifiée)
FIXER TAQUET IMPRESSION (numTaquet; position{; *})
Paramètre | Type | Description | |
numTaquet | Numérique | Numéro de taquet | |
position | Numérique | Nouvelle position du taquet | |
* | * | Si passé = déplacer les marqueurs suivants | |
Si omis = ne pas déplacer les marqueurs suivants |
Description
La commande FIXER TAQUET IMPRESSION permet de définir la position d'un taquet au moment de l'impression. Combinée aux commandes Lire taquet impression, DEPLACER OBJET ou Imprimer ligne, cette commande permet d'ajuster la taille des zones d'impression.
FIXER TAQUET IMPRESSION peut être appelée dans deux contextes :
lors de l'événement formulaire Sur entête, dans le cadre de l'utilisation des commandes IMPRIMER SELECTION et IMPRIMER ENREGISTREMENT.
lors de l'événement formulaire Sur impression corps, dans le cadre de l'utilisation de la commande Imprimer ligne. Ce fonctionnement facilite l'impression d'états personnalisés (voir exemple).
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 |
Entête formulaire | Entier long | 200 |
Entête formulaire1...10 | Entier long | 201...210 |
Corps formulaire | Entier long | 0 |
Rupture formulaire0...9 | Entier long | 300...309 |
Pied de page formulaire | Entier long | 100 |
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 :
Cette commande modifie la position des taquets existants uniquement. Elle ne permet pas d'ajouter des taquets. Si vous désignez un taquet qui n'existe pas dans le formulaire, la commande ne fait rien.
Le fonctionnement des taquets d'impression en mode Développement est conservé : un taquet ne peut pas aller plus haut que celui qui le précède ni plus bas que celui qui le suit (lorsque le paramètre * n'est pas utilisé).
Exemple
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 Sur impression corps a été sélectionné pour le formulaire (rappelons que la commande Imprimer ligne 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_ENTIER LONG(vLhauteur_imp;$vLhauteur;vLhauteur_imprimee) C_ALPHA(31;vSimpr_zone) UTILISER PARAMETRES IMPRESSION([Film];"Print_List3") LIRE ZONE IMPRESSION(vLhauteur_imp) vLhauteur_imprimee:=0 TOUT SELECTIONNER([Film]) vSimpr_zone:="Entete" `Impression de la zone d'en-tête $vLhauteur:=Imprimer ligne([Film];"Print_List3";Entête formulaire ) $vLhauteur:=21 `Hauteur fixe vLhauteur_imprimee:=vLhauteur_imprimee+$vLhauteur Tant que (Non(Fin de selection([Film]))) vSimpr_zone:="Corps" `Impression de la zone de corps $vLhauteur:=Imprimer ligne([Film];"Print_List3";Corps formulaire ) `Le calcul du corps est effectué dans la méthode formulaire vLhauteur_imprimee:=vLhauteur_imprimee+$vLhauteur Si (OK=0) `NE PAS VALIDER a été exécutée dans la méthode formulaire SAUT DE PAGE vLhauteur_imprimee:=0 vSimpr_zone:="Entete" `Réimpression de la zone d'en-tête $vLhauteur:=Imprimer ligne([Film];"Print_List3";Entête formulaire ) $vLhauteur:=21 vLhauteur_imprimee:=vLhauteur_imprimee+$vLhauteur vSimpr_zone:="Corps" $vLhauteur:=Imprimer ligne([Film];"Print_List3";Corps formulaire ) vLhauteur_imprimee:=vLhauteur_imprimee+$vLhauteur Fin de si ENREGISTREMENT SUIVANT([Film]) Fin tant que SAUT DE PAGE `Assurons-nous que la dernière page est imprimée
La méthode du formulaire Print_List3 est la suivante :
C_ENTIER LONG($g;$h;$d;$b;$larg_fix;$haut_préc;$g1;$h1;$d1;$b1) C_ENTIER LONG($pos_finale;$i) C_ENTIER LONG($position_c;$position_e;$hauteur_a_imprimer;$hauteur_restante) Au cas ou : (vSimpr_zone="Corps") `Impression du corps en cours LIRE RECT OBJET([Film]Acteurs;$g;$h;$d;$b) $larg_fix:=$d-$g `Calcul de la taille du champ texte Acteurs $haut_préc:=$b-$h TAILLE OBJET OPTIMALE([Film]Acteurs;$larg;$haut;$larg_fix) `Taille optimale du champ en fonction du contenu $deplacement:=$haut-$haut_préc LIRE RECT OBJET([Film]Résumé;$g1;$h1;$d1;$b1) $larg_fix1:=$d1-$g1 `Calcul de la taille du champ texte Résumé $haut_préc1:=$b1-$h1 TAILLE OBJET OPTIMALE([Film]Résumé;$larg1;$haut1;$larg_fix1) `Taille optimale du champ en fonction du contenu $deplacement1:=$haut1-$haut_préc1 Si ($deplacement1>$deplacement) `On détermine le champ le plus haut $deplacement:=$deplacement1 Fin de si Si ($deplacement>0) $position:=Lire taquet impression(Corps formulaire ) $pos_finale:=$position+$deplacement `On déplace le taquet Corps et ceux qui le suivent FIXER TAQUET IMPRESSION(Corps formulaire ;$pos_finale;*) `Redimensionnement des zones de texte DEPLACER OBJET([Film]Acteurs;$g;$h;$d;$haut+$h;*) DEPLACER OBJET([Film]Résumé;$g1;$h1;$d1;$haut1+$h1;*) `Redimensionnement des lignes de séparation LIRE RECT OBJET(*;"LigneH1";$g;$h;$d;$b) DEPLACER OBJET(*;"LigneH1";$g;$pos_finale-1;$d;$pos_finale;*) Boucle ($i;1;4;1) LIRE RECT OBJET(*;"LigneV"+Chaine($i);$g;$h;$d;$b) DEPLACER OBJET(*;"LigneV"+Chaine($i);$g;$h;$d;$pos_finale;*) Fin de boucle Fin de si `Calcul de la place disponible $position_c:=Lire taquet impression(Corps formulaire ) $position_e:=Lire taquet impression(Entête formulaire ) $hauteur_a_imprimer:=$position_c-$position_e $hauteur_restante:=hauteur_impression-vLhauteur_imprimee Si ($hauteur_restante<$hauteur_a_imprimer) `Hauteur insuffisante NE PAS VALIDER `Passer la ligne sur la page suivante Fin de si Fin de cas
Référence
DEPLACER OBJET, IMPRIMER ENREGISTREMENT, Imprimer ligne, IMPRIMER SELECTION, LIRE RECT OBJET, Lire taquet impression, SAUT DE PAGE, TAILLE OBJET OPTIMALE.