Changer couleur drawstring

angelblood Messages postés 46 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 19 mai 2011 - 15 nov. 2010 à 21:28
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 21 nov. 2010 à 15:34
Salut a tous,
Je vous explique : J'ai des drawstring avec une couleur et je voudrais que lorsque que la souris arrive dans la zone elle change de couleur !

je vous donne mon code :
    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim maFonte As New Font("Comic Sans MS", 9, FontStyle.Bold)
        Dim maFonte2 As New Font("Comic Sans MS", 7, FontStyle.Bold)
        'Dessiner l'image
        e.Graphics.DrawImage(My.Resources.Dofusm2, 99, 204)
        'Dessiner le texte "Coucou", avec maFonte, en noir, à la position (10,100)
        e.Graphics.DrawString("Blabla", maFonte, Brushes.Gray, 137, 213)
        e.Graphics.DrawString("Blabla", maFonte, Brushes.Gray, 137, 245)
        e.Graphics.DrawString("Blabla", maFonte, Brushes.Gray, 137, 280)

        e.Graphics.DrawString("Blabla", maFonte2, Brushes.WhiteSmoke, 366, 225)
        e.Graphics.DrawString("Blabla", maFonte2, Brushes.WhiteSmoke, 366, 258)
        e.Graphics.DrawString("Blabla", maFonte2, Brushes.WhiteSmoke, 366, 289)

    End Sub


Merci d'avance

20 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
15 nov. 2010 à 21:55
Bonjour,

Il faudra que tu détecte le survol de la souris (MouseMove, je pense) et que tu dessines en conséquence.

Mon site
0
angelblood Messages postés 46 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 19 mai 2011
16 nov. 2010 à 17:37
J'ai deja essayer si je vais dans : Private sub Mouse move, et que je veux changer la couleur des drawstring, il me dit que drawstring n'appartient pas a l'action mouse move et pareil dans le sens inverse avec les position x et y.

Merci de ta reponse
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
16 nov. 2010 à 19:33
Bonjour,

Il faut redessiner ta string.
DrawString n'est qu'un membre de Graphics, pas un objet.
De plus, une fois la chaine dessinnée, elle est présente dans l'image et ne peut plus être modifiée.
Il faut réécrire dessus.

Mon site
0
angelblood Messages postés 46 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 19 mai 2011
17 nov. 2010 à 13:47
Oui sauf que si je veut mettre
e.Graphics.DrawString("Blabla", maFonte, Brushes.Gray, 137, 213) dans :
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        If e.X > 365 And e.Y > 224 And e.X < 432 And e.Y < 237 Then
            'la

        End If

        If e.X > 365 And e.Y > 256 And e.X < 432 And e.Y < 271 Then
            'la
        End If

        If e.X > 365 And e.Y > 289 And e.X < 432 And e.Y < 303 Then
            'la
        End If
    End Sub


Il me dit Graphics n'est pas un membre de "system.move..."

Voila merci :D
0

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

Posez votre question
angelblood Messages postés 46 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 19 mai 2011
17 nov. 2010 à 18:06
C'est bon problème résolu, il me suffit de prendre des label a la place des drawstring et de mettre le backcolor transparent voici mon code (pour le backcolor transparent) :
Label1.Parent = PictureBox1
        Label1.BackColor = Color.Transparent


Voila merci a vous
0
angelblood Messages postés 46 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 19 mai 2011
17 nov. 2010 à 18:24
Excuser moi sa ne marche pas --" ma form ne met pas mon label devant l'image lorsque je change d'onglet.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
17 nov. 2010 à 21:00
Bonjour,

Il faut que tu redessine ton image (ou au moins la chaine).

Pour éviter le scintillement, tu peux utiliser Me.Invalidate pour forcer le redessin.

Ensuite, tu peux mémoriser la position de la souris dans un attribut pour afficher en couleur ta chaine.

Mon site
0
angelblood Messages postés 46 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 19 mai 2011
18 nov. 2010 à 17:27
Merci mais tu aurai pas un exemple de code par ce que Me.invalide je ne connait pas du tout

Merci beaucoup
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
18 nov. 2010 à 22:24
Bonjour,

Me.Invalidate exécute les évènement Paint du controle.

Il te suffit donc de dessiner dans l'event Paint pour mettre à jour tes données à partir de cette méthode.

Mon site
0
angelblood Messages postés 46 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 19 mai 2011
20 nov. 2010 à 10:39
Merci mais comment faire pour changer les paramètre ? Je n'y arrive pas.

Merci.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
20 nov. 2010 à 12:55
Bonjour,

Quand la souris bouge, tu fais un Me.Invalidate et tu mets dans une variable la position de la souris.

Ensuite dans l'évènement Paint, tu redessine ton image et tu contrôle la position de la souris et tu mets les couleurs qui vont bien pour ton dessin de chaine.

Mon site
0
angelblood Messages postés 46 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 19 mai 2011
20 nov. 2010 à 17:27
tu redessine ton image
Elle se redessine grace a Me.invalidate, non ?
tu contrôle la position de la souris
Il faut que je recontrole dans l'événement Paint sauf que X et Y n'est pas un membre de 'System.Windows.Forms.PaintEventArgs'.

Merci
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
20 nov. 2010 à 18:56
Bonjour,

Ton dessin, tu le fais où ?
Si c'est dans une fonction/sub, appelle-la depuis l'event Paint de ta form ou de ton contrôle.

Pour la position de la souris, intercepte l'event MouseMove et mémorise la position de la souris dans une variable.

Mon site
0
angelblood Messages postés 46 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 19 mai 2011
20 nov. 2010 à 19:06
Je te donne mon code :
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        If e.X > 365 And e.Y > 224 And e.X < 432 And e.Y < 237 Then

        End If

        If e.X > 365 And e.Y > 256 And e.X < 432 And e.Y < 271 Then

        End If

        If e.X > 365 And e.Y > 289 And e.X < 432 And e.Y < 303 Then

        End If

    End Sub



    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim maFonte As New Font("Comic Sans MS", 9, FontStyle.Bold)
        Dim maFonte2 As New Font("Comic Sans MS", 7, FontStyle.Bold)
        'Dessiner l'image
        e.Graphics.DrawImage(My.Resources.Dom2, 99, 204)
        'Dessiner le texte "Coucou", avec maFonte, en noir, à la position (10,100)
        e.Graphics.DrawString("...", maFonte, Brushes.Gray, 137, 213)
        e.Graphics.DrawString("...", maFonte, Brushes.Gray, 137, 245)
        e.Graphics.DrawString("...", maFonte, Brushes.Gray, 137, 280)
        e.Graphics.DrawString("...", maFonte2, Brushes.WhiteSmoke, 366, 225)
        e.Graphics.DrawString("...", maFonte2, Brushes.WhiteSmoke, 366, 258)
        e.Graphics.DrawString("...", maFonte2, Brushes.WhiteSmoke, 366, 289)

    End Sub



Voila si tu peux me donner un exemple sa serait gentil car je ne comprend pas se que tu veut dire

Merci beaucoup
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
20 nov. 2010 à 19:45
Bonjour,

    Private mLastMousePos as point=new point(0,0)

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        mLastMousePos =new point(e.X, e.Y)
        Me.Invalidate
    End Sub



    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim maFonte As New Font("Comic Sans MS", 9, FontStyle.Bold)
        Dim maFonte2 As New Font("Comic Sans MS", 7, FontStyle.Bold)
        'Dessiner l'image
        e.Graphics.DrawImage(My.Resources.Dom2, 99, 204)
        'Dessiner le texte "Coucou", avec maFonte, en noir, à la position (10,100)
        e.Graphics.DrawString("...", maFonte, Brushes.Gray, 137, 213)
        e.Graphics.DrawString("...", maFonte, Brushes.Gray, 137, 245)
        e.Graphics.DrawString("...", maFonte, Brushes.Gray, 137, 280)

        If mLastMousePos.X > 365 And mLastMousePos.Y > 224 And mLastMousePos.X < 432 And mLastMousePos.Y < 237 Then
            e.Graphics.DrawString("...", maFonte2, Brushes.WhiteSmoke, 366, 225)
        Else
            e.Graphics.DrawString("...", maFonte2, Brushes.WhiteSmoke, 366, 225)
        End If

        If mLastMousePos.X > 365 And mLastMousePos.Y > 256 And mLastMousePos.X < 432 And mLastMousePos.Y < 271 Then
            e.Graphics.DrawString("...", maFonte2, Brushes.WhiteSmoke, 366, 258)
        Else
            e.Graphics.DrawString("...", maFonte2, Brushes.WhiteSmoke, 366, 258)
        End If

        If mLastMousePos.X > 365 And mLastMousePos.Y > 289 And mLastMousePos.X < 432 And mLastMousePos.Y < 303 Then
            e.Graphics.DrawString("...", maFonte2, Brushes.WhiteSmoke, 366, 289)
        Else
            e.Graphics.DrawString("...", maFonte2, Brushes.WhiteSmoke, 366, 289)
        End If
    End Sub


Ensuite, voir peut être avec Rectangle, il y a peut être un Contains ou similaire qui peut simplifier tes tests.

Mon site
0
angelblood Messages postés 46 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 19 mai 2011
21 nov. 2010 à 10:48
Merci beaucoup sa marche mais il y a un dernier probleme : Mon image de derière est redessiner a chaque fois que la souris bouge et sa fait une image qui clignote ^^". Y a t-il une facon pour quelle se dessine que la 1 ére fois ?

Merci beaucoup
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
21 nov. 2010 à 13:41
Bonjour,

Recherche des informations sur le "double buffering".

Mon site
0
angelblood Messages postés 46 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 19 mai 2011
21 nov. 2010 à 15:22
J'ai trouver cette source : Double buffering

J'ai essayer de l'adapter a mon code mais je n'ai pas reussi je ne comprend pas se qui ne va pas :
    ''' C'est le graphique avec lequelle on va dessiner dans un premier temps, puis afficher
    Private BufferredGraphic As BufferedGraphics

    ''' C'est l'objet qui permet d'allouer de la mémoire tampon pour stockage du bitmap de dessin
    Private CurrentContext As New BufferedGraphicsContext


#Region "Ouverture de la form"
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        BufferredGraphic = Me.CurrentContext.Allocate(Me.CreateGraphics(), Me.DisplayRectangle)
End sub


    Private Sub Dessin()

        'On dessine dans la mémoire
        BufferredGraphic.Graphics.DrawImage(My.Resources.Dofusm2, 99, 204)
        'Déclenche l'évenement OnPaint de la fenêtre
        Me.Form1_Paint(Me, New PaintEventArgs(Me.BufferredGraphic.Graphics, Me.DisplayRectangle))

    End Sub





    Private mLastMousePos As Point = New Point(0, 0)

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        mLastMousePos = New point(e.X, e.Y)
        Me.Invalidate()
    End Sub



    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim maFonte As New Font("Comic Sans MS", 9, FontStyle.Bold)
        Dim maFonte2 As New Font("Comic Sans MS", 7, FontStyle.Bold)
        'Dessiner l'image
        BufferredGraphic.Render()

        'Dessiner le texte "Coucou", avec maFonte, en noir, à la position (10,100)
        e.Graphics.DrawString("Boutique [ON] sur le site", maFonte, Brushes.Gray, 137, 213)
        e.Graphics.DrawString("Nouveau CMS sur le site.", maFonte, Brushes.Gray, 137, 245)
        e.Graphics.DrawString("Re-Ouverture du serveur Destyn'x", maFonte, Brushes.Gray, 137, 280)

        If mLastMousePos.X > 365 And mLastMousePos.Y > 224 And mLastMousePos.X < 432 And mLastMousePos.Y < 237 Then
            e.Graphics.DrawString("Plus d'infos...", maFonte2, Brushes.Blue, 366, 225)
        Else
            e.Graphics.DrawString("Plus d'infos...", maFonte2, Brushes.WhiteSmoke, 366, 225)
        End If

        If mLastMousePos.X > 365 And mLastMousePos.Y > 256 And mLastMousePos.X < 432 And mLastMousePos.Y < 271 Then
            e.Graphics.DrawString("Plus d'infos...", maFonte2, Brushes.Blue, 366, 258)
        Else
            e.Graphics.DrawString("Plus d'infos...", maFonte2, Brushes.WhiteSmoke, 366, 258)
        End If

        If mLastMousePos.X > 365 And mLastMousePos.Y > 289 And mLastMousePos.X < 432 And mLastMousePos.Y < 303 Then
            e.Graphics.DrawString("Plus d'infos...", maFonte2, Brushes.Blue, 366, 289)
        Else
            e.Graphics.DrawString("Plus d'infos...", maFonte2, Brushes.WhiteSmoke, 366, 289)
        End If
    End Sub


Voila si tu peux me dire se qui ne va pas !
Merci beaucoup
0
angelblood Messages postés 46 Date d'inscription samedi 6 novembre 2010 Statut Membre Dernière intervention 19 mai 2011
21 nov. 2010 à 15:22
J'ai trouver cette source : Double buffering

J'ai essayer de l'adapter a mon code mais je n'ai pas reussi je ne comprend pas se qui ne va pas :
    ''' C'est le graphique avec lequelle on va dessiner dans un premier temps, puis afficher
    Private BufferredGraphic As BufferedGraphics

    ''' C'est l'objet qui permet d'allouer de la mémoire tampon pour stockage du bitmap de dessin
    Private CurrentContext As New BufferedGraphicsContext



    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        BufferredGraphic = Me.CurrentContext.Allocate(Me.CreateGraphics(), Me.DisplayRectangle)
End sub


    Private Sub Dessin()

        'On dessine dans la mémoire
        BufferredGraphic.Graphics.DrawImage(My.Resources.Dofusm2, 99, 204)
        'Déclenche l'évenement OnPaint de la fenêtre
        Me.Form1_Paint(Me, New PaintEventArgs(Me.BufferredGraphic.Graphics, Me.DisplayRectangle))

    End Sub





    Private mLastMousePos As Point = New Point(0, 0)

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        mLastMousePos = New point(e.X, e.Y)
        Me.Invalidate()
    End Sub



    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim maFonte As New Font("Comic Sans MS", 9, FontStyle.Bold)
        Dim maFonte2 As New Font("Comic Sans MS", 7, FontStyle.Bold)
        'Dessiner l'image
        BufferredGraphic.Render()

        'Dessiner le texte "Coucou", avec maFonte, en noir, à la position (10,100)
        e.Graphics.DrawString("Boutique [ON] sur le site", maFonte, Brushes.Gray, 137, 213)
        e.Graphics.DrawString("Nouveau CMS sur le site.", maFonte, Brushes.Gray, 137, 245)
        e.Graphics.DrawString("Re-Ouverture du serveur Destyn'x", maFonte, Brushes.Gray, 137, 280)

        If mLastMousePos.X > 365 And mLastMousePos.Y > 224 And mLastMousePos.X < 432 And mLastMousePos.Y < 237 Then
            e.Graphics.DrawString("Plus d'infos...", maFonte2, Brushes.Blue, 366, 225)
        Else
            e.Graphics.DrawString("Plus d'infos...", maFonte2, Brushes.WhiteSmoke, 366, 225)
        End If

        If mLastMousePos.X > 365 And mLastMousePos.Y > 256 And mLastMousePos.X < 432 And mLastMousePos.Y < 271 Then
            e.Graphics.DrawString("Plus d'infos...", maFonte2, Brushes.Blue, 366, 258)
        Else
            e.Graphics.DrawString("Plus d'infos...", maFonte2, Brushes.WhiteSmoke, 366, 258)
        End If

        If mLastMousePos.X > 365 And mLastMousePos.Y > 289 And mLastMousePos.X < 432 And mLastMousePos.Y < 303 Then
            e.Graphics.DrawString("Plus d'infos...", maFonte2, Brushes.Blue, 366, 289)
        Else
            e.Graphics.DrawString("Plus d'infos...", maFonte2, Brushes.WhiteSmoke, 366, 289)
        End If
    End Sub


Voila si tu peux me dire se qui ne va pas !
Merci beaucoup
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
21 nov. 2010 à 15:34
Bonjour,

Ce n'est pas dans l'evenement Paint (Form1_Paint) qu'il faut dessiner, mais dans la Sub Paint (Private Sub Dessin() )

Mon site
0
Rejoignez-nous