encore moi,
j'utilise Printer.print dans mon appli.
Maintenant, est-il possible, sur une même ligne, d'écrire un morceau de phrase aligné à gauche et l'autre à droite?
encore moi,
j'utilise Printer.print dans mon appli.
Maintenant, est-il possible, sur une même ligne, d'écrire un morceau de phrase aligné à gauche et l'autre à droite?
Fais un tour du côté des propriétés CurrentX et CurrentY (ta solution est là)
Pour t'aider sur le fonctionnement de l'objet Printer, sache qu'il fonctionne un peu comme une imprimante laser.
C'est-à-dire qu'il forme une "image" de ta page avant de l'imprimer donc, tu peux si tu le désires écrire à la dernière ligne d'abord puis à la première après dans ton code.
Come le dit jmfmarques, le CurrentX et CurrentY sont l'abcisse et l'ordonnée de l'endroit où tu écris
Syntaxe :Return or set the horizontal (CurrentX) or vertical (CurrentY) coordinates for the next printing or drawing method. Not available at design time.
Syntax
object.CurrentX [= x]
object.CurrentY [= y]
The CurrentX and CurrentY properties syntax have these parts:
Part Description
object An object expression that evaluates to an object in the Applies To list.
x A number that specifies the horizontal coordinate.
y A number that specifies the vertical coordinate.
Remarks
Coordinates are measured from the upper-left corner of an object. The CurrentX property setting is 0 at an object's left edge, and the CurrentY property setting is 0 at its top edge. Coordinates are expressed in twips, or the current unit of measurement defined by the ScaleHeight, ScaleWidth, ScaleLeft, ScaleTop, and ScaleMode properties.
When you use the following graphics methods, the CurrentX and CurrentY settings are changed as indicated:
Printer.currentX = 1000 (exemple)
Il n'y a absolument aucune différence entre l'opjet Printer (pour imprimer) et une PictureBox (pour afficher)
ça ok, mais j'ai une ligne où je veux afficher un bout de phrase à l'extrême gauche, et l'autre à l'extrème droite.
Mais j'arrive pas à trouver la syntaxe exacte.
Bé !
Avec currentX, pardi !
Il te faut par contre faire un petit calcul, en fonction des dimensions de ta feuille.
Mais j'entrevois !...
Alors un petit coup de pouce intéressant :
Ouvre ton aide en ligne et regarde à TextWidth avec la plus grande attention (tu en auras besoin pour déterminer ton CurrentX pour ce qui doit être frappé à "l'extrême droite", comme tu dis...
eh ben voilà, tu m'as tout dit: TextWidth et un calcul, ce qui répond à ma question. Je regarde tout ça demain et je te dis ce que ça donne.
Sauf coup de "pot total", tu reviendras avec une question (je le sais)...
Ne t'inquiète pas... j'ai la réponse
j'ai donc utilisé ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Printer.CurrentX = Printer.Width - Printer.TextWidth(MaChaine)
Toutefois (ça te fera plaisir jmf), j'ai un soucis (est-ce celui auquel tu faisais allusion): la chaine n'apparait pas entière, une partie est mangée par la marge.
Hé Hé !
Alors 2 choses :
considérons que l'on ait à imprimer toto = "voilà ce que je veux imprimer à droite"
la 1ère :
avant de calculer l'espace d'occuption de la chaine toto :
et de suite après :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 With font : .fontSize = ... .fontBold = .... etc (tout ce qui pourrait modifier la largeur d'occupation) End With
largeurnécessaire = TextWidth(toto)
Tu ne dois pas oublier de régler la propriété PageSize de ton objet printer
Printer.PageSize = ...
Si tu veux laisser une marge à droite, fastoche : il te suffit de calculer currentX en considérant que largeurnécessaire = largeurnécessaire + marge
toujours le même pb... J'en ai encore moins qui s'affiche
Je dois sortir (absent pour 2 heures)
En attendant :
Montre ici ton code d'impression en me précisant les dimensions de la feuille sur laquelle tu imprimes... et tes marges, ainsi que la police utilisée et sa taille et son style
A +
voilà la partie concernée. Si t'as besoin d'autres info, dis le moi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Printer.ScaleMode = vbTwips Printer.CurrentY = 0 Printer.CurrentX = 0 Printer.FontSize = "12" Printer.Font = "Arial" Printer.Print rsADO!BECTCODEPF Printer.CurrentY = 0 With Font: .FontSize = "12" .Font = "Arial" End With largeurnécessaire = TextWidth(rsADO!BECTCODEPF) Printer.CurrentX = Printer.Width - largeurnécessaire Printer.Print rsADO!BECTCODEPF
T'es réveillé ?
Et les dimensions de ta feuille ?
Et les marges ?
On a besoin de ces renseignements essentiels (relis ce que j'ai écrit) : fais-les moi connaître !
oups 210x297 mm pour la page et toutes les marges = 6.35 mm
HGé ben !
T'as pas de chance (forum inaccessible pendant pas mal de temps).
Ce n'est donc pas ma faute...
Alors voilà :
celà se passe de commentaires (autoexplicite) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 Private margedroite As Single, margegauche As Single, adroite As Boolean Private Sub Command1_Click() margedroite = 20 margegauche = 20 adroite = True imprimons margedroite, margegauche, "baaaaaaaaaaaaaaaaab", adroite 'dans l'expression ci-dessus : passe évidemment directement tes paramètres, : ' du genre imprimonsadroite 20, 20, "baaaaaaaaaaaaaaaaab", True (ou false) Printer.EndDoc End Sub Sub imprimons(mgd As Single, mgg As Single, montexte As String, ad As Boolean) 'a toi de jouer pour passer plus de paramètres à cette routile : 'font, etc... enfin tout ce que tu veux With Printer: .FontSize = 10 .ScaleMode = 6 ' là j'ai choisi une échelle en millimètres pour "y voir plus clair" .PaperSize = 9 ' là : pour les dimensions de ma feuille papier End With With Font: .Size = Printer.FontSize 'je te laisse mettre ici les autres paramètres (style, etc...) End With If ad Then 'comme j'ai modifié l'échelle, je rétablis en me servant de scaleWidth et non de Width Printer.CurrentX = Printer.ScaleWidth - Printer.TextWidth(montexte) - mgd Else Printer.CurrentX = mgg End If Printer.Print montexte End Sub
cool
merci beaucoup jmf, je regarde tout ça plus en détail, mais ça me semble super.
ça y est , mon appli fonctionne super. Merci jmf, je serais pas un mec jte dirais que je t'aime. Franchement, merci.
toutefois, juste pour ma culture perso, une toute dernière question:
pour la propriété PaperSize, en imaginant que je souhaite imprimer sur un format personnalisé, par ex 89x25 mm, quelle sera la syntaxe à utiliser?
j'ai vu dans la msdn ceci
mais je vois pas comment je pourrais définir.VbPRPSUser 256 Défini par l'utilisateur
Aaaaaaahhhhh... !
Il est curieux, ce asdorve, hein ?...
Alors : attends : je mouille mon doigt et le mets au vent ....
Cà y est :
Quelle chance !
Après avoir défini que j'étais avec un format à personnaliser,... ma foi .... je le personalise
Essaye !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Printer.PaperSize = vbPRPSUser Printer.Height = 1000 Printer.Width = 35000
Et n'oublie pas le tag "RESOLU"
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager