begin process at 2008 08 21 14:48:05
1 229 428 membres
248 nouveaux aujourd'hui
14 263 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LABEL LINK TRÉS SIMPLE, SANS OCX NI RIEN


Information sur la source

Catégorie :Trucs & Astuces Niveau : Débutant Date de création : 20/02/2005 Date de mise à jour : 21/02/2005 11:57:23 Vu / téléchargé: 4 376 / 454

Note :
Aucune note

Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

Description

La facon la plus simple de faire un hyperlien avec un controle Label Uniquement.
J'ai trouvé plusieurs sources qui etaient des OCX ou controle utilisateurs, perso quand je fait un prog j'aime en deployer le moins possible....

Source

  • Option Explicit
  • Dim i As Integer
  • Private Sub Form_Load()
  • For i = 0 To Label1.Count - 1
  • Label1(i).ToolTipText = "Visiter " & Label1(i).Caption
  • Next
  • ' Met a jour l'info bulle pour chaque lien
  • End Sub
  • Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  • For i = 0 To Label1.Count - 1
  • Label1(i).FontUnderline = False ' Lorsque la souris passe au dessus de la
  • Next ' Form les liens ne sont plus soulignés
  • End Sub
  • Private Sub Label1_Click(Index As Integer)
  • With Label1(Index)
  • .FontUnderline = False ' Enleve le trait de soulignement lors du click
  • .ForeColor = vbRed ' Pour marqué en rouge les liens deja visités
  • End With
  • ' ### Action associé au click du lien
  • ' ### Si la propriété Tag est vide on lance le lien par la propriété Caption
  • ' ### Sinon on lance le lien avec la propriété Tag
  • If Label1(Index).Tag = "" Then
  • Shell "explorer " & Label1(Index).Caption, vbHide ' Lance Le lien avec la propriété Caption
  • Else
  • Shell "explorer " & Label1(Index).Tag, vbHide ' Lance Le lien avec la propriété Tag
  • End If
  • End Sub
  • Private Sub Label1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
  • For i = 0 To Label1.Count - 1 ' Boucle pour la totalité des controles
  • If i = Index Then ' Si la souris est sur ce controle
  • Label1(i).FontUnderline = True ' on le souligne
  • Else
  • Label1(i).FontUnderline = False ' ou on le "désouligne"
  • End If
  • Next
  • End Sub
  • Private Sub Label1_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
  • For i = 0 To Label1.Count - 1
  • Label1(i).FontUnderline = False ' Lorsque le clik de la souris est relaché
  • Next ' Les liens son désoulignés
  • End Sub
Option Explicit
Dim i As Integer

Private Sub Form_Load()

For i = 0 To Label1.Count - 1
   Label1(i).ToolTipText = "Visiter " & Label1(i).Caption
Next
            ' Met a jour l'info bulle pour chaque lien
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

For i = 0 To Label1.Count - 1
   Label1(i).FontUnderline = False  ' Lorsque la souris passe au dessus de la
Next                                ' Form les liens ne sont plus soulignés

End Sub

Private Sub Label1_Click(Index As Integer)

With Label1(Index)
   .FontUnderline = False   ' Enleve le trait de soulignement lors du click
   .ForeColor = vbRed       ' Pour marqué en rouge les liens deja visités
End With

' ### Action associé au click du lien
' ### Si la propriété Tag est vide on lance le lien par la propriété Caption
' ### Sinon on lance le lien avec la propriété Tag

If Label1(Index).Tag = "" Then
   Shell "explorer " & Label1(Index).Caption, vbHide    ' Lance Le lien avec la propriété Caption
Else
   Shell "explorer " & Label1(Index).Tag, vbHide        ' Lance Le lien avec la propriété Tag
End If

End Sub

Private Sub Label1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

For i = 0 To Label1.Count - 1   ' Boucle pour la totalité des controles
   If i = Index Then        ' Si la souris est sur ce controle
      Label1(i).FontUnderline = True    ' on le souligne
   Else
      Label1(i).FontUnderline = False   ' ou on le "désouligne"
   End If
Next

End Sub

Private Sub Label1_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

For i = 0 To Label1.Count - 1
   Label1(i).FontUnderline = False  ' Lorsque le clik de la souris est relaché
Next                                ' Les liens son désoulignés

End Sub

Conclusion

C'est tout simple , j'espere ca pourrat aider les debutants ;)
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

21 février 2005 11:57:23 :
MAJ : Le label lance maintenant l'URL et le lien ne reste plus souligné lorsque l'on click sur le label et que l'on relache le click en dehors de la feuille
  • signaler à un administrateur
    Commentaire de moustachu le 21/02/2005 09:36:35

    L'avantage d'un contrôle, c'est que tu peux réutiliser le code. Tu utilises un controle Label + du code perso, pourquoi ne pas utiliser un autre contrôle qui contiendrait ton code ?

    Si tu laisses appuyé sur le bouton de la souris et que tu relache le bouton une fois sorti de la feuille, ton lien reste sousligné.

    Tu pourrais également compléter en lançant réellement le lien.

    ++
    Moustachu

  • signaler à un administrateur
    Commentaire de marm0tte le 21/02/2005 11:22:01

    C'est sympa, mais je suis d'accord avec le moustachu ^^.

    Je voudrais juste savoir, c'est quoi le nom du cursor avec la main ? :$

  • signaler à un administrateur
    Commentaire de Danyz le 21/02/2005 11:39:45

    comment ca le nom ?
    il est dans le zip ( LabelLink/Curseur/Main.cur )

    Sinon je l'ai recuperé dans System32 , y'a plein de fichier qui le contiennent :)

    Pour Moustachu , merci de tes remarques constructives.
    pour le lien qui reste souligné, il suffit de placer le meme code dans l'evenement MouseUp du label que dans l'evenement MouseMove de la form :

    For i = 0 To Label1.Count - 1
       Label1(i).FontUnderline = False
    Next

    Tu as raison pour le controle en fait.
    Je vais mettre à jour la source dejà pour qu'il lance l'url et ta remarque ;)

    Merci !

  • signaler à un administrateur
    Commentaire de Saros le 21/02/2005 15:33:18

    Juste question d'optimisation... Quand ta souris quitte le label, ton programme parcourt tous les labels pour les déssouligner, alors qu'il n'y en a qu'un à faire.
    Pour 4 labels ça va encore, mais bon...
    Je te conseillerais plutôt d'enregistrer l'index du label survolé par la souris, puis de s'occuper de lui seulement après.

    Puis sinon, je préfère les OCX, c'est moins de code dans les modules du projet, et plus simple d'utilisation...

  • signaler à un administrateur
    Commentaire de Neo.balastik le 21/02/2005 16:55:06

    Disons que ce projet et valable pour un ou deux label sur un form, mais pas pour en faire un contrôle générique.  

    Aussi, l'événement Form_MouseMove du formulaire ne fonctionnera pas si le label et trop prêt d'un autre contrôle.  

  • signaler à un administrateur
    Commentaire de MadM@tt le 21/02/2005 22:10:06

    D'accord avec tous, c'est beaucoup mieux en controle car en 2 clics tu a ton Label link, alors que la tu te trimballe du code.
    Avant j'étais comme toi, beurk les OCX, mais en fait je trouve que c'est le pied du programmeur passke t'a rien à faire et pourtant c'est bien ton code, pas comme une dll que t'utilise et que t'a pas programmé toi meme...
    Enfin c'est un avis perso.

    Mais après toujours le meme problème dès qu'il faut faire des mouseover et mouseout... Toujours des bugs, le seul moyen de faire un truc qui marche bien c'est en utilisant les coordonées de la souris (sans parler du subclassing trop compliqué juste pour ça), mais coordonées de la souris = plus de calculs...

  • signaler à un administrateur
    Commentaire de Neo.balastik le 22/02/2005 09:05:00

    Une solution adéquate pour créer un événement MouseOver et MouseOut est d'utiliser conjointement les
    API GetWindowRect, GetCapture, ReleaseCapture et SetCapture et cela sans subclassing ni Timer.  Il faudra bien entendu gérer les événements dans le contrôle avec Event et RaiseEvent.

  • signaler à un administrateur
    Commentaire de MadM@tt le 22/02/2005 11:57:17

    Dit Neo.balastik tu connaitrais une source de ce dont tu parles, j'en ai jamais vu j'aimerais bien voir ce que ça donne.

  • signaler à un administrateur
    Commentaire de moustachu le 22/02/2005 12:08:17

    Je veux pas me faire de la puc mais c'est comme ça que je procède...
    http://www.vbfrance.com/code.aspx?id=28210

  • signaler à un administrateur
    Commentaire de FENETRES le 28/02/2005 18:14:34

    Effectivement, une autre méthode consiste à simuler un flux parallèle dans un contrôle personnalisé (voir ma dernière source). Cette solution évite d'intercepter un évènement de souris et permet de réutiliser le code source du composant.

  • signaler à un administrateur
    Commentaire de FENETRES le 28/02/2005 18:18:44

    Adresse de l'exemple utilisant un contrôle personnalisé :http://www.vbfrance.com/code.aspx?id=26671

  • signaler à un administrateur
    Commentaire de hobbydax le 23/11/2007 14:13:10

    Cela ne fonctionne pas pour les liens du type "http://www.iso.org/iso/fr/catalogue_detail?csnumber=23632"
    Il me renvoit l'erreur "could not find path 23632".

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS