ToolTip - Des fois ça marche, des fois...

Résolu
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 - 21 mars 2013 à 16:05
 Utilisateur anonyme - 27 mars 2013 à 19:56
Salut à tous,

Voila, dans mon appli (dévellopée sous VB2010 avec le FW3.5), j'affiche un ToolTip sur des sections d'un diagramme de Gantt (Panel)pour informer l’utilisateur de sa nature.

     Public Sub Panel_Pnt_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs)
        Try
            Dim cible As Panel = DirectCast(sender, Panel)
            Dim ToolTip = New System.Windows.Forms.ToolTip
            Dim ID As String = cible.Tag

            ToolTip.IsBalloon = True
            ToolTip.ToolTipTitle = "Info:"
            ToolTip.UseAnimation = True
            ToolTip.InitialDelay = 0
            ToolTip.UseFading = True
            ToolTip.SetToolTip(cible, "ID: " & cible.Tag & ChrW(13) & "Titre: " & ReadTittle(cible.Tag))
        Catch ex As Exception
            WriteLog("Error Panel_Pnt_MouseEnter: Function - " & System.Reflection.MethodBase.GetCurrentMethod().Name & " - " & Date.Now & " - " & ex.Message)
        End Try
    End Sub


Le soucis, est que cela fonctionne très bien sur ma machine qui est en Seven, mais pas sur les machines clients encore pour quelques mois sous XP Pro!

Zauriez-vous une idée?

Merci! ;)

Jimy

Pensez: Réponse acceptée
'**********************************************

32 réponses

jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
22 mars 2013 à 15:19
En effet, avec "IsBalloon = True", ce phénoméne provoquait l'affichage d'autant de ToolTip que de pixels que parcourait la sousris sur le control. J'ai donc rusé comme ceci:

 Public Sub Panel_Pnt_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs)
        Try
            If Not ToolTipDisplay Then
                Dim cible As Panel = DirectCast(sender, Panel)
                Dim ID As String = cible.Tag

                _ToolTip.SetToolTip(cible, "ID: " & cible.Tag & ChrW(13) & "Titre: " & ReadTittle(cible.Tag))
                ToolTipDisplay = True
            End If
        Catch ex As Exception
            WriteLog("Error Panel_Pnt_MouseEnter: Function - " & System.Reflection.MethodBase.GetCurrentMethod().Name & " - " & Date.Now & " - " & ex.Message)
        End Try
    End Sub

    Public Sub Panel_Pnt_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs)
        ToolTipDisplay = False
    End Sub





Jimy

Pensez: Réponse acceptée
'**********************************************
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
22 mars 2013 à 15:23
C'est aussi la raison pour laquelle je n'ai pas utilisé 'ToolTip.Show(...)', car l'affichage était catastrophique!

Jimy

Pensez: Réponse acceptée
'**********************************************
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
22 mars 2013 à 16:03
L'objet ToolTip gère automatiquement son affichage et sa disparition au survol du contrôle. Il est en aucun cas nécessaire de faire un "Show" ou un "Hide". Il sait tout seul quand il doit être affiché ou masqué.

Il est clair que si un Hide est fait sur MouseLeave, en mode "IsBalloon = True" le message disparaît juste après avoir était affiché.

Je vous conseil quand même de faire le "SetToolTip" uniquement lorsque le Tag du panel change.

S'il n'est pas amené à changer après sa création, en reprenant votre code précédent de création du panel, vous pourriez envisager de faire ceci :
Dim Panel_Pnt as Panel
Panel_Pnt = New Panel()
With Panel_Pnt
    .Name = "Panel_Pnt" & ID.ToString
    .Width = myrecordset.Item("Duree") + 1
    .Height = 25
    .Location = New Point(LocateX, -3)
    .BackColor = Color.White
    .BorderStyle = BorderStyle.FixedSingle
    .Tag = ID
    .Cursor = Cursors.Hand
    .BackgroundImageLayout = ImageLayout.Stretch

End With


  'ajout d'un gestionnaire d'événement click
  AddHandler Panel_Pnt.Click, AddressOf Panel_Pnt_Click
           
  'ajout du controle au formulaire
  Outils.FLP_WO_WPnt.Controls.Add(Panel_Pnt)
  
  'ajout du ToolTip
  _ToolTip.SetToolTip(Panel_Pnt, "ID: " & Panel_Pnt.Tag & ChrW(13) & "Titre: " & ReadTittle(Panel_Pnt.Tag) 

Du coup, plus besoin du "MouseEnter/Leave"
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
22 mars 2013 à 16:35
Merci pour cet exemple, mais il s'agit d'un diagramme de gantt constitué de plusieurs dizaines de panels, d'où l’utilisation du 'MouseEnter' au choix de l'utilisateur.




Jimy

Pensez: Réponse acceptée
'**********************************************
0

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

Posez votre question
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
22 mars 2013 à 16:45
Hooo! autant pour moi, je n'avais pas compris votre dernier message.
En effet, c'est bien plus pratique. Je le teste dés que possible et reviens vers vous pour dire si cela à réglé le problème.

MERCI! :)

Jimy

Pensez: Réponse acceptée
'**********************************************
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
22 mars 2013 à 16:52
Je comprends bien.

Mais le titre des panels est-il amené à changer une fois que le panel est ajouté au formulaire ?

La logique voudrait que le SetToolTip des panels soit fait lorsque le panel est créé (valeur initiale) et si l'utilisateur modifie le titre ou l'ID.

Le titre et l'ID ne change pas à chaque fois que l'utilisateur survol le panel avec la souris.

L'utilisateur peut-il modifier le titre ou l'ID (donc le tag des panels) ?

L'objet ToolTip n'a pas besoin de connaitre le message à afficher à chaque survol. Il suffit de lui paramétrer une seul fois ou de le modifier uniquement si celui ci change.
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
22 mars 2013 à 16:54
Hooo! autant pour moi, je n'avais pas compris votre dernier message.


Désolé pour le chevauchement de mon dernier message. Ne pas en tenir compte du coup
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
22 mars 2013 à 16:55
Bien, j'ai testé votre proposition, en effet les ToolTip se gère tout seuls, mais cela ne fonctionne toujours que sous Seven, pas d'affichage sous XP avec un 'IsBallon=True'


Jimy

Pensez: Réponse acceptée
'**********************************************
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
22 mars 2013 à 17:10
mais cela ne fonctionne toujours que sous Seven, pas d'affichage sous XP avec un 'IsBallon=True'


Il résiste, mais pas pour longtemps...

Pourriez vous essayer ceci :
Public Sub Panel_Pnt_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs)
   _ToolTip.Active = False
   _ToolTip.Active = True
End Sub


Pensez à rattacher l’évènement "MouseEnter" à la création des panel.
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
22 mars 2013 à 17:25
Sinon ma dernière cartouche sera de faire un petit tour du coté du registre du pc sous XP.

Dans la clé :
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]

il est possible d'ajouter (ou il existe) une valeur DWORD "EnableBalloonTips"
1 = BalloonTips autorisés
0 = BalloonTips bloqués
0
jimy neutron Messages postés 491 Date d'inscription mercredi 1 février 2006 Statut Membre Dernière intervention 18 novembre 2016 1
22 mars 2013 à 19:16
Je comprends bien.

Mais le titre des panels est-il amené à changer une fois que le panel est ajouté au formulaire ?

La logique voudrait que le SetToolTip des panels soit fait lorsque le panel est créé (valeur initiale) et si l'utilisateur modifie le titre ou l'ID.

Le titre et l'ID ne change pas à chaque fois que l'utilisateur survol le panel avec la souris.

L'utilisateur peut-il modifier le titre ou l'ID (donc le tag des panels) ?

L'objet ToolTip n'a pas besoin de connaitre le message à afficher à chaque survol. Il suffit de lui paramétrer une seul fois ou de le modifier uniquement si celui ci change.


Non, chaque panel créé correspond à un enregistrement d'une base SQL, su coup, l'ID est celui de l'enregistrement, et le titre le début du contenu d'un de ces items.

L'utilisateur qu'en a lui ne fait que les consulter.

Pour le registre, je ne pourrais voir cela que Lundi maintenant.

Encore merci! ;)

Jimy

Pensez: Réponse acceptée
'**********************************************
0
Utilisateur anonyme
27 mars 2013 à 19:56
je ne pourrais voir cela que Lundi maintenant
Lundi étant largement dépassé, je reviens sur ce fil car j'ai eu une idée.
Il est peut-être possible de se servir de Environment.OSVersion pour paramétrer ton 'tooltip'. Voir une discussion msdn ici.
0
Rejoignez-nous