begin process at 2010 02 09 19:27:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > RENDRE UNE FENETRE TRANSPARENTE EN CAS DE DÉPLACEMENT DE CELLE CI PAR L'UTILISATEUR

RENDRE UNE FENETRE TRANSPARENTE EN CAS DE DÉPLACEMENT DE CELLE CI PAR L'UTILISATEUR


 Information sur la source

 Description

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

  • /// <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;
  • }
  • }
  • }
  • }
/// <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


 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) NOTIFICATIONS DANS UN DELEGATE ASYNCHRONE par olivieram2
Source avec Zip Source avec une capture Source .NET (Dotnet) PIXEL SHADER - CRÉATION, UTILISATION, ET BINDING par yoannd
Source avec Zip Source avec une capture Source .NET (Dotnet) UITYPEEDITOR HACKING, PROPERTYGRID ET LISTVIEW CONFIGURABLES... par gourky
Source avec Zip Source .NET (Dotnet) CONVERTION D'UNE IMAGE EN G-CODE, GRAVURE CNC par gourky
Source avec Zip Source .NET (Dotnet) CAROUSEL EN WPF (USERCONTROL) par CoolSpirit

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) DOCK CIRCULAIRE AVEC EFFET , AVEC TRAITEMENT IMAGE ET TRANSP... par NetWedge
Source avec Zip Source .NET (Dotnet) [DÉBUTANTS] ANIMATION DES FENETRES, CHARME SPÉCIALE POUR VOT... par boutemine
Source avec Zip Source avec une capture Source .NET (Dotnet) ILLUSION - TEXTURES D'OPACITÉ VARIABLE (OPENGL) par Zap
Source avec Zip Source .NET (Dotnet) OPACITE ET SAUVEGARDE DE BOITE DE TEXT par neogally
Source avec Zip Source .NET (Dotnet) FENETRE TRANSPARENTE par omi

Commentaires et avis

Commentaire de sebmafate le 29/08/2007 10:18:36 administrateur CS

Idée intéressante... mais je ne suis pas pour l'utilisation d'un Timer. J'aurais préféré un hook... c'est plus solide et moins consommateur de ressource.

Commentaire de sephiro le 29/08/2007 10:47:59

D'accord avec toi mais je n'ai pas voulu compliquer le code avec une gestion Hook, le timer étant actif quelques secondes.

Commentaire de LoicBerthollet le 03/09/2007 12:10:20

Bonjour.
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) ?

Commentaire de Pedrosa le 04/09/2007 13:23:43

Bravo, très belle idée...
Continue à nous faire des choses si sympa!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Transparence d'une fenetre via une autre. [ par bigflo93 ] Bonjour,Je cherche de l'aide sur la transparence d'un Form via un autre Form.J'ai un Form avec un menu Option dans le mainMenu.Lorsque je clique dessu Probleme multithreading Invoke etc. [ par tarkil ] Bonjour,J'ai un petit problème et j'espere que quelqu'un pourra m'aider.Je suis dans ma fenetre principale.Je lance un thread A.Depuis ce thread A, je empeché le fermeture d'une fenetre [ par Thanos_the_yopper ] j'ai un événement form.Closed sur un window.form, et je voudrais que si certaine condition ne sont pas respecté, la fenetre ne soit pas fermé, est-ce ouverture d'une fenetre dans une autre [ par Thanos_the_yopper ] j'aurais voulu pouvoir ouvrir des fenetres window.form à l'interieur d'une autre, qui serait la fenetre principale du projet en gros.un peu comme dans ouverture d'une fenetre de dialogue et récupération de données [ par Thanos_the_yopper ] je voudrais ouvrir une fenètre à partir d'une autre (ça je sais faire), que la fenètre ouverte bloque celle appelante (que tant que la fenetre fille e [C#] heritage [ par zebulix131 ] bonsoir a touspourriez vous m'indiquer ou puis je trouver un exemple simple d'une fenetre qui herite d'une autre . Exemple l'image principale avec 2 b ouverture d'une fenetre en pleine écran [ par Thanos_the_yopper ] en fait, j'ai une fenetre qui s'ouvre dans une autre (fenetre Mdi tout ça) et j'aurais voulu que celle qui s'ouvre à l'intérieur de l'autre soit en pl Communication inter-Fenetre (MDI Child vers Parent) [ par Neptune84 ] Je voudrais faire la chose suivante :WinFormPrinc est la fenetre Parent avec un menu menuItem6. Ce menu ouvre (Création) une fenetre MessageUn. Le pro Acces multi fenetre? [ par mxplr ] Hello tt le monde!Bon voila jannonce deja, je suis debutant en C# et japprends un peu seul. Voila pr resumer mon pblm de facon tres simple, g 2 fenetr Help Comment je peux fermer une fenetre en c# [ par dib.fred ] cherche a fermer une form en c# .pouvez vous me donner un tuyaux


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales