begin process at 2010 02 10 05:45:40
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Astuces

 > THREAD, COMPOSANTS DYNAMIQUES, ASTUCES DE WINFORM

THREAD, COMPOSANTS DYNAMIQUES, ASTUCES DE WINFORM




 Description

Cliquez pour voir la capture en taille normale
C'est un petit Soft qui permet d'obtenir un effet d'alpha sur des boutons. J'ai utiliser des thread pour réaliser l'effet et quelque petit manipulation d'évènements et de composants.

Pratique pour comprendre les thread et donc le multi-tâche ainsi que les objets dynamiques.

Source

  • // Source de la classe CreateButon
  • using System;
  • using System.Collections.Generic;
  • using System.ComponentModel;
  • using System.Drawing;
  • using System.Text;
  • using System.Windows.Forms;
  • using System.Threading;
  • namespace WindowsApplication1
  • {
  • class CreateButton
  • {
  • private int Largeur; // Largeur Bouton
  • private int Hauteur; // Hauteur Bouton
  • private int PositionX; // Position de départ X du bouton
  • private int PositionY; // Position de départ Y du bouton
  • private int Espacement; // Espacement entre les boutons
  • private int NombreDeBoutons; // Le nombre de boutons que l'on veut créer
  • // L'effet est plus beau quand la couleur de fond et le blanc et
  • // la couleur de fond de l'effet une couleur foncée
  • private Color CouleurFond; // Couleur de fond de base du bouton
  • private Color CouleurFondEffet; // Couleur de fond de l'effet du bouton
  • private Color CouleurTexte; // Couleur du texte de base du bouton
  • private Color CouleurTexteEffet; // Couleur du texte de l'effet du bouton
  • private int VitesseEffet; // Vitesse de l'effet
  • private int Decrement; // Le pas à pas de l'alpha
  • string NomBouton; // Le nom du bouton
  • string TexteBouton; // Le texte du bouton
  • Form FormParent; // La form sur la quelle on veut afficher les boutons
  • EventHandler CliqueSurBouton; // L'évènements des boutons
  • public CreateButton(int largeur, int hauteur, int positionX, int positionY, int espacement, int nombreDeBoutons, Color couleurFond, Color couleurTexte, Color couleurFondEffet, Color couleurTexteEffet, int vitesseEffet, string nomBouton, string texteBouton, Form formulaireParent, EventHandler cliqueSurBouton)
  • {
  • // Récupération des paramètres du constructeur
  • Largeur = largeur;
  • Hauteur = hauteur;
  • PositionX = positionX;
  • PositionY = positionY;
  • Espacement = espacement;
  • CouleurFond = couleurFond;
  • CouleurFondEffet = couleurFondEffet;
  • CouleurTexte = couleurTexte;
  • CouleurTexteEffet = couleurTexteEffet;
  • VitesseEffet = vitesseEffet;
  • Decrement = 30;
  • NomBouton = nomBouton;
  • TexteBouton = texteBouton;
  • FormParent = formulaireParent;
  • CliqueSurBouton = cliqueSurBouton;
  • NombreDeBoutons = nombreDeBoutons;
  • }
  • public void Creer()
  • {
  • // On crée les boutons et on les ajoutes à la form qu'on
  • // a passé en paramètres
  • for (int i = 0; i < NombreDeBoutons; i++)
  • {
  • Button LeBouton = new Button();
  • LeBouton.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
  • LeBouton.Size = new System.Drawing.Size(Largeur, Hauteur);
  • LeBouton.Location = new System.Drawing.Point(PositionX, ((Hauteur + Espacement) * i) + PositionY);
  • LeBouton.Name = NomBouton + i;
  • LeBouton.TabIndex = 0;
  • LeBouton.Text = TexteBouton + " " + (i + 1);
  • LeBouton.BackColor = CouleurFond;
  • LeBouton.ForeColor = CouleurTexte;
  • LeBouton.MouseLeave += new System.EventHandler(this.button_MouseLeave);
  • LeBouton.Click += new System.EventHandler(CliqueSurBouton);
  • LeBouton.MouseEnter += new System.EventHandler(this.button_MouseEnter);
  • FormParent.Controls.Add(LeBouton);
  • }
  • }
  • private void button_MouseEnter(object sender, EventArgs e)
  • {
  • Button Bouton = (Button)sender; // On récupère le bouton
  • ChangeAlpha(Bouton, 255); // Appel de la méthode qui permet de changer la couleur et l'alpha
  • Bouton.ForeColor = CouleurTexteEffet; // On Change la couleur du texte du bouton
  • }
  • private void button_MouseLeave(object sender, EventArgs e)
  • {
  • Button btnSelect = (Button)sender; // On récupère le bouton
  • // On instancie un nouveau thread pour pas freezer la form au
  • // de l'application de l'effet.
  • // ParameterizedThreadStart permet de passer un paramètre au moment
  • // de l'appel de la méthide Start
  • // Effet est la tâche que l'on veut appeler
  • Thread tr = new Thread(new ParameterizedThreadStart(Effet));
  • tr.Start(sender); // Appel de la tâche
  • }
  • private void Effet(object sender)
  • {
  • // sender est le paramètre que l'on passe. Dans notre cas
  • // le bouton
  • Button btnSelect = (Button)sender; // On récupère le bouton
  • btnSelect.ForeColor = CouleurTexteEffet; // Change la couleur du texte
  • for (int i = 255; i >= 0; i -= Decrement) // Boucle qui va décrémenter l'alpha
  • {
  • ChangeAlpha(btnSelect, i); // Appel de la méthode qui permet de changer la couleur et l'alpha
  • Thread.Sleep(VitesseEffet); // On attend un petit coup
  • }
  • btnSelect.ForeColor = CouleurTexte; // On remet la bonne couleur de texte
  • btnSelect.BackColor = CouleurFond; // On remet la bonne couleur de fond
  • }
  • private void ChangeAlpha(object sender, int alpha)
  • {
  • Button btnSelect = (Button)sender; // On récupère le bouton
  • // On défini la nouvelle couleur avec l'alpha qui diminue
  • btnSelect.BackColor = Color.FromArgb(alpha, CouleurFondEffet.R, CouleurFondEffet.G, CouleurFondEffet.B);
  • }
  • }
  • }
// Source de la classe CreateButon

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsApplication1
{
    class CreateButton
    {
        private int Largeur; // Largeur Bouton
        private int Hauteur; // Hauteur Bouton
        private int PositionX; // Position de départ X du bouton
        private int PositionY; // Position de départ Y du bouton
        private int Espacement; // Espacement entre les boutons
        private int NombreDeBoutons; // Le nombre de boutons que l'on veut créer

        // L'effet est plus beau quand la couleur de fond et le blanc et
        // la couleur de fond de l'effet une couleur foncée
        private Color CouleurFond; // Couleur de fond de base du bouton
        private Color CouleurFondEffet; // Couleur de fond de l'effet du bouton
        private Color CouleurTexte; // Couleur du texte de base du bouton
        private Color CouleurTexteEffet; // Couleur du texte de l'effet du bouton

        private int VitesseEffet; // Vitesse de l'effet
        private int Decrement; // Le pas à pas de l'alpha

        string NomBouton; // Le nom du bouton
        string TexteBouton; // Le texte du bouton

        Form FormParent; // La form sur la quelle on veut afficher les boutons

        EventHandler CliqueSurBouton; // L'évènements des boutons

        public CreateButton(int largeur, int hauteur, int positionX, int positionY, int espacement, int nombreDeBoutons, Color couleurFond, Color couleurTexte, Color couleurFondEffet, Color couleurTexteEffet, int vitesseEffet, string nomBouton, string texteBouton, Form formulaireParent, EventHandler cliqueSurBouton)
        {
            // Récupération des paramètres du constructeur
            Largeur = largeur;
            Hauteur = hauteur;
            PositionX = positionX;
            PositionY = positionY;
            Espacement = espacement;
            CouleurFond = couleurFond;
            CouleurFondEffet = couleurFondEffet;
            CouleurTexte = couleurTexte;
            CouleurTexteEffet = couleurTexteEffet;
            VitesseEffet = vitesseEffet;
            Decrement = 30;
            NomBouton = nomBouton;
            TexteBouton = texteBouton;
            FormParent = formulaireParent;
            CliqueSurBouton = cliqueSurBouton;
            NombreDeBoutons = nombreDeBoutons;
        }
        public void Creer()
        {
            // On crée les boutons et on les ajoutes à la form qu'on
            // a passé en paramètres
            for (int i = 0; i < NombreDeBoutons; i++) 
            {
                Button LeBouton = new Button();
                LeBouton.FlatStyle = System.Windows.Forms.FlatStyle.Popup;
                LeBouton.Size = new System.Drawing.Size(Largeur, Hauteur);
                LeBouton.Location = new System.Drawing.Point(PositionX, ((Hauteur + Espacement) * i) + PositionY);
                LeBouton.Name = NomBouton + i;
                LeBouton.TabIndex = 0;
                LeBouton.Text = TexteBouton + " " + (i + 1);
                LeBouton.BackColor = CouleurFond;
                LeBouton.ForeColor = CouleurTexte;
                LeBouton.MouseLeave += new System.EventHandler(this.button_MouseLeave);
                LeBouton.Click += new System.EventHandler(CliqueSurBouton);
                LeBouton.MouseEnter += new System.EventHandler(this.button_MouseEnter);
                FormParent.Controls.Add(LeBouton);
            }
        }
        private void button_MouseEnter(object sender, EventArgs e)
        {
            Button Bouton = (Button)sender; // On récupère le bouton
            ChangeAlpha(Bouton, 255); // Appel de la méthode qui permet de changer la couleur et l'alpha
            Bouton.ForeColor = CouleurTexteEffet; // On Change la couleur du texte du bouton
        }
        private void button_MouseLeave(object sender, EventArgs e)
        {
            Button btnSelect = (Button)sender; // On récupère le bouton
            // On instancie un nouveau thread pour pas freezer la form au
            // de l'application de l'effet.
            // ParameterizedThreadStart permet de passer un paramètre au moment
            // de l'appel de la méthide Start
            // Effet est la tâche que l'on veut appeler
            Thread tr = new Thread(new ParameterizedThreadStart(Effet));
            tr.Start(sender); // Appel de la tâche
        }
        private void Effet(object sender)
        {
            // sender est le paramètre que l'on passe. Dans notre cas
            // le bouton
            Button btnSelect = (Button)sender; // On récupère le bouton
            btnSelect.ForeColor = CouleurTexteEffet; // Change la couleur du texte
            for (int i = 255; i >= 0; i -= Decrement) // Boucle qui va décrémenter l'alpha
            {
                ChangeAlpha(btnSelect, i); // Appel de la méthode qui permet de changer la couleur et l'alpha
                Thread.Sleep(VitesseEffet); // On attend un petit coup
            }
            btnSelect.ForeColor = CouleurTexte; // On remet la bonne couleur de texte
            btnSelect.BackColor = CouleurFond; // On remet la bonne couleur de fond
        }
        private void ChangeAlpha(object sender, int alpha)
        {
            Button btnSelect = (Button)sender; // On récupère le bouton
            // On défini la nouvelle couleur avec l'alpha qui diminue
            btnSelect.BackColor = Color.FromArgb(alpha, CouleurFondEffet.R, CouleurFondEffet.G, CouleurFondEffet.B);
        }
    }
}

 Conclusion

L'effet n'est pas super si on bouge rapidement la souris. Si vous réussissez à l'optimiser je suis prenant.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) BACKGROUNDWORKER
Source avec Zip Source avec une capture Source .NET (Dotnet) GDI GRAPHICS DEVICE INTERFACE

 Sources de la même categorie

Source avec une capture Source .NET (Dotnet) AJOUTER DES BYTES À UN EXECUTABLE par t0fx
Source .NET (Dotnet) COPIER/ COLLER DATAGRID (COPY/PASTE) par jamesbidon
Source avec Zip Source .NET (Dotnet) MECANISME DE SYNCHRONISATION DE THREAD - MONITOR, MUTEX, SEM... par jesusonline
Source .NET (Dotnet) EVENTHANDLERS GÉNÉRIQUES par ricklekebekoi
Source avec Zip Source .NET (Dotnet) TRAITER UN FOREACH EN PARALLÈLE par maitredede

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) CALCUL D'EMPREINTES DE FICHIERS par lex35
Source .NET (Dotnet) EACHPARALLEL par SoaR245
Source avec Zip Source avec une capture Source .NET (Dotnet) CONTROLER L'UTILISATION DES COMPOSANTS VISUELS SUIVANT LA VE... par Willi
Source avec Zip Source avec une capture Source .NET (Dotnet) PANNEAUX DYNAMIQUES (MENU ASCENSSEUR) par Robert33
Source avec Zip Source avec une capture Source .NET (Dotnet) COMPOSANT BOUTONS AVEC REFLETS par yodaben

Commentaires et avis

Commentaire de Nikoui le 20/12/2007 19:31:33

L'effet est plutôt sympa, par contre c'est dommage d'avoir codé ça dans une seul classe, faite uniquement pour afficher ce que tu montres dans ton application "démo". Cela aurai été plus interressant de proposer un controle "Button" réalisant cet effet alpha.

Commentaire de dadamagouil le 21/12/2007 19:43:38

Ouai t'as raison un bouton avec déjà toutes ces options ce serait super. J'y avais pas penser. Merci pour le conseil. T'aurais gérer comment l'effet entre plusieurs bouton ? Parce que l'effet dépend d'un certain nombre de boutons donc il y aurait fallut ajouter du code dans le formulaire, pas super. Tu vois une autre technique ???

Commentaire de Nikoui le 21/12/2007 21:45:06

Ben pour moi chaque bouton peut être autonome : lorsqu'il perd le focus, tu lance l'effet graphique (peut importe qu'il y ai d'autres boutons ou pas)

Commentaire de dadamagouil le 22/12/2007 16:11:32

Ouai c'est vrai. Bon je pense que après libre à n'importe qui de faire n'importe quoi.

Commentaire de Julien237 le 24/12/2007 08:52:49

Ou bien alors tu ajoute une propriété de déphasage sur ton bouton, et lorsque l'utilisateur les crée, il configure ce déphasage comme il le veut.
Le bouton s'anime en suite selon un temps de référence (DateTime.Now par exemple) + le déphasage.

Commentaire de dadamagouil le 27/12/2007 13:46:04

Oui ça peut être pas mal ça.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Evenement sur un bouton dynamique [ par matlocker ] bonjour,Je suis tout nouveau en c# et je veux gerer evenement click sur un bouton cr&#233;&#233; dynamiquement. Mais comment faire ?Je declare mon bou Composant button [ par scortex84 ] Bonjour,Je souhaite créer un composant "bouton" personalisé avec par défaut un type flat, une image, et une couleur bien spécifique. Tout ceci pour m' Exécution Dynamique [ par tmcuh ] Bonjour suite à un projet j'aurais aimé connaitre la meilleur technique pour exécuter du code dynamiquement. J'ai trouvé un bout de code me permettan Ajouter un composant en clickant sur un bouton [ par ravomavain ] Bonjour à tous,J'aimerais ajouter une imge quand on click sur un bouton mias que l'on puisse en ajjouter à l'infinie.Quelequ'un pourait-il m'aiderMerc bouton police dynamique [ par elfourbos ] Bonjour,J'ai appris directement la programmation par le technique et maintenant jme rend compte que les petites broutilles sont aussi dur que les gran Rotation de bouton [ par LordBob ] Bonsoir a tous,voila en fait je cherche un composant pour mon application mais étant donnée que je ne le trouve pas, je poste un message dans le forum appel de form dynamique.... [ par parlaciel ] bonjour à tous!alors je vous expose mon problème qui va certainement vous paraitre balot....Je crée une form à chaque clic sur un bouton.Mais les form Gif + Thread [ par emmanuel9 ] Bonjour &#224; tous, J'ai une application qui poss&#232;de un bouton exporter et les traitement effectu&#233; lors de l'appui sur ce bouton gele l'app clavier et bouton [ par Geometre15 ] Bonjour!Voici mon probleme : j'utilise un thread dans une fenetre. Ce thread me permet de d&#233;tecter l'appui sur une touche, comme les fleches par PrintPreviewDialog [ par Gabberzorus ] Salut,Je voudrais savoir si l'utilisateur clique sur le bouton imprimer de mon composant PrintPreviewDialog. Est-ce possible? Si oui comment? Quelle e


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,749 sec (3)

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