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 598 / 472

Note :
Aucune note

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

Description

Cliquez pour voir la capture en taille normale
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 ;)
 

Fichier Zip

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

Historique

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

Commentaires et avis

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



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,406 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.