IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Faire clignoter une fenetre windows form


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Faire clignoter une fenetre windows form
    Bonjour tout le monde,
    je voulais mettre en place une application de chat serveur/client. J'ai voulu ajouter une methode me permettant de faire clignoter une fenetre reduite ou inactive lors de reception d'un message ou qu'un nouveau client vient de se connecter sur le chat.
    j'en'ai cherché sur l'internet et j'ai trouvé le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    using System.Runtime.InteropServices; 
     
    private bool allowBlink = false;
     
     [DllImport("user32.dll")]
     
            static extern int FlashWindow
     
            (
     
                int hwnd,
     
                int bInvert
     
            );
     
            //Sert à faire clignoter la fenêtre
     
            private void Flash()
            {
     
                while (true)
                {
     
                    if (allowBlink)
                    {
     
                        FlashWindow((int)this.Handle, 1);
     
                        Thread.Sleep(1000);
     
                    }
     
                    else
                    {
     
                        Thread.CurrentThread.Abort();
     
                    }
     
                }
     
            }
     
            //La fenêtre ne peut clignoter que si elle n'est pas active
     
            void StartBlink(object sender, System.EventArgs e)
            {
     
                allowBlink = true;
     
            }
     
            void StopBlink(object sender, System.EventArgs e)
            {
     
                allowBlink = false;
     
            }
    mais ca ne marche pas.

    Si quelqu'un peut m'aider,je lui serai reconnaissant.

    Merci de votre consideration.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Ça veut dire quoi "ça marche pas" ? il y a une erreur ? si oui, quelle erreur ?

    Où as-tu mis ce code ? Il faut le mettre dans le code-behind de la fenêtre.

    De toutes façons il vaudrait mieux utiliser FlashWindowEx, ça éviterait d'avoir plein de code à écrire en plus pour faire clignoter plusieurs fois...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Bonsoir,
    Je te remerccie pour ta reponse.
    Je n'ai pas un message d'errur mais tout simplement l'effet de clignotement voulu ne se fait pas. J'ai mis le code au niveau de public partial class Form1 du formulaire qui doit clignoter.

    Et la ou tu suggere a le mettre, je ne pas compris. Tu veux dire deriere le textBox destiné pour la reception des messages?

    Merci une fois encore.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par adenoula Voir le message
    Et la ou tu suggere a le mettre, je ne pas compris. Tu veux dire deriere le textBox destiné pour la reception des messages?
    Non, ce qu'on appelle "code-behind", c'est juste la vue "code" de ta Form (par opposition au designer). Mais apparemment c'est bien là que tu l'as mis.

    Je ne vais pas essayer de comprendre ce qui ne va pas dans ton code, qui me semble pas très bien fichu... Je vais plutôt te proposer une autre solution avec FlashWindowEx.

    Déclaration de l'API Win32 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
        [DllImport("user32.dll")]
        private static extern bool FlashWindowEx(ref FLASHWINFO fwi);
     
     
        [Flags]
        public enum FlashWindowOptions : uint
        {
            Stop = 0x00,
            Caption = 0x01,
            Taskbar = 0x02,
            All = 0x03,
            Continuous = 0x04,
            UntilForeground = 0x0C
        }
     
        [StructLayout(LayoutKind.Sequential)]
        private struct FLASHWINFO
        {
            public uint cbSize;
            public IntPtr hwnd;
            public FlashWindowOptions dwFlags;
            public uint uCount;
            public uint dwTimeout;
        }
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void Flash(uint count)
    {
        var fwi = new FLASHWINFO();
        fwi.cbSize = (uint)Marshal.SizeOf(typeof(FLASHWINFO));
        fwi.hwnd = this.Handle;
        // Fait clignoter la barre de titre et le bouton dans la barre des tâches
        fwi.dwFlags = FlashWindowOptions.All;
        fwi.uCount = count;
        FlashWindowEx(ref fwi);
    }
     
    ...
     
    Flash(3); // Clignotement 3 fois

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/08/2011, 09h42
  2. [C#] desactiver une fenetre windows.forms
    Par ridick dans le forum Windows Forms
    Réponses: 6
    Dernier message: 16/11/2010, 18h07
  3. Faire clignoter une forme (graphics2D)
    Par Yannick_from_31 dans le forum 2D
    Réponses: 5
    Dernier message: 04/12/2006, 00h51
  4. Faire clignoter une fenetre
    Par starship dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/10/2006, 18h49
  5. Réponses: 2
    Dernier message: 13/12/2004, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo