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 / Exemple :
// 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.
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.