Écrire ligne texte (angle 90°) dans un picture box

boursicotteur Messages postés 201 Date d'inscription mercredi 25 septembre 2002 Statut Membre Dernière intervention 10 novembre 2007 - 2 déc. 2002 à 17:34
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 - 3 déc. 2002 à 01:05
J'essai d'écrire une ligne de texte avec un angle de 90 degrés dans un picturebox mais je ne trouve pas les instructions pour le faire.

Merci pour votre aide!

A titre de référence, je procède de la façon suivante pour écrire une ligne de texte horisontale:
Picturebox1.FontSize = 8
Picturebox1.CurrentX = 5 'pixels
Picturebox1.CurrentY = 0
Picturebox1.Print "ligne de texte"

1 réponse

cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
3 déc. 2002 à 01:05
'Une PictureBox : Picture1
'Un CommandButton : Command1
'Utilisation des fonctions API de Windows :

Private Declare Function GetDeviceCaps Lib "GDI32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Private Declare Function CreateFont Lib "GDI32" Alias "CreateFontA" (ByVal H As Long, ByVal w As Long, ByVal E As Long, ByVal O As Long, ByVal w As Long, ByVal i As Long, ByVal U As Long, ByVal S As Long, ByVal C As Long, ByVal OP As Long, ByVal CP As Long, ByVal Q As Long, ByVal PAF As Long, ByVal F As String) As Long
Private Const LF_FACESIZE = 32
Private Declare Function DeleteObject Lib "GDI32" (ByVal hObject As Long) As Long
Private Declare Function TextOut Lib "GDI32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Integer, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare Function SetMapMode Lib "GDI32" (ByVal hdc As Long, ByVal nMapMode As Long) As Long
Private Declare Function SelectObject Lib "GDI32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Const MM_LOMETRIC = 2 ' 1/10 mm
Private Const LOGPIXELSY = 90
Dim HFont As Long, HFontOld As Long, MapModePrevious As Long

Private Sub Command1_Click()
Dim x As Long, Hauteur As Long
Dim Texte As String, Police As String
Dim Haut_Bas As Long, Gauche_Droite As Long, Taille As Long
Dim Italic As Long, Gras As Long, Souligné As Long, Barré As Long, Angle As Long

Texte = "Bonjour" ' le texte à écrire
Police = "Arial" ' police à utiliser
Haut_Bas = 30 ' départ du texte à 30 mm du sommet de la PictureBox
Gauche_Droite = 5 ' départ du texte à 5 mm de la gauche de la PictureBox
Taille = 12 ' taille de la police
Italic = 0 'texte en italique : 1 ; sinon, 0
Gras = 400 ' de 100 à 900 par pas de 100
Souligné = 0 ' texte souligné : 1 ; sinon, 0
Barré = 0 ' texte barré : 1 ; sinon, 0
Angle = -900 'rotation du texte de 90,0 degrés en sens inverse des aiguilles d'une montre
' sinon, par exemple 600 = rotation du texte de 60,0 degrés dans le sens des aiguilles d'une montre

Hauteur = (-Taille * GetDeviceCaps(Picture1.hdc, LOGPIXELSY)) / 36
x = TexteIncliné(Texte, Haut_Bas, Gauche_Droite, Police, Hauteur, Italic, Gras, Souligné, Barré, Angle)
End Sub

Function TexteIncliné(Text, CentrageV, CentrageH, Nom_Fonte, Taille_Fonte, Ital, Corps, UnderL, Strik, Angle) As Long
Dim y As Long
MapModePrevious = SetMapMode(Picture1.hdc, MM_LOMETRIC)
HFont = CreateFont(Taille_Fonte, 0&, Angle, Angle, Corps, Ital, UnderL, Strik, 0&, 0&, 0&, 0&, 0&, Nom_Fonte)
HFontOld = SelectObject(Picture1.hdc, HFont)
y = TextOut(Picture1.hdc, 10 * CentrageH, -10 * CentrageV, Text, Len(Text))
y = SetMapMode(Picture1.hdc, MapModePrevious)
y = SelectObject(Picture1.hdc, HFontOld)
y = DeleteObject(HFont)
End Function
0
Rejoignez-nous