Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Impression d'un texte vertical ou avec un angle de rotation

1 réponse
Avatar
Driss HANIB
Bonjour à tous,

j'ai, dans le cadre d'un Print preview, trouvé une procédure qui permet d'
imprimer une texte en rotation que j'ai un peu modifié pour l'utiliser à la
fois dans un pictureBox et directement sur l'imprimante.

mais j'ai un problème : elle fonctionne très bien sur le picture box, mais
par contre je n'ai aucun résultat sur l'imprimante, ni même sur un prog
générateur de fichier PDF.
Je vous mets , à suivre ce que j'utilise; ici je l'utilise sans bien
comprendre le mécanisme donc je ne vois pas s'il y a une erreur : je ne
connais pas du tout les Device Context (DC ?)
Quelqu'un peut-il m'aider ou me dire s'il y a une autre façon (qui puisse à
la fois servir sur un picture Box et sur une imprimante) . merci d'vance

'************ debut procedure **************************

' on attribue à ObjPrint un pictureBox


Public Sub Ecrit_Rotation(Chaine As String, _
Angle As Integer, _
Xdébut As Single, YDébut As Single)

'/* By Diomidis Kiriakopoulos modified by Driss

Dim F As LOGFONT
Dim hPrevFont As Long
Dim hFont As Long
Dim ObjhDC As Long
Dim X As Single
Dim Y As Single

If Chaine <> vbNullString Then
' ON corrige l'angle
If Angle < 0 Then
Angle = 0
Else
Angle = Angle Mod 360
End If

' on corrige les coordonnées

On Local Error GoTo GetOut




'/* Save the hDC.
If PrintFlag Then
Printer.Print ""
Printer.CurrentX = Xdébut
Printer.CurrentY = YDébut
Printer.Print "";
ObjhDC = Printer.hDC
F.lfHeight = (Printer.FontSize * -20) / Printer.TwipsPerPixelY
'Printer.ScaleMode = vbDot
X = Xdébut * 470 ' Printer.ScaleX(XDébut, vbCentimeters, vbDot)
'* 600 '/* Printer dots/inch
Y = YDébut * 467 'Printer.ScaleY(YDébut, vbCentimeters, vbDot) '*
600Y
Else
ObjPrint.CurrentX = Xdébut
ObjPrint.CurrentY = YDébut
ObjhDC = ObjPrint.hDC
F.lfHeight = (ObjPrint.FontSize * -20) / Screen.TwipsPerPixelY

End If

F.lfEscapement = 10 * Angle '/* rotation angle, in tenths
If PrintFlag Then
F.lfFaceName = Printer.FontName & vbNullChar '/* null terminated
Else
F.lfFaceName = ObjPrint.FontName & vbNullChar '/* null terminated
End If

hFont = CreateFontIndirect(F)

hPrevFont = SelectObject(ObjhDC, hFont)

If PrintFlag Then
' Draw the text.
TextOut ObjhDC, X, Y, Chaine, Len(Chaine)
'Printer.ScaleMode = vbCentimeters
Else

ObjPrint.Print Chaine;

End If

'/* Clean up, restore original font
hFont = SelectObject(ObjhDC, hPrevFont)
DeleteObject hFont
End If ' chaine est vide
GetOut:
On Local Error GoTo 0

End Sub

1 réponse

Avatar
Jacques93
Bonjour Driss HANIB,
Driss HANIB a écrit :
Bonjour à tous,

j'ai, dans le cadre d'un Print preview, trouvé une procédure qui permet d'
imprimer une texte en rotation que j'ai un peu modifié pour l'utiliser à la
fois dans un pictureBox et directement sur l'imprimante.

mais j'ai un problème : elle fonctionne très bien sur le picture box, mais
par contre je n'ai aucun résultat sur l'imprimante, ni même sur un prog
générateur de fichier PDF.
Je vous mets , à suivre ce que j'utilise; ici je l'utilise sans bien
comprendre le mécanisme donc je ne vois pas s'il y a une erreur : je ne
connais pas du tout les Device Context (DC ?)
Quelqu'un peut-il m'aider ou me dire s'il y a une autre façon (qui puisse à
la fois servir sur un picture Box et sur une imprimante) . merci d'vance




Peut être en t'inspirant de ce code :

http://www.vbfrance.com/code.aspx?IDc59

Il y a des instructions spécifiques pour l'imprimante.
Mais tu dois pouvoir avoir une procédure commune en utilisant ton flag


--
Cordialement,

Jacques.