Lorsque que l'on déplace une fenetre c'est souvant pour voir ce qu'il y a en dessous, mais où que l'on pose la fenetre elle cache quelque chose. Cette class permet de rendre partiellement transparente une fenetre pendant le temps du déplacement, elle redevient opaque si on la lache.
Cette fonction est totallement inutile donc indispensable.
Comment l'utiliser:
Copier le code de la class dans votre projet, puis dans la class de votre fenetre créé la class
private _Cls_ScreenOpac ClsScreen = new _Cls_ScreenOpac();
puis dans la fonction _Load de votre fenetre initialiser la class avec le pointeur de votre fenetre
ClsScreen.MaFenetre = this;
Comment ça marche:
Au moment où l'on initialise le pointeur de la fenetre, je détourne l'evenement LocationChanged pour détecter le déplacement de la fenetre, un Timer est créé dans la Class pour gérer l'evolution de la transparence ou de l'opacité.
Toute les X ms la fonction Gestion_Affichage regarde si le bouton de la souris est enfoncé si oui la fenetre est toujours en mouvement donc je fais évoluer ça transparence jusqu'a 40%, si le bouton n'est plus enfoncé j'inverse le processus pour rendre la fenetre opaque je coupe le timer apres 95%.
Amusez vous bien
Sephiro
Source / Exemple :
/// <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;
}
}
}
}
Conclusion :
Je n'ai pas mis de projet pour 20 lignes de code dans une Class, mais si le besoin s'en fait sentir je l'ajouterai, je ne parviens pas à faire une capture ecran avec la transparence, si j'y parviens j'ajouterai une image