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

VB.NET Discussion :

Picturebox, afficher du texte quand la souris "survole" un point [Débutant]


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Picturebox, afficher du texte quand la souris "survole" un point
    Bonjour,
    Je me demandais si c'etait possible de faire afficher des informations textes sur un point quand la souris est posé dessus dans une picturebox.
    Voila la "tête" de ce que j'ai fais : https://www.youtube.com/watch?v=1vBQ...ature=youtu.be
    Mais j'aimerais bien afficher l'ID et le numeros des points que je veux pour mieux interpreter les résultats. Je vais continuer de chercher si il y a un moyen. Mais si il y en a pas, si quelqu'un me previent ca m'éviterai de tourner en rond ^^' !
    Merci

    Edit : peut être avec l'outil tooltip, je place une tooltip sous au coordonée de chaqu'un de mes points ca pourrais marcher, mais ca risque d'être ultra crados non? jvais essayer ça déjà, je verrai bien si je garde ou pas.

    Edit 2 : Erf... J'arrive pas a placer le/la tooltip sur des coordonées qui bouge, faut que je trouve autre chose.

  2. #2
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Bonjour,
    J'arrive pas a regarder la vidéo (problème de proxi qui semble bloquer google au boulot, bref) mais j'ai eu la même interogation fût un temps pas si lointain.
    Ce que j'ai fait c'est que j'ai mis dans un coin de ma forme une case avec des labels, puis avec les événements correspondant (dans mon cas c'était cellenter parce que je travaillais sur un dgv, mais il doit y avoir un hover à la mode css qui existe) je changeais la valeur des labels.
    Expert en recherche google caféinomane

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Merci : Oui effectivement, dans la picturebox y a "mousehover" et "mousemove" jvais voir avec ça. Si ça me renvoi les coordonées de mon curseur c'est parfait, j'ai juste a les comparer avec les coordonées de mes points (que j'ai pas stockés u_u, je les calculaient en direct puis les oubliaient) !

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    private _point as system.Drawing.point

    sur mouseover
    _point = e.location
    pct.invalidate

    sur paint
    e.Graphics.Drawstring(e.location.tostring,e.location)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    Re
    Encore des videos....!!!
    C'est un forum ou on doit poster du code....pour rappel...
    J'arrive pas a placer le/la tooltip sur des coordonées qui bouge, faut que je trouve autre chose.
    Afficher un texte informatif (id,coord...) sur un point anime au survol de Souris me parait totalement debile ....!!!
    A moins que tu stoppes l'animation !!!

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par MABROUKI Voir le message
    Afficher un texte informatif (id,coord...) sur un point anime au survol de Souris me parait totalement debile ....!!!
    ce qui te parrait débile ne l'est peut etre pas pour le reste du monde
    c'est courant sur les graphiques par exemple
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par MABROUKI Voir le message
    Afficher un texte informatif (id,coord...) sur un point anime au survol de Souris me parait totalement debile ....!!!
    A moins que tu stoppes l'animation !!!
    Je me suis mal exprimer, les coordonnées ne bouge pas en fonction du temps, elles bougent quand je leur dit de bouger (je fais pivoter mon graphique de 0.05 rad par clic). mais elles sont fixe quand je veux afficher mon id/etc.

    Et pour la video, c'etait pour donner une idee de ce que j'avais, je trouve ca plus expressif que mon code qui commence a faire un peu de ligne... mon probleme n'est pas spécifique a mon code, j'avais besoin d'une direction pour pouvoir en ecrire du code :s.


    Je vais essayer ce que tu proposes Pol63, mais j'ai deux/trois truc à changer avant, ce que j'affiche est pas tout à fait juste...

    Citation Envoyé par Pol63 Voir le message
    private _point as system.Drawing.point
    Je comprend pas trop la difference entre private et dim quand je declare une variable. si je declare un variable avec dim ou private elle a la même "portée" non?
    D'après ce que j'ai lu c'est équivalent, mais il doit bien y avoir une difference quelque part non?

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    dim dans un membre on se doute qu'en fin de membre il n'existe plus, mais dim dans une classe je ne sais même pas si c'est public ou private, j'aurais dit public
    en général on s'interdit d'utiliser dim dans une classe pour justement que la portée soit explicite
    en lisant private ou public on ne se pose pas de question, dim si on ne sait pas on ne peut pas deviner ce que microsoft a choisit comme comportement par défaut
    il n'y a pas d'autre contre indication pour l'utilisation de dim si tu préfères dim tu peux l'utiliser quand même ^^


    et t'inquiète pour mabrouki qui a du se lever du mauvais pied une vidéo ca explique parfois mieux qu'un long texte
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Merci.
    Je suis sur le VB depuis 2 semaines, j'ai pas encore de préférence spécial sur quoi que ce soit, donc je vais essayer de prendre des bonnes habitudes !

    Pour afficher l'Id de mon point du graphique qui est survolé par la sourie, ce que je vais essayer, c'est quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sub form_mousemove
        _point = e.location
        for i=0 to MonNombreDePoint 'dans le graphique
            if Point_graphique(i).x-5<_point.X>point_graphique(i).x+5 and Point_graphique(i).Y-5<_point.Y>point_graphique(i).Y+5 then
                'j'affiche le nom du point sur lequel la sourie est
            end if
        next i

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    pour gagner quelques lignes de code, tu fais un new system.Drawing.Rectangle rectangle autour de ton point
    puis
    ptProches = (from pt in points where monrect.contains(pt) select pt)


    et concernant le mécanisme de dessin de windows forms :
    les controles se dessinent chacun leur tour dans l'event paint
    quand on modifie une propriété les controles appelle me.invalidate pour demander un redessin (le framework est codé en .net)
    invalidate fait que paint va être rappelé donc, et il y d'autres choses qui font ca, donc l'event paint peut etre appelé souvent
    quand on dessine sur un controle ailleurs que dans son event paint, lors du prochain paint ce qu'on a dessiné disparait donc
    c'est pour ca que sur mousemove il faut setter une variable privée puis appeler invalidate, et dans le paint traiter cette variable privée pour savoir quoi dessiner
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    Re

    Il y a trente six milles facons d'operer ...tout depend comment se presente ton fameux class graphique...
    En voici une :

    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
    31
    32
    33
    34
    35
    36
    37
    Public Class Form1
        Private pg As Point_Graphique
        Private pgs As New List(Of Point_Graphique)
        Private rnd As New Random
        Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            Me.DoubleBuffered = True
        End Sub
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            For i As Integer = 1 To 20
                pg = New Point_Graphique(New Point(rnd.Next(50, 400), rnd.Next(50, 400)), "item" + i.ToString)
                pgs.Add(pg)
            Next
     
            Me.Invalidate()
        End Sub
     
        Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
            Dim gr As Graphics = e.Graphics
            gr.Clear(Color.White)
            For Each p As Point_Graphique In pgs
                p.Draw(gr)
            Next
        End Sub
     
        Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
            Dim ptCursor As Point = e.Location
            For Each p As Point_Graphique In pgs
                p.PosCursor = e.Location
            Next
            Me.Invalidate()
        End Sub
    End Class
    bon code.....

    OUPS !!!
    j'ai oublie l'essentiel le class graphique:
    Tant pis pour moi et Ramadan le voici:
    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
    31
    32
    33
    34
    Public Class Point_Graphique
        Private w As Single = 5
        Private h As Single = 5
        Private Rect As Rectangle
        Public Property Position As Point
        Public Property ID As String = String.Empty
        Public Property PosCursor As New Point(0, 0)
        Public Property Information As String = "Information"
        Private fnt As New Font("Arial", 12.0F)
        Private br As New SolidBrush(Color.Red)
        Public Sub New()
            Rect = New Rectangle(0, 0, 5, 5)
        End Sub
        Public Sub New(ByVal pt As Point, ByVal pid As String)
            Me.New()
            Position = pt
            ID = pid
            Rect = New Rectangle(pt.X - w / 2, pt.Y - h / 2, w, h)
        End Sub
     
        Public Function IsHovered() As Boolean
            If Rect.Contains(PosCursor) Then
                Return True
            End If
            Return False
        End Function
        Public Sub Draw(ByVal gr As Graphics)
            gr.DrawEllipse(Pens.Blue, Rect)
            If Me.IsHovered() Then
                gr.DrawString(ID, fnt, br, Me.Position)
            End If
     
        End Sub
    End Class
    je mets ca sur le compte du Ramadan mais il a bon dos pour moi et beaucoup de mes compatriotes...
    bon code...

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Merci !
    Ca marche bien mieux que mon truc !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/04/2007, 15h26
  2. [W3C] afficher un commentaire quand la souris au dessus d'une image
    Par 18Marie dans le forum Balisage (X)HTML et validation W3C
    Réponses: 14
    Dernier message: 21/08/2006, 09h31
  3. [C#-PictureBox] Afficher un texte verticalement...
    Par Geolem dans le forum Windows Forms
    Réponses: 4
    Dernier message: 11/04/2006, 14h03

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