Rotation du texte sur l'imprimante

element1488 Messages postés 7 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 18 décembre 2005 - 24 sept. 2005 à 05:02
P__ROMEO Messages postés 294 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 9 mars 2006 - 28 sept. 2005 à 01:36
Bonjour à tous,

J'ai besoin d'imprimer un texte verticalement sur l'objet printer.
J'ai essayé avec createfont en modifier les propriétés et ça fonctionne si j'imprime sur un form mais pas sur l'imprimante.
C'est quoi le truc que j'ai pas compris ??

Merci!

11 réponses

P__ROMEO Messages postés 294 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 9 mars 2006 1
24 sept. 2005 à 06:05
Comment est ce que tu écris verticalement? tu peux faire passer le code?

Moi, pour le faire, j'écris mon texte dans une picture, et en passant par pas mal de ligne de code, je l'incline
sur ma forme, ca passe, et quand j'imprime aussi.
Si ca t'intéresse, et si ya pas mieux, je mets le code ici. (je ne veux pas encombrer, si ya mieux)

seulement, j'ai un blême que je n'arrive pas à résoudre, c'est que quand je réduis la forme, ou si elle passe
derrière une autre forme, ou un msgbox, mon texte s'efface (comme la gomme de paint)

en passant, si on peut m'aider a trouver comment résoudre cela.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
24 sept. 2005 à 09:08
Attention, les API Windows travaille en Pixels et non en twips, ton problème peut venir de là !



Essaye en modifiant le scalemode de ton objet Printer.

_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
element1488 Messages postés 7 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 18 décembre 2005
24 sept. 2005 à 20:15
Merci pour les réponses

P_ROMEO:
Essai de mettre la propriété AutoRedraw à True, ça marche pour moi.
Voici le code que j'utilise, il n'est pas de moi, il m'a été donné par un ami.
''''''''''''''''DECLARATIONS'''''''''''''''''''''

Const LF_FACESIZE = 32

Private Type LOGFONT
lfHeight As Long
lfWidth As Long
lfEscapement As Long
lfOrientation As Long
lfWeight As Long
lfItalic As Byte
lfUnderline As Byte
lfStrikeOut As Byte
lfCharset As Byte
lfOutPrecision As Byte
lfClipPrecision As Byte
lfQuality As Byte
lfPitchAndFamily As Byte
lfFaceName As String * LF_FACESIZE
End Type

Private Declare Function SetGraphicsMode Lib "gdi32" (ByVal hdc As Long, _
ByVal iMode As Long) As Long
Private Declare Function MulDiv Lib "kernel32" (ByVal nNumber As Long, _
ByVal nNumerator As Long, ByVal nDenominator As Long) As Long
Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, _
ByVal nIndex As Long) As Long
Private Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" _
(lpLogFont As LOGFONT) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, _
ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, _
Source As Any, ByVal bytes As Long)

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub PrintRotatedText(PB As Object, ByVal Text As String, _
Optional ByVal angle As Integer = -900, Optional x As Variant, _
Optional y As Variant)

Dim hfont As Long
Dim holdfont As Long
Dim Font As LOGFONT

Const GM_ADVANCED = 2
Const LOGPIXELSY = 90

SetGraphicsMode PB.hdc, GM_ADVANCED

Font.lfHeight = MulDiv(PB.FontSize, GetDeviceCaps(PB.hdc, LOGPIXELSY), 72)
Font.lfWidth = 0
Font.lfEscapement = angle
Font.lfOrientation = angle
Font.lfWeight = IIf(PB.FontBold, 700, 400)
Font.lfItalic = IIf(PB.FontItalic, 1, 0)
Font.lfUnderline = IIf(PB.FontUnderline, 1, 0)
Font.lfStrikeOut = IIf(PB.FontStrikethru, 1, 0)
Font.lfCharset = 0
Font.lfOutPrecision = 0
Font.lfClipPrecision = 0
Font.lfQuality = 2
Font.lfPitchAndFamily = 33
Font.lfFaceName = PB.FontName & vbNullChar

hfont = CreateFontIndirect(Font)
holdfont = SelectObject(PB.hdc, hfont)

If Not IsMissing(x) Then PB.CurrentX = x
If Not IsMissing(y) Then PB.CurrentY = y

PB.Print Text

SelectObject PB.hdc, holdfont
DeleteObject hfont


End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Private Sub Command1_Click()
Dim PosX, PosY As Integer
Dim strToPrint As String


PosY = 200
PosX = 200


Me.Font = "Arial"
Me.Font.Bold = False
Me.Font.Italic = False
Me.Font.Underline = False
Me.Font.Strikethrough = False
Me.Font.Size = 10
strToPrint = "Rotation de texte"
PrintRotatedText Me, strToPrint, 2700, PosX, PosY


End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
DARKSIDIOUS:
J'ai essayé tous les Scalemode et ça ne fonctionne toujours pas.
Ça commence à être un peu déprimant :-)
0
P__ROMEO Messages postés 294 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 9 mars 2006 1
25 sept. 2005 à 00:46
Je pensais t'aider, et voila que tu résouds mon problème en une action. j'ai mis AutoRedraw a true, et ca marche.
Et, ton code et celui que j'utilise sont presque identique. moi je l'ai pris sur le site. si toi aussi, alors pourquoi
avoir modifié certaine ligne.?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
P__ROMEO Messages postés 294 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 9 mars 2006 1
25 sept. 2005 à 00:48
je ne t'ai meme pas remercié pour ta réponse.
Merci
0
P__ROMEO Messages postés 294 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 9 mars 2006 1
26 sept. 2005 à 23:53
Bonsoir!

VOILA, maintenant j'ai ton problème. et n'arrive pas à le résoudre. toi, tu l'as résolu?? (je dois rendre mon travail dans 8 jours. ce n'etais vraiment pas le moment de planter. Mais bon, avec moi, c'est toujours comme ca.) Si tu as pu voir d'ou vien l'erreur, fais signe.

DARKSIDIOUS, si c'est cela le problème, comment on peut le résoudre. (je sais, tu as dis que c'est possible que ce soit le problème, non pas que c'est le problème)

A+
0
P__ROMEO Messages postés 294 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 9 mars 2006 1
27 sept. 2005 à 17:21
DARKSIDIOUS , si je te demandes comment faire, c'est parce que j'ai changer la valeur de ScalMode, et pour l'objet printer, et pour le picture box, mais, rien a faire. je ne comprend pas pour quoi ca ne marche pas.
Bone journée
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
27 sept. 2005 à 18:48
Un petit exemple tiré de l'API Guide, à adapter à votre code bien entendu :



'In general section

Private Declare Function CreateFontIndirect Lib "gdi32" Alias "CreateFontIndirectA" (lpLogFont As LOGFONT) As Long

Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long

Private Const LF_FACESIZE = 32

Private Type LOGFONT

lfHeight As Long

lfWidth As Long

lfEscapement As Long

lfOrientation As Long

lfWeight As Long

lfItalic As Byte

lfUnderline As Byte

lfStrikeOut As Byte

lfCharSet As Byte

lfOutPrecision As Byte

lfClipPrecision As Byte

lfQuality As Byte

lfPitchAndFamily As Byte

lfFaceName(LF_FACESIZE) As Byte

End Type

'In form

Private Sub Form_Load()

'KPD-Team 1998

'URL: http://www.allapi.net/

'E-Mail: KPDTeam@Allapi.net



Dim RotateMe As LOGFONT

'Set graphic-mode to 'persistent graphic'

Me.AutoRedraw = True

'Rotate degrees

Deg = 270

'Size (in points)

Size = 20

'Set the rotation degree

RotateMe.lfEscapement = Deg * 10

'Set the height of the font

RotateMe.lfHeight = (Size * -20) / Screen.TwipsPerPixelY

'Create the font

rFont = CreateFontIndirect(RotateMe)

'Select the font n the Form's device context

Curent = SelectObject(Me.hdc, rFont)

'Print some text ...

Me.CurrentX = 500

Me.CurrentY = 200

Me.Print "Salut !"



Call Printer.PaintPicture(Me.Image, 0, 0)

Printer.EndDoc

End Sub


_____________________________________________________________________
DarK Sidious

Un API Viewer (pour le VB, VB.NET, C, C# et Delphi) tout en français : www.ProgOtoP.com/popapi/
0
P__ROMEO Messages postés 294 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 9 mars 2006 1
28 sept. 2005 à 00:40
Salut 13557 DARKSIDIOUS
Merci. Tu m'as sauvé.

J’ai essayé ton code, je ne sais pas pourquoi, mais, sur Dim RotateMe As LOGFONT mon appli s'arrête.
J’ai cherché, mais ne sais pas d'ou vient l'erreur.

Mais, en même temps, l'adresse qui est au dessus de cette ligne m'a mené vers un code magnifique. Il est assez grand. Je le mettrais si ça ne dérange pas qu'on prenne un code sur un autre site, et qu'on le copie dans le monde VbFrance.

Ce code permet de faire une capture d'écran, entière, ou seulement la form, ou avec la barre de titre...
et on peut imprimer à la fin.

(je n'ai pas encore fini de l'adapter a mon programme, mais, à première vue, ca passe. espérons qu'il n'y aura pas de problème)
A+ et merci<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />
0
element1488 Messages postés 7 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 18 décembre 2005
28 sept. 2005 à 01:18
Salut,
Le truc de capturer l'écran et de l'imprimer ça marche avec une imprimante laser ou à haute résolution, mais moi je dois imprimer sur une imprimante d'étiquettes à transfert thermique. Une capture d'écran devient peu lisible à cause de la faible résolution. C'est pour ça que je cherche un truc pour produire une rotation sur l'objet Printer.
Et je cherche et je déprime !!
0
P__ROMEO Messages postés 294 Date d'inscription vendredi 25 février 2005 Statut Membre Dernière intervention 9 mars 2006 1
28 sept. 2005 à 01:36
Tu as essayé le code de DARKSIDIOUS ?
Moi, j'ai pensé à transférer mes données dans une feuille excel, et, une fois ma table (les données de ma table) dans le fichier, grace à une macro, ou VBA, j'incline le texte voulu, et imprime la feuille. Mais, je ne mettrise pas VBA. si toi tu penses y arriver, ca deverais être assez propre.
0
Rejoignez-nous