// Traçage de traits verticaux séparés de deux millimètres
// sur toute la largeur de la page
iTraitV(0, iHauteurPage(), 1) // Trace un trait
iPosX(iPosX() + 2) // Décale de 2
iTraitV(0, iHauteurPage(), 3) // Trace un trait
iFinImprime()
Syntaxe
Connaître la position horizontale du curseur d'impression Masquer les détails
<Résultat> = iPosX()
<Résultat> : Réel
Position horizontale actuelle du curseur (en millimètres).
Modifier la position horizontale du curseur d'impression Masquer les détails
<Résultat> = iPosX(<Position horizontale> [, <Calcul immédiat>])
<Résultat> : Chaîne de caractères
Position horizontale demandée.
<Position horizontale> : Réel
Nouvelle position horizontale (abscisse ou colonne) du curseur d'impression (en millimètres).
<Calcul immédiat> : Booléen optionnel
- Vrai (par défaut) pour effectuer immédiatement le calcul de la position horizontale.
- Faux si le calcul de la position horizontale doit être effectué uniquement lors de l'impression (cas d'imbrication de positions par exemple). Pour plus de détails, consultez les remarques.
Remarques
Origine et marges physiques
L'origine (0,0) est située dans le coin supérieur gauche de la feuille. Cette origine tient compte des marges physiques de l'imprimante.
Chaque imprimante gère des marges physiques dans lesquelles aucune impression n'est possible. La fonction
iMarge permet de définir des marges "logiques" d'impression. Si des marges logiques ont été définies, la fonction
iPosX gère la position horizontale par rapport à ces nouvelles marges.
Gestion du paramètre <Calcul Immédiat>
Lorsque le paramètre <Position horizontal> est précisé dans la fonction
iPosX, la fonction effectue deux actions en même temps :
- Renvoi d'une chaîne de caractères de contrôle. Cette chaîne de caractères de contrôle provoque une modification de la position d'impression au moment où elle est imprimée.
- Modification immédiate de la position en cours du curseur d'impression
Le paramètre <Calcul immédiat> permet de récupérer la chaîne de caractères de contrôle sans modifier la position en cours du curseur d'impression.
sMonTitre est une chaîne = "Titre impression"
iDestination(iVisualisateur)
// --- CAS 1 : <Calcul immédiat> à Vrai (par défaut)
// Positionnement du curseur à l'endroit souhaité
// Note : La chaîne de caractères de contrôle n'est pas récupérée ici
iPosX((iLargeurPage() - iLargeurTexte(sMonTitre))/2)
// Calcul pour centrer le texte
// Impression à la position du curseur précédemment déterminée
iImprime(sMonTitre) // Donc doit être centré
// --- CAS 2 : Le même code avec le paramètre <Calcul immédiat> à Faux
// La chaîne de caractères de contrôle n'est pas récupérée ici
// Et le curseur d'impression n'est pas positionné car
// <Calcul immédiat> est à Faux
// Note : Donc cette ligne ne sert à rien
iPosX((iLargeurPage() - iLargeurTexte(sMonTitre))/2, Faux)
// Impression à la position du curseur
// La ligne de code précédente ne l'ayant pas changé
// le texte va s'imprimer à la position précédente (donc en début de ligne ici)
iImprime(sMonTitre) //Donc NE doit PAS être centré
// --- CAS 3 : Le code en une seule ligne
// Avec le paramètre <Calcul immédiat> à Faux ou à Vrai
// le résultat est le même
// La position du curseur d'impression est modifiée au moment de
// l'exécution de iPosX, et au moment de l'impression de la
// chaîne de caractères qui contient le résultat renvoyé par iPosX
iImprime(iPosX((iLargeurPage() - iLargeurTexte(sMonTitre))/2, Vrai) + sMonTitre)
// Donc doit être centré
// Le positionnement est fait deux fois : un peu plus lourd
// mais le résultat est celui attendu
// --- CAS 3 Bis
// La position du curseur d'impression N'est PAS modifiée au moment
// de l'exécution de iPosX, MAIS elle est modifiée au moment
// de l'impression de la chaîne de caractères qui contient le résultat
// renvoyé par iPosX
iImprime(iPosX((iLargeurPage() - iLargeurTexte(sMonTitre))/2, Faux) + sMonTitre)
// Donc doit être centré
// Fin d'impression
iFinImprime()
Combinaison de positions (paramètre <Calcul immédiat>)
Lors de la combinaison de positions, des effets inattendus peuvent être observés. Par exemple, le code :
iPosX(50)
iImprime("Première partie" + iPosX(20) + "Seconde partie")
n'est pas équivalent à :
iImprime(iPosX(50) + "Première partie" + iPosX(20) + "Seconde partie")
Dans le premier cas, toute la chaîne de caractères est imprimée en position horizontale 20. En effet, dans ce cas, la fonction iPosX(20) est exécutée lors de la construction de la chaîne à imprimer et donc avant l'impression de la chaîne "Première partie".
Pour obtenir un résultat identique, il suffit d'utiliser la fonction iPosX avec le paramètre Faux : la fonction iPosX(20, Faux) ne sera réellement exécutée que lors de l'impression.
La même manipulation peut être réalisée avec la fonction
iPosY.
Composante : wd250prn.dll