Soyez le premier à donner votre avis sur cette source.
Snippet vu 11 881 fois - Téléchargée 26 fois
Private Sub Form_Load() '------------Taille de la Police = 15--------------------- Printer.FontSize = 15 Call IMPRIME1("Petit test pour voir ce texte s'imprimer dans une colonne de 4 cm de large ...", 5, 7, 4) Call IMPRIME2("Petit test pour voir ce texte s'imprimer dans une colonne de 4 cm de large .....", 9, 10, 4) Call JUSTIFIER("Petit test pour voir ce texte s'imprimer dans une colonne de 4 cm de large .....", 13, 13, 4) Printer.EndDoc End Sub '----------- Procédure de base (code optimisé) qui découpe le texte pour le faire tenir dans une colonne Public Sub IMPRIME1(Texte As String, X As Currency, Y As Currency, Largeur As Currency) Dim i, j As Integer Printer.ScaleMode = vbCentimeters Printer.CurrentY = Y i = 1 Do j = 0 '---------------On découpe le texte en lignes, chaque ligne mesurant "Largeur" cm------ Do j = j + 1 Loop While (Printer.TextWidth(Mid(Texte, i, j + 1)) <= Largeur) And (i + j <= Len(Texte)) '-------------------On supprime les éventuels espaces au début de la ligne obtenue--------------- Do While Mid(Texte, i, 1) = " " i = i + 1: j = j - 1 Loop ' -----------------On envoie la ligne vers l'imprimante---------------- Printer.CurrentX = X Printer.Print Mid(Texte, i, j) i = i + j: j = j - 1 Loop While i < Len(Texte) End Sub '---------- Première évolution : les mots ne sont pas coupés et sont renvoyés à la ligne. Public Sub IMPRIME2(Texte As String, X As Currency, Y As Currency, Largeur As Currency) Dim i, j, k As Integer Printer.ScaleMode = vbCentimeters Printer.CurrentY = Y i = 1 Do j = 0: k = 1 '---------------On découpe le texte en lignes, chaque ligne mesurant "Largeur" cm------ Do j = j + 1 If Mid(Texte, i + j - 1, 1) = " " Then k = j Loop While (Printer.TextWidth(Mid(Texte, i, j + 1)) <= Largeur) And (i + j <= Len(Texte)) Printer.CurrentX = X '------------------- Si on coupe un mot en fin de ligne alors on renvoie ce mot à la ligne------------- If (i + j < Len(Texte)) And (Mid(Texte, i + j - 1, 1) <> " ") And (Mid(Texte, i + j, 1) <> " ") And (k > 1) Then j = k '-------------------On supprime les éventuels espaces au début de la ligne obtenue--------------- Do While Mid(Texte, i, 1) = " " i = i + 1 Loop ' -----------------On envoie la ligne vers l'imprimante---------------- Printer.Print Mid(Texte, i, j) i = i + j Loop While i < Len(Texte) End Sub '------------ Comme son nom l'indique, elle justifie "Texte" ------------------------ Public Sub JUSTIFIER(Texte As String, X As Currency, Y As Currency, Largeur As Currency) Dim i, j, jaux, k, c, nbespace As Integer Dim PosX, PosY, Emoyen As Currency Printer.ScaleMode = vbCentimeters Printer.CurrentY = Y i = 1 Do j = 0: k = 1: nbespace = 0 '-------------------Découpage du texte en lignes de "largeur" cm---------------- Do j = j + 1 If Mid(Texte, i + j - 1, 1) = " " Then k = j End If Loop While (Printer.TextWidth(Mid(Texte, i, j + 1)) <= Largeur) And (i + j <= Len(Texte)) '------------------- Si on coupe un mot en fin de ligne alors on renvoie ce mot à la ligne------------- If (i + j < Len(Texte)) And (Mid(Texte, i + j - 1, 1) <> " ") And (Mid(Texte, i + j, 1) <> " ") And (k > 1) Then j = k '-------------------On supprime les éventuels espaces au début et en fin de ligne--------------- PosX = X: PosY = Printer.CurrentY jaux = j Do While Mid(Texte, i + jaux - 1, 1) = " " jaux = jaux - 1 Loop Do While Mid(Texte, i, 1) = " " i = i + 1: jaux = jaux - 1 Loop '------------------On détermine le nombre d'espaces restants dans la ligne--------------- For c = 1 To jaux If Mid(Texte, i + c - 1, 1) = " " Then nbespace = nbespace + 1 Next c '-----------------On détermine l'espace moyen entre chaque mots pour JUSTIFIER la ligne ------------- If nbespace <> 0 Then Emoyen = (Largeur - Printer.TextWidth(Mid(Texte, i, jaux)) + nbespace * Printer.TextWidth(" ")) / nbespace '----------------On envoie vers l'imprimante la ligne lettre par lettre avec les espaces calculés----------- For c = 1 To jaux If (Mid(Texte, i + c - 1, 1) = " ") Then PosX = PosX + Emoyen - Printer.TextWidth(" ") Else Printer.CurrentY = PosY Printer.CurrentX = PosX + Printer.TextWidth(Mid(Texte, i, c - 1)) Printer.Print Mid(Texte, i + c - 1, 1) End If Next c '--------------et zou...ligne suivante--------------------- i = i + j Loop While i < Len(Texte) End Sub
Printer.Paintpicture picture1.picture,PosX,PosY,Largeur,Longueur
Posx,PoxY : coordonnées du coin supérieur gauche
Largeur et Longueur définissent la taille de ton image sur le papier. Tu peux donc encadrer facilement ton texte.
Tu peux définir la qualité d'impression à 150 dpi par exemple avec
Printer.PrintQuality = 150.
En tout cas, moi, je fais comme ça pour mes tableaux. Je créee un BMP avec Illustrator que j'envoie aux dimensions voulues sur l'imprimante...
http://www.vbfrance.com/code.aspx?ID=8209
merci a tout ceux qui comme toi pfft, participe a l'evolution des débutants!
serait il possible de faire un cadre tout autour de chaque texte en colone?
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.