IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Dégradé de couleurs avec texte


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut Dégradé de couleurs avec texte
    Bonjour,

    Je voudrais faire un dégradé avec un texte écrit dessus qui ne soit pas en dégradé.

    J'ai trouvé ce code sur internet et étant débutant je n'y comprends pas grand chose. Ca marche bien pour le dégradé mais je n'arrive pas à avoir mon texte correctement écrit. J'ai rajouté un Label et même en mettant sa propriété BackColor à "Transparent", le texte apparait dans un rectangle gris et c'est pas beau

    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
    Dim g As Graphics = Me.PictureBox1.CreateGraphics
            g.SmoothingMode = SmoothingMode.AntiAlias
     
            Dim rect As Rectangle = New Rectangle(68, 0, Me.PictureBox1.Width, Me.PictureBox1.Height)
            Dim blend As ColorBlend = New ColorBlend()
            'Add the Array of Color
            Dim bColors As Color() = New Color() {colorA, colorB}
            blend.Colors = bColors
     
            'Add the Array Single (0-1) colorpoints to place each Color
            Dim bPts As Single() = New Single() {0, 1.0}
            blend.Positions = bPts
     
            ' Create a LinearGradientBrush or PathGradientBrush depending on the BlendGradientType choice
            Using br As New LinearGradientBrush(rect, Color.White, Color.Black, gradientMode)
                'Blend the colors into the Brush
                br.InterpolationColors = blend
     
                'Fill the rect with the blend
                g.FillRectangle(br, rect)
     
            End Using
     
            'clean up graphics object
            g.Dispose()
    Comment faire ?
    Merci de vos éclaircissements

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Trois étapes :
    - Mettre le code de dessin dans l'évènement Paint du contrôle dans lequel on veut dessiner
    - Créer le brush (ou pinceau) que l'on veux utiliser pour peindre
    - Peindre le texte

    Ce qui donne :
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
            Dim g = e.Graphics
     
            Using br As New LinearGradientBrush(New Rectangle(0, 0, Width, Height), Color.White, Color.Black, LinearGradientMode.Horizontal)
     
                g.DrawString("Je n'aime pas VB !", New Font(Font.FontFamily, 30, FontStyle.Bold, GraphicsUnit.Pixel), br, 0, 0)
     
            End Using
     
            'clean up graphics object
            g.Dispose()
        End Sub

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut
    J'ai essayé et ca ne marche pas.
    Ca bloque et la form ne s'affiche plus.
    Je ne comprends pas

  4. #4
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Avant de poster j'ai essayé sur une Form donc ... montre le code entier de ta Form pour voir ...

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut
    Ma Form ne comporte pas d'autre code.
    En fait, j'aurais du précisé que cette form est appelé par une MDI avec la méthode ShowDialog()

    Avec le code j'ai l'exception "Le paramètre n'est pas valide."
    Sans le code du Paint, elle s'affiche bien.

    En appelant la Form en Child avec Show, la form s'ouvre et j'ai bien le texte en dégradé
    Mais c'est pas tout à fait ce que je voulais

    Je voulais écrire du texte sur un dégradé dans une fenêtre modale.
    J'avais mis un label sur un picturebox qui contenait le dégardé et le fond du label recouvrait le dégardé

  6. #6
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Hobbi1 Voir le message
    Avec le code j'ai l'exception "Le paramètre n'est pas valide."
    Sur quelle ligne ?

  7. #7
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut
    L'exception "Le paramètre n'est pas valide." apparait sur la ligne appelant la form avec le dégradé, avec la méthode ShowDialog

  8. #8
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Peut être ...
    modifie le code comme ceci :
    Code vb : 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
     
    Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
     
     
       If Width < 1 OrElse Height < 1 Then
           Return
       End If
     
     
     
            Dim g = e.Graphics
     
            Using br As New LinearGradientBrush(New Rectangle(0, 0, Width, Height), Color.White, Color.Black, LinearGradientMode.Horizontal)
     
                g.DrawString("Je n'aime pas VB !", New Font(Font.FontFamily, 30, FontStyle.Bold, GraphicsUnit.Pixel), br, 0, 0)
     
            End Using
     
            'clean up graphics object
            g.Dispose()
        End Sub

  9. #9
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut
    Ca ne marche toujours pas

    Pour rappel, je veux simplement ajouter un texte d'un label par dessus un dégradé généré dans une picturebox avec l'arrière plan du label transparent (pour ne pas cahcer le dégradé)

    J'ai ca en surfant
    http://msdn.microsoft.com/fr-fr/library/wk5b13s4.aspx

    Mais je n'ai pas compris comment l'utiliser ?
    Est-ce que ca pourrait être une solution ?

  10. #10
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par Hobbi1 Voir le message
    Pour rappel, je veux simplement ajouter un texte d'un label par dessus un dégradé généré dans une picturebox avec l'arrière plan du label transparent (pour ne pas cahcer le dégradé)
    AHhhhhhh, le con, j'ai mal lu

    Pour ton dégradé à priori tu sais faire (suffit de faire dans l'évènement Paint du formulaire ton g.FillRectangle).
    Par contre pour mettre un label dessus ça marche pas il faut que tu fasses différemment. Une solution est de ne pas utiliser de label mais de rajouter un g.DrawString après ton g.FillRectangle.

  11. #11
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut
    Hi hi ! Du tout. C'est sympa de m'aide
    J'avais entraperçu le texte "Je n'aime pas VB" en dégradé gris pendant les tests avant que la form ne bloque

    Pour ton dégradé à priori tu sais faire (suffit de faire dans l'évènement Paint du formulaire ton g.FillRectangle).
    En fait, on ne peut pas dire que je maitrise. J'ai récupéré le code sur internet et j'essaye de le comprendre.
    D'ailleurs, je l'ai recopié dans une 2e Form, en faisant a priori tout pareil, et là, même le dégradé ne marche plus dans la 2e form

    J'ai mis le DrawString juste après le FillREctange comme ceci :
    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
    Dim g As Graphics = Me.PictureBox1.CreateGraphics
            g.SmoothingMode = SmoothingMode.AntiAlias
     
            Dim rect As Rectangle = New Rectangle(0, 0, Me.PictureBox1.Width, Me.PictureBox1.Height)
            Dim blend As ColorBlend = New ColorBlend()
            'Add the Array of Color
            Dim bColors As Color() = New Color() {colorA, colorB}
            blend.Colors = bColors
     
            'Add the Array Single (0-1) colorpoints to place each Color
            Dim bPts As Single() = New Single() {0, 1.0}
            blend.Positions = bPts
     
            ' Create a LinearGradientBrush or PathGradientBrush depending on the BlendGradientType choice
            Using br As New LinearGradientBrush(rect, Color.White, Color.Black, gradientMode)
                'Blend the colors into the Brush
     
                br.InterpolationColors = blend
     
                'Fill the rect with the blend
     
                g.FillRectangle(br, rect)
                g.DrawString("COUCOU", Me.Font, Brushes.Black, 100, 100)
            End Using
     
     
     
            'clean up graphics object
     
            g.Dispose()
    Et ca ne marche pas. Je n'ai aucun texte

  12. #12
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Point par point (histoire d'être sur)
    - J'ouvre VS, Nouveau projet WinForms VB.Net
    - Form1 en mode design, évènements, double click sur l'évènement Paint, ce qui m'envoie vers
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Class Form1
     
        Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
     
        End Sub
    End Class
    - D'abord, le dégradé
    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Imports System.Drawing.Drawing2D
     
    Public Class Form1
     
        Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
            Dim g As Graphics = e.Graphics
     
            Dim br As LinearGradientBrush = New LinearGradientBrush(New Rectangle(0, 0, Width, Height), Color.Coral, Color.BurlyWood, LinearGradientMode.Vertical)
     
            g.FillRectangle(br, New Rectangle(0, 0, Width, Height))
     
            br.Dispose()
        End Sub
    End Class
    - Maintenant, il faut dessiner le texte
    Code vb : 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
     
    Imports System.Drawing.Drawing2D
     
    Public Class Form1
     
        Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
            Dim g As Graphics = e.Graphics
     
            Dim br As LinearGradientBrush = New LinearGradientBrush(New Rectangle(0, 0, Width, Height), Color.Coral, Color.BurlyWood, LinearGradientMode.Vertical)
     
            g.FillRectangle(br, New Rectangle(0, 0, Width, Height))
     
            br.Dispose()
     
            g.DrawString("Je n'aime pas le VB !", Font, Brushes.Aquamarine, 15, 15)
        End Sub
    End Class

    Et c'est fini.

    Maintenant on peux refaire la même chose en lançant la form en modal donc je rajoute un bouton, double click pour l'évènement et j'affiche la même form, ce qui donne :
    Code vb : 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
     
    Imports System.Drawing.Drawing2D
     
    Public Class Form1
     
        Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
            Dim g As Graphics = e.Graphics
     
            Dim br As LinearGradientBrush = New LinearGradientBrush(New Rectangle(0, 0, Width, Height), Color.Coral, Color.BurlyWood, LinearGradientMode.Vertical)
     
            g.FillRectangle(br, New Rectangle(0, 0, Width, Height))
     
            br.Dispose()
     
            g.DrawString("Je n'aime pas le VB !", Font, Brushes.Aquamarine, 15, 15)
        End Sub
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim fx As Form1 = New Form1()
            fx.ShowDialog()
        End Sub
    End Class
    Et ça marche encore ...


    Et pour finir, ne pas oublier de regarder le cours vb.net disponible sur dvp :
    http://plasserre.developpez.com/cours/vb-net/

  13. #13
    Membre habitué
    Inscrit en
    Septembre 2004
    Messages
    378
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 378
    Points : 130
    Points
    130
    Par défaut
    Oui ça marche !
    Impeccable

    Merci beaucoup.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire un dégradé de couleur avec du texte
    Par loic20h28 dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 31/01/2010, 22h09
  2. [XL-2007] Utiliser plusieurs couleurs au texte d'une cellule avec vba
    Par CRC dans le forum Excel
    Réponses: 2
    Dernier message: 21/08/2009, 14h37
  3. recuperation couleur de texte avec un recherchev
    Par leila09 dans le forum Excel
    Réponses: 4
    Dernier message: 19/03/2009, 14h53
  4. Réponses: 1
    Dernier message: 19/08/2008, 11h15
  5. gestion de couleur de texte avec Action Script
    Par smh_master dans le forum Flash
    Réponses: 18
    Dernier message: 16/11/2006, 15h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo