Vb Impression

Download Vb Impression

Post on 09-Jul-2015

34 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

<p>L'impression sous visual basic 6.0par Jean-Marc Rabilloud (La page Jean-Marc RABILLOUD) (Blog)</p> <p>Date de publication : 20/12/2002 Dernire mise jour : 07/01/2008</p> <p>Le prsent article va concerner l'utilisation de l'objet printer. Dans la premire partie de cet article nous tudierons l'objet, ses proprits et ses mthodes. Dans la seconde, nous verrons plusieurs mthodes pour simplifier son utilisation.</p> <p>L'impression sous visual basic 6.0 par Jean-Marc Rabilloud (La page Jean-Marc RABILLOUD) (Blog)</p> <p>I - L'objet printer minus II - J'imprime vers# III - L'objet printer terre IV - Le systme de coordonnes. IV-A - Les marges IV-B - L'impression d'une chane IV-C - Le changement de page IV-D - La valorisation des proprits V - L'imprime l'emploi V-A - Utilisation gnrale V-A-1 - Le centrage V-A-2 - Encadrer un texte V-A-3 - Dessiner une case coche V-A-4 - Insrer une image V-B - L'impression gomtrique V-C - Impression d'un ListBox. V-D - Impression de longues chanes V-E - Imprimer un recordset ou une grille V-F - L'impression sur plusieurs pages V-G - Prvisualisation VI - Conclusion</p> <p>-2Copyright 2002 - bidou. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.http://vb.developpez.com/bidou/vb-impression/</p> <p>L'impression sous visual basic 6.0 par Jean-Marc Rabilloud (La page Jean-Marc RABILLOUD) (Blog)</p> <p>I - L'objet printer minusPeu d'objet de visual basic cre une telle rpulsion que l'objet printer. De par le fait de sa simplicit, et parce que l'impression est vritablement propre chaque application, on ne trouve que trs peu d'exemple d'utilisation de cet objet. Dans l'imaginaire, l'objet printer voque des codes interminables, impossible maintenir et demandant des heures de mises au point. Ceci est tellement vrai que l'on rencontre beaucoup de contrles payants, souvent assez chers, censs simplifier la tche. Quelques utilisateurs ont contourn le problme en dtournant le DataReport pour raliser leurs impressions. Je vais tenter de dmontrer dans cet article, que la rputation sulfureuse de cet objet est infonde et qu'il s'agit d'un objet puissant, ais utiliser, permettant de raliser des impressions de grandes qualits.</p> <p>-3Copyright 2002 - bidou. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.http://vb.developpez.com/bidou/vb-impression/</p> <p>L'impression sous visual basic 6.0 par Jean-Marc Rabilloud (La page Jean-Marc RABILLOUD) (Blog)</p> <p>II - J'imprime vers#Avant de pouvoir imprimer, il va falloir utiliser un outil pour configurer l'imprimante et l'impression. Bien que les mthodes soient nombreuses, je prconise d'utiliser la boite de dialogue d'impression des CommonDialogs. Elle est simple utiliser, et couvre largement les besoins classiques. A noter toutefois qu'il faut utiliser la proprit Flags pour la configurer au mieux.</p> <p>Quelques points noter toutefois Il faut que la proprit PrinterDefault soit vraie pour que le choix de l'utilisateur se rpercute correctement. Changer l'imprimante par dfaut, n'est valide que pour la dure du programme. On valorise la proprits Flags=&amp;H40&amp; pour appeler la boite de configuration de l'imprimante.</p> <p>Comme il existe beaucoup d'exemples pour les CommonDialogs, je n'irai pas plus loin.</p> <p>-4Copyright 2002 - bidou. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.http://vb.developpez.com/bidou/vb-impression/</p> <p>L'impression sous visual basic 6.0 par Jean-Marc Rabilloud (La page Jean-Marc RABILLOUD) (Blog)</p> <p>III - L'objet printer terreEn lui-mme, cet objet est trs simple. Il est membre de la collection Printers, qui reprsente l'ensemble des imprimantes disponibles sur le systme. Regardons d'abord ses proprits en les rangeant en deux catgories. Celles que l'on utilise en configuration, et celles dont on se sert au cours de l'impression. La notation (RcdImp) signifie qu'on valorise la proprit en gnral lors de la rcupration de la boite de dialogue impression. Cette liste n'est pas exhaustive. N.B : Dans cet article nous utiliserons le terme mthode graphique pour toutes les impressions qui ne sont pas du texte. (Ex : Circle, Line, PaintPicture#).</p> <p>Configuration ColorMode : Dfini si une imprimante couleur imprime ou non en couleur. Copies (RcdImp) : Nombre de copies Duplex : Impression recto verso Height, Width : Servent connatre les dimensions de la feuille. Utilisez les seulement en lecture, afin de ne pas modifier la proprit PaperSize implicitement, ce qui risquerait de provoquer une erreur. Orientation (RcdImp) : Portrait ou paysage. PaperSize : Taille du papier. Dans cet article, tout sera construit autour du format A4. PrintQuality : Qualit de l'impression, va de brouillon haute. ScaleMode : Unit de l'chelle. Par habitude j'utilise toujours 6 # Millimeter. Cette proprit est trs importante, car elle va permettre de contrler la position exacte de l'impression. Il est donc fortement conseill de la dfinir au dbut et de ne plus la modifier. ScaleLeft, ScaleTop, ScaleHeight, ScaleWidth, sont des proprits utilises pour connatre la zone imprimable, comme nous le verrons dans les exemples.</p> <p>Impression DrawMode, DrawStyle, DrawWidth sont des proprits de traage des mthodes graphiques telles que l'paisseur du trait, pointills etc FillColor et FillStyle sont des proprits de remplissage des mthodes graphiques. Font, FontBold, FontItalic, FontStrikethru, FontUnderline, FontSize, FontName sont les proprits de police du texte. CurrentX, CurrentY sont les proprits de position d'impression. Elles dfinissent le coin suprieur gauche du dbut de l'impression. Elles sont fondamentales l'criture d'un gestionnaire d'impression russie, mais j'y reviendrai largement dans la deuxime partie. CurrentX augmente de la gauche vers la droite, et CurrentY du haut vers le bas.</p> <p>Nous allons voir maintenant les mthodes, celles ci s'utilisent toujours au cours de l'impression. printer.Circle [Step] (x, y), radius, [color, start, end, aspect] Trace un cercle, un arc de cercle ou une ellipse. Le mot cl Step prcise si les coordonnes du centre sont relatives ( la position currentX, currentY) ou absolu ; color permet de forcer une couleur diffrente de celle dfinit dans FillColor ; start, end servent pour les arcs, et aspect pour dfinir s'il s'agit d'un cercle ou d'une ellipse. printer.Line [Step] (x1, y1) [Step] - (x2, y2), [color], [B][F]</p> <p>-5Copyright 2002 - bidou. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.http://vb.developpez.com/bidou/vb-impression/</p> <p>L'impression sous visual basic 6.0 par Jean-Marc Rabilloud (La page Jean-Marc RABILLOUD) (Blog)</p> <p>Trace une ligne ou un rectangle. Le premier mot cl Step dfinit si les coordonnes (x1, y1) sont relatives au point (currentX, currentY) le deuxime si les coordonnes (x2, y2) sont relatives au point (x1, y1). [B] annonce le trac d'un rectangle en fonction des coordonnes. [F] annonce que ce rectangle est rempli par la mme couleur que le contour. S'il est omis, le rectangle est rempli selon les valeurs des proprits FillStyle et FillMode. N.B : Les proprits CurrentX et currentY prennent les coordonnes (x2, y2) aprs le trac de la ligne. printer.PSet [Step] (x, y), [color] Trace un point dont la taille est dfinit par la proprit DrawMode. printer.PaintPicture picture, x, y Imprime un graphique. Picture doit correspondre la proprit picture d'un PictureBox, d'une form ou d'un objet particulier. (Nous verrons cela plus loin). TextHeight et TextWidth permettent de dterminer la hauteur ou la largeur dans le systme d'unit ScaleMode. Elle attend la chane imprimer en paramtre. EndDoc met fin au travail d'impression et envoie le document vers le priphrique. KillDoc annule l'impression en cours, rien n'est envoy au priphrique. NewPage avance jusqu' la page suivante de l'imprimante et redfinit la position d'impression dans l'angle suprieur gauche de la nouvelle page, elle incrmente de 1 la proprit Page. Attention aprs l'appel de mthode, il n'est plus possible de modifier ou de revenir sur la page prcdente. Scale, ScaleX et ScaleY permettent de redfinir le systme d'chelle.</p> <p>Et enfin la mthode Print. Elle est bizarrement documente. Pour trouver comment elle fonctionne, il faut rechercher "printer.print" dans l'aide car vous ne la trouverez pas dans les mthodes de l'objet printer(??). Pour vous vitez cette recherche son modle est le suivant : [object.]Print [outputlist] [{ ; | , }] outputlist contient donc une liste de chanes spares par des' ,' ou des ';' . Sachez enfin qu'elle provoque une erreur si elle est place dans un bloc With.</p> <p>L'objet printer ne gre pas d'vnement.</p> <p>Comme vous le voyez, il n'y a pas beaucoup de proprits et de mthodes, et pourtant nous allons raliser des impressions compltes avec uniquement cet objet.</p> <p>-6Copyright 2002 - bidou. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.http://vb.developpez.com/bidou/vb-impression/</p> <p>L'impression sous visual basic 6.0 par Jean-Marc Rabilloud (La page Jean-Marc RABILLOUD) (Blog)</p> <p>IV - Le systme de coordonnes.Il faut connatre quelques astuces pour ne pas se faire berner par l'objet printer.</p> <p>IV-A - Les margesTout d'abord, une imprimante ne peut pas imprimer partout sur la feuille. Elle possde un systme de marge propre chaque imprimante. Ceci fait que le point de coordonnes (0,0) de l'imprimante n'est pas celui de la feuille. Pour dterminer par exemple la coordonne absolue du point(0,0) il faut faire :</p> <p>Xdemar=(Printer.Width-Printer.ScaleWidth)/2 Ydemar=(Printer.Heigth-Printer.ScaleHeigth)/2</p> <p>On a toujours intrt dfinir une marge suprieure 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.</p> <p>Donc dans mon programme on trouvera toujours le codePrinter.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</p> <p>IV-B - L'impression d'une chaneCe qui m'a le plus perturb, la premire fois que j'ai crit un gestionnaire d'impression, c'est la faon dont fonctionne les proprits currentX et currentY. En effet, globalement cela fonctionne comme une machine crire. L'impression d'une ligne ou d'un cadre donne ces proprits les valeurs de leurs points de fin (x2, y2). L'impression d'une chane dpend de la syntaxe. Pour faire simple je vais utiliser un exemple : Si j'cris</p> <p>Printer.Print MaChaine</p> <p>la proprit 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.-7Copyright 2002 - bidou. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.http://vb.developpez.com/bidou/vb-impression/</p> <p>L'impression sous visual basic 6.0 par Jean-Marc Rabilloud (La page Jean-Marc RABILLOUD) (Blog)</p> <p>Par contre si j'cris</p> <p>Printer.Print MaChaine;</p> <p>la proprit currentX augmente de la valeur TextWidth, et CurrentY reste identique. Ceci fait que le simple fait d'encadrer un texte juste aprs l'avoir cris ressemble rapidement un travail de polytechnicien.</p> <p>IV-C - Le changement de pageL'impression d'une chane en dehors des marges intrinsques de l'objet printer dclenche l'appel de la mthode NewPage, et tout ou partie de la chane sera imprime sur une nouvelle page. Par contre, pour les mthodes graphiques, tout ce qui sortira des marges pourra tre considr comme dfinitivement perdu. Nous verrons plus loin comment viter ces inconvnients.</p> <p>IV-D - La valorisation des propritsLes mthodes graphiques ainsi que la mthode Print utilise les valeurs des proprits pour dfinir leurs impressions. Ainsi si dans mon code je place</p> <p>Printer.FontSize=15</p> <p>chaque appel suivant de la mthode Print imprimera la chane 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 connatre les dimensions de la chane avant de changer la taille de la police. Par exemple le code suivant est diffrent selon que je mets ou non en commentaire la ligne</p> <p>'Printer.FontBold = False :</p> <p>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)</p> <p>Voil, nous avons pass en revue les mthodes et proprits de l'objet Printer, ainsi que les fonctionnements dont il faudra se mfier. Nous allons donc aborder dans cette seconde partie les faons de programmer efficacement cet objet</p> <p>-8Copyright 2002 - bidou. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E de domages et intrts.http://vb.developpez.com/bidou/vb-impression/</p> <p>L'impression sous visual basic 6.0 par Jean-Marc Rabilloud (La page Jean-Marc RABILLOUD) (Blog)</p> <p>V - L'imprime l'emploiRemarque : n'oubliez pas de placer vos feuilles et PictureBox dans le mme systme d'units que votre imprimante, afin de pas compliquer loisir les conversions d'chelle.</p> <p>V-A - Utilisation gnrale V-A-1 - Le centragePour centrer le texte sur la feuille ou dans un cadre, il suffit d'une simple opration mathmatique. Par exemple pour centrer sur la feuille horizontalementPrinter.CurrentX=Printer.Width/2 - Printer.TextWidth(Machaine)/2</p> <p>V-A-2 - Encadrer un texteComme je l'ai dit plus haut, il vaut mieux viter d'encadrer la vole, mais pour les passionns, sachez que la syntaxe est la suivante (pour un cadre situ 1.5 mm autour du texte) :...</p>