IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

L'impression sous visual basic 6.0

L'impression sous visual basic 6.0


précédentsommairesuivant

IV. Le système de coordonnées.

Il faut connaître quelques astuces pour ne pas se faire berner par l'objet printer.

IV-A. Les marges

Tout d'abord, une imprimante ne peut pas imprimer partout sur la feuille. Elle possède un système de marge propre à chaque imprimante. Ceci fait que le point de coordonnées (0,0) de l'imprimante n'est pas celui de la feuille. Pour déterminer par exemple la coordonnée absolue du point(0,0) il faut faire :

Xdemar=(Printer.Width-Printer.ScaleWidth)/2
Ydemar=(Printer.Heigth-Printer.ScaleHeigth)/2

On a toujours intérêt à définir une marge supérieure à la "marge imprimante". Par habitude j'utilise toujours dans mes impressions portrait des marges gauche/droite égales à 20 (en mm) et des marges haute/basse égales à 15.

Donc dans mon programme on trouvera toujours le code

 
Sélectionnez
Printer.TrackDefault = True
Printer.ScaleMode = 6
Printer.Orientation = 1
Printer.PaperSize = 9
Printer.PrintQuality = -4
Printer.ColorMode = 1
DecalX =20-(Printer.Width-Printer.ScaleWidth)/2
DecalY =15-(Printer.Heigth-Printer.ScaleHeigth)/2

IV-B. L'impression d'une chaîne

Ce qui m'a le plus perturbé, la première fois que j'ai écrit un gestionnaire d'impression, c'est la façon dont fonctionne les propriétés currentX et currentY. En effet, globalement cela fonctionne comme une machine à écrire.

L'impression d'une ligne ou d'un cadre donne à ces propriétés les valeurs de leurs points de fin (x2, y2).
L'impression d'une chaîne dépend de la syntaxe. Pour faire simple je vais utiliser un exemple :
Si j'écris

 
Sélectionnez
Printer.Print MaChaine

la propriété currentX prend la valeur 0, et currentY augmente de la valeur TextHeight du texte plus 0.1 mm, bref c'est un retour à la ligne.
Ce qui nous montre aussi que la valeur TextHeight n'est pas stricto sensu la hauteur du texte, mais la hauteur du texte plus un interligne.
Par contre si j'écris

 
Sélectionnez
Printer.Print MaChaine;

la propriété currentX augmente de la valeur TextWidth, et CurrentY reste identique. Ceci fait que le simple fait d'encadrer un texte juste après l'avoir écris ressemble rapidement à un travail de polytechnicien.

IV-C. Le changement de page

L'impression d'une chaîne en dehors des marges intrinsèques de l'objet printer déclenche l'appel de la méthode NewPage, et tout ou partie de la chaîne sera imprimée sur une nouvelle page.

Par contre, pour les méthodes graphiques, tout ce qui sortira des marges pourra être considéré comme définitivement perdu. Nous verrons plus loin comment éviter ces inconvénients.

IV-D. La valorisation des propriétés

Les méthodes graphiques ainsi que la méthode Print utilise les valeurs des propriétés pour définir leurs impressions. Ainsi si dans mon code je place

 
Sélectionnez
Printer.FontSize=15

chaque appel suivant de la méthode Print imprimera la chaîne en police de taille 15. Si ceci se voit vite lors du test d'impression, il peut y avoir des effets pervers si on cherche à connaître les dimensions de la chaîne avant de changer la taille de la police.
Par exemple le code suivant est différent selon que je mets ou non en commentaire la ligne

 
Sélectionnez
'Printer.FontBold = False :
 
Sélectionnez
Printer.FontSize = 14
Printer.CurrentX = 10
Printer.CurrentY = 10
Printer.Print "Titre"
Printer.FontSize = 12
'Printer.FontBold = False
Machaine = "Sous-Titre"
Largeur = Printer.TextWidth(Machaine)

Voilà, nous avons passé en revue les méthodes et propriétés de l'objet Printer, ainsi que les fonctionnements dont il faudra se méfier. Nous allons donc aborder dans cette seconde partie les façons de programmer efficacement cet objet


précédentsommairesuivant

Copyright © 2002 bidou. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.