Centrer un texte dans une image

cs_Devilknight Messages postés 4 Date d'inscription mercredi 29 novembre 2006 Statut Membre Dernière intervention 8 décembre 2006 - 7 déc. 2006 à 01:49
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 7 déc. 2006 à 08:42
Bonjour, je souhaite mettre en premier plan un label sur une picturebox afin de pouvoir le rendre visible. J'ai cru comprendre que ce n'était pas possible et qu'il fallait passer par "Mapicturebox.Print Monlabel.Caption". Hors cet attribut ne me permet pas de centrer le texte en longueur et en largeur par rapport à l'image ?

J'ai également une autre question qui porte cette fois sur la transparence. Mon image est un hexagone plein coloré de manière paramétrable. Je souhaite faire en sorte que quelquesoit la nouvelle couleur de l'image, les bords soit toujours transparents. En effet, plusieurs hexagone sont magnétisés à partir d'un drag&drop dans mon programme et les coins ne sont pas transparents même si toutes les propriétés ont été modifiées en fonction.

Appearance --> Flat
DrawStyle --> Transparent
FillStyle -->Transparent
Picture --> (J'ai mis un gif qui a les bords normalement transparents sous photoshop)

Je remercie d'avance ceux qui pourront me trouver une solution appropriée.

3 réponses

le cancre Messages postés 292 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 27 novembre 2009
7 déc. 2006 à 01:57
un exemple
picturebox1.width = 400
LongueurTexte = picture1.TextWidth("voila") ' longeur de ton texte
picturebox1.currentx = 200 - (LongueurTexte/2) 
( avec .currentx tu choisis l'emplacement)
picturebox1.print "voila"

pour la transparence, en utilisant le moteur de recherche tu trouveras des exemples,sinon regarde dans les questions du forum "picturebox transparence"
0
cs_Devilknight Messages postés 4 Date d'inscription mercredi 29 novembre 2006 Statut Membre Dernière intervention 8 décembre 2006
7 déc. 2006 à 02:00
Oki merci, je vais m'y coller de suite
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
7 déc. 2006 à 08:42
Tiens !
Tu vas t'amuser un peu avec DrawText .

Tu fais ce qui suis, tu lances... et tu observes les affichages successifs ...

Sur une Form, une PictureBox Picture1 et un nouton de commande Command1

Code :

Option Explicit
Private Const DT_BOTTOM = &H8
Private Const DT_CALCRECT = &H400
Private Const DT_CENTER = &H1
Private Const DT_EXPANDTABS = &H40
Private Const DT_EXTERNALLEADING = &H200
Private Const DT_LEFT = &H0
Private Const DT_NOCLIP = &H100
Private Const DT_NOPREFIX = &H800
Private Const DT_RIGHT = &H2
Private Const DT_SINGLELINE = &H20
Private Const DT_TABSTOP = &H80
Private Const DT_TOP = &H0
Private Const DT_VCENTER = &H4
Private Const DT_WORDBREAK = &H10
Private Const PS_NULL = 5
Private Const PS_INSIDEFRAME = 6
Private Const PS_SOLID = 0
 
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
 
Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function CopyRect Lib "user32" (lpDestRect As RECT, lpSourceRect As RECT) As Long
Private Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 
Private Enum HorzAlign
    HORZ_LEFT = 0
    HORZ_CENTER = 1
    HORZ_RIGHT = 2
End Enum


Private Enum VertAlign
    VERT_TOP = 0
    VERT_CENTER = 1
    VERT_BOTTOM = 2
End Enum
 


Private Sub Command1_Click()
    Dim Txt As String
    Dim Rct As RECT
    Dim Horz As HorzAlign
    Dim Vert As VertAlign
    MousePointer = 11: DoEvents
    'on prend comme rectangle la surface client du picturebox
    GetClientRect Picture1.hwnd, Rct
 
    Txt = "Exemple de texte simple"
    DessineTout Txt, Rct
 
    Txt = "Exemple de " & vbCrLf & "texte multilignes"
    DessineTout Txt, Rct
 
    'on definit un rectangle plus petit à l'interieur du picturebox
    Rct.Top = 100
    Rct.Left = 100
    Rct.Bottom = 200
    Rct.Right = 300
 
    Txt = "Exemple de texte simple"
    DessineTout Txt, Rct
 
    Txt = "Exemple de " & vbCrLf & "texte multilignes"
    DessineTout Txt, Rct
 
    MousePointer = 0
    Unload Me
End Sub
 
Private Sub Form_Load()
    Me.Font = 20
    Me.Move 0, 0, 6000, 6000
    Picture1.Move 100, 100, 5000, 4000
    Command1.Move 100, 4500
End Sub


Private Sub DessineTout(Txt As String, Rct As RECT)
    'Execute la commande dessine pour les neuf possibilités d'alignement
    Dim Horz As HorzAlign
    Dim Vert As VertAlign
    Vert = VERT_TOP ' en haut
    Horz = HORZ_LEFT:    Dessine Txt, Rct, Horz, Vert 'a gauche
    Horz = HORZ_CENTER:  Dessine Txt, Rct, Horz, Vert 'au centre
    Horz = HORZ_RIGHT:   Dessine Txt, Rct, Horz, Vert 'a droite
    Vert = VERT_CENTER 'au milieu
    Horz = HORZ_LEFT:    Dessine Txt, Rct, Horz, Vert 'a gauche
    Horz = HORZ_CENTER:  Dessine Txt, Rct, Horz, Vert 'au centre
    Horz = HORZ_RIGHT:   Dessine Txt, Rct, Horz, Vert 'a droite
    Vert = VERT_BOTTOM 'en bas
    Horz = HORZ_LEFT:    Dessine Txt, Rct, Horz, Vert 'a gauche
    Horz = HORZ_CENTER:  Dessine Txt, Rct, Horz, Vert 'au centre
    Horz = HORZ_RIGHT:   Dessine Txt, Rct, Horz, Vert 'a droite
End Sub


Private Sub Dessine(Txt As String, Rct As RECT, Horz As HorzAlign, Vert As VertAlign)
    Dim CalcRect As RECT
    Dim HauteurTexte As Long
    Dim Flag As Long
    'on efface le picturebox
    Picture1.Cls
    'on dessine le rectangle
    Rectangle Picture1.hdc, Rct.Left, Rct.Top, Rct.Right, Rct.Bottom
    'On copie le rectangle dans un autre rectangle qui servira pour les calculs
    CopyRect CalcRect, Rct
    'Calcul de la Hauteur du Texte
    DrawText Picture1.hdc, Txt, Len(Txt), CalcRect, DT_LEFT Or DT_WORDBREAK Or DT_CALCRECT
    HauteurTexte = CalcRect.Bottom - CalcRect.Top
    'On copie le rectangle dans un autre rectangle qui servira pour les calculs
    CopyRect CalcRect, Rct
    'calcul du flag
    Select Case Horz
        Case HORZ_LEFT
            Flag = DT_LEFT Or DT_WORDBREAK
        Case HORZ_CENTER
            Flag = DT_CENTER Or DT_WORDBREAK
        Case Else
            Flag = DT_RIGHT Or DT_WORDBREAK
    End Select
  '
    Select Case Vert
        Case VERT_TOP
            '
        Case VERT_CENTER
            CalcRect.Top = CalcRect.Top + ((Rct.Bottom - Rct.Top) - HauteurTexte) \ 2
        Case Else
            CalcRect.Top = CalcRect.Bottom - HauteurTexte
    End Select
    CalcRect.Bottom = CalcRect.Top + HauteurTexte
    DrawText Picture1.hdc, Txt, Len(Txt), CalcRect, Flag
    'on attend une seconde pour laisser le temps de voir
    Sleep 1000
End Sub
0
Rejoignez-nous