Modifier l'opacité d'un formulaire au passage de la souris

Soyez le premier à donner votre avis sur cette source.

Vue 6 862 fois - Téléchargée 644 fois

Description

Vous connaissez certainement le logiciel de retouche Paint.net
Les boîtes à outils sont translucides, et deviennent opaques lorsque la souris passe dessus.
J'ai voulu recréer cet effet pour mon programme de cinétique chimique.

On se dit que c'est évident : il suffit de modifier la propriété Opacity de la form.
C'est ce que fait la première partie de ma source : à l'événement MouseEnter, on rend le formulaire opaque, et on le rend translucide lorsque la souris le quitte (événement MouseLeave).

Problème : lorsque la souris passe sur un contrôle (un bouton par exemple), cela déclenche l'événement MouseLeave !

J'ai trouvé une solution sur un forum anglophone, je la partage avec cette source.
J'utilise un Timer qui teste toutes les 100ms si la souris est au dessus du formulaire.
On fait ce test comme ceci :
If Me.ClientRectangle.Contains(PointToClient(Control.MousePosition)) = True Then .....

Et ça fonctionne !

J'en ai profité pour faire un effet de fondu lorsque la souris quitte le formulaire (on décrémente progressivement l'opacité)

Dernière remarque : pour ne pas avoir d'effet de "clignottement" noir, il faut mettre la propriété TransparencyKey sur une autre couleur que Transparent. Prenez une couleur qui n'apparaît pas, par exemple Fushia...

Conclusion :


Cette source est rapide, c'est juste pour illustrer la méthode expliquée précédemment.

J'espère qu'elle pourra être utile à quelqu'un...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
4
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
1 janvier 2012
2
En tout les cas gros merci à toi :p
Messages postés
96
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 avril 2009

Je suis d'accord, c'est mieux si on peut s'en passer.
Dans le cas de ma source, avec uniquement un bouton au milieu, ta méthode est meilleure.

Par contre, je ne vois pas d'utilisation particulière du CPU à cause du Timer. L'utilisation du processeur par le processus reste imperturbablement à 0%, même lorsque je bouge la souris par dessus la fenêtre...

J'ai utilisé un timer pour que ça fonctionne en toute circonstances.

Mais bon, libre à chacun d'adapter son code !
Messages postés
242
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
17 janvier 2018

Et bien personnellement je préfère toujours essayer de me passer des timers pour rendre le code 100% événementiel dans les programmes de ce genre.

Ce sont surtout des habitudes de programmation, bien que l'on puisse malgré tout reprocher aux timers de bouffer pas mal de CPU ^^
Messages postés
96
Date d'inscription
samedi 21 octobre 2006
Statut
Membre
Dernière intervention
25 avril 2009

Oui, d'accord... Mais si il y a encore d'autres contrôles ?
Le Timer a l'avantage de fonctionner tout le temps.

C'est si grave d'avoir mis un Timer ?? ;-)
A te lire j'ai l'impression que tu veux absolument t'en débarasser...
Messages postés
242
Date d'inscription
lundi 6 mars 2006
Statut
Membre
Dernière intervention
17 janvier 2018

dans ce cas pourquoi ne pas régler cela sur les événements mouseEnter/Leave de la picturebox? plus besoin de timer comme ça.
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.