0/5 (5 avis)
Snippet vu 13 680 fois - Téléchargée 19 fois
/// <summary> /// Class permettant de rendre transparente (partiellement) /// une fenetre en cas de déplacement de celle ci. /// </summary> public class _Cls_ScreenOpac { private Form Ptr_Screen = null; // ----- Pointeur sur la fenetre à géré private System.Windows.Forms.Timer Timer_Opacity; // ----- Creation d'une variable de type Timer private int Sens = 0; // ----- Sens du mouvement opaque si Positif devient transparent si négatif devient opaque public Form MaFenetre { get {return Ptr_Screen;} set { Ptr_Screen = value; // ----- Détourner l'evenement "Location Change" c'est à dire que la fenetre est en mouvement Ptr_Screen.LocationChanged += new System.EventHandler(this.MoveScreen); // ----- Creation d'un Timer pour la gestion // ----- de la transparence progressive. Timer_Opacity = new System.Windows.Forms.Timer(); Timer_Opacity.Interval = 50; // ----- 0.1 seconde par defaut Timer_Opacity.Enabled = false; // ----- Non actif pour le moment Timer_Opacity.Tick += new EventHandler(Gestion_Affichage); // ----- Fonction executé par le timer } } private void Gestion_Affichage(object sender, EventArgs e) { if (Ptr_Screen == null) return; // ----- Etat du bouton MouseButtons mbs = Control.MouseButtons; if ((mbs & MouseButtons.Left) == 0) // ----- Le bouton est relaché Sens = -1; // ----- Partiellement transparent if ((Ptr_Screen.Opacity < 0.4f) && (Sens >0)) return; // ----- Totallement opaque if ((Ptr_Screen.Opacity > 0.95f)&& (Sens <0)) { Timer_Opacity.Enabled = false; // ----- Stop le timer Ptr_Screen.Opacity = 1; return; } Ptr_Screen.Opacity = Ptr_Screen.Opacity - (0.1f * Sens); return; } private void MoveScreen(object sender, EventArgs e) { // ----- le bouton gauche est cliqué MouseButtons mbs = Control.MouseButtons; if ((mbs & MouseButtons.Left) != 0) {// ----- Le mouvement de la fenetre est en cours et la souris a le bouton gauche actif if (Timer_Opacity.Enabled == false) { // -----Si le Timer n'est pas actif Timer_Opacity.Enabled = true; Sens = 1; } } } }
15 juil. 2010 à 09:42
4 sept. 2007 à 13:23
Continue à nous faire des choses si sympa!
3 sept. 2007 à 12:10
Tout d'abord bravo pour cette source simple et du plus bel effet.
Petite question quand même : quand on attache un gestionnaire d'évènement localisé dans une classe externe de la classe qui génère l'évènement, il me semble avoir lu quelque part, qu'il fallait absolument détacher le gestionnaire manuellement pour ne pas grignoter des ressources (le ramasse miette ne peut plus ramasser) ?
29 août 2007 à 10:47
29 août 2007 à 10:18
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.