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

Composants VCL Delphi Discussion :

Faire clignoter en orange (bare des tache) le program lorsqu'il n'est pas au 1er plan


Sujet :

Composants VCL Delphi

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut Comment faire clignoter en orange comme msn ou irc ?
    salut

    j'aimerais après un évènement choisit (lorsque qqun écrit dans le tchat alors que notre programme n'est aps au premier plan) qu'il clignote en orange dans la barre des taches comme le font msn et irc

    biensur une fois avoir mis le prog au premier plan, le clignotement arretera

    merci

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Voici un petit exemple pour faire clignoter la barre des taches de ton programme.

    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
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Timer1.Enabled:=false;
      // Réglage de l'intervalle pour le clignotement
      Timer1.Interval:=800;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Timer1.Enabled:=true;
      // On lance le clignotement
      FlashWindow(findwindow(nil,'Project1'),true);
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      // On arrête le clignotement
      Timer1.Enabled:=false;
      FlashWindow(findwindow(nil,'Project1'),false);
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      FlashWindow(findwindow(nil,'Project1'),true);
    end;
    Project1 est le nom qui s'affiche dans la barre de titre de ton application.

    En espérant t'avoir aidé.
    A+

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    nikel ! c'est ce qu'il me fallait !

    juste une chose, comment peut on savoir si notre application est au premier plan ?

    j'allais faire un test dans un timer : si pas au premier plan, clignoter

  4. #4
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Dans le timer, tu peux faire une chose c'est récupérer le handle de la fenêtre active et voir si c'est le même que ton application.

    Je te propose un morceau de code non testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (Self.Handle=GetForegroundWindow) then
    begin
     // instruction
    end;
    Avec ça je pense que ça devrait aller.
    A+

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    wai c'est cool ^^

    thx

  6. #6
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    j'ai un prob :

    j'utilise mon programme, donc logiquement il est en 1er plan non ?

    pourtant dans un timer je met :

    Memo1.Lines.Add(inttostr(application.Handle));
    Memo1.Lines.Add(inttostr(GetForegroundWindow));

    et le handle de mon application est tjrs différent de celui de la fenetre du 1er plan ... mon but étant d'arréter le timer une fois que mon appli est au 1er plan (utilisé par luser)

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 746
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 746
    Points : 15 167
    Points
    15 167
    Par défaut
    Citation Envoyé par Coussati Voir le message
    et le handle de mon application est tjrs différent de celui de la fenetre du 1er plan ...
    Normal : l'application c'est une chose, la fenêtre c'est autre chose. Donc 2 handles différents. À toi de choisir le bon.
    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    waip mais finalement c meme pas sa mon prob

    quand j'arrete le flash je met false, bin ça reste tjrs orange, il faut avec la souris clické dessus genre pour minimiser et après lorange part

    jai testé avec msn, des qu'on click direct ça part

    peut être il y a un évènement spécial ? genre lorsqu'on click sur l'appli minimisé ?

  9. #9
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    et avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      {Handle : Handle de la fenetre à activer}
      { Restaurer l'application si minimisée }
      ShowWindow(Handle, SW_RESTORE);
      { Mettre la première instance en premier plan : }
      SetForegroundWindow(Handle);
    ?
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  10. #10
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    non c'est pas ça

    imagine je fais un tchat comme msn

    il faut que lorsque je maximise (je lcick dessus) que le flash orange dissparraise

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 60
    Points : 56
    Points
    56
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
     if (evenement=true) and (not Application.Active) then begin
        FlashWindow(Handle, true);
         FlashWindow(Application.Handle, true);
         end;
    end;
    la variable "evenement" est un boolean vrai avec ta condition.

  12. #12
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    ton code n'est pas bon, c beaucoup plus sérieu que ça

    regarde un exemple que j'ai fais :

    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      application.Minimize;
      timer1.Enabled := true;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
     
     
    Memo1.Lines.Add(inttostr(form1.Handle));
    Memo1.Lines.Add(inttostr(GetForegroundWindow));
     
     
      if GetForegroundWindow <> form1.Handle then
      begin
        FlashWindow(application.Handle,true);
        Memo1.Lines.Add('okkkkkkkkkkk');
      end;
     
    end;
    quand jutilise mon prog il entre au 1er plan donc le timer stop; MAIS il reste "lorange" ce que je veux supprimer

    il suffit de tester avec msn et vous verrez comment msn fonctionne

    il faut que les 2 stop : flash + couleur orange

  13. #13
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut Faire clignoter en orange (bare des tache) le program lorsqu'il n'est pas au 1er plan
    salut

    j'avais posté initialement dans débutant, pensant que j'aurai trouvé facilement et rapidement la réponse; mais vu comme ça se corse, je préfère tout réexpliquer ici

    donc pour commencer, c'est pour un tchat, comme msn : une fois qu'un membre parle, alors que le fenetre n'est pas visible (1er plan) le flashing (orange) doit d'activer; une fois au 1er plan DIRECTEMENT ce flashing doit cesser et l'orange disparait

    c'est pas si évident que ça en à l'air, parce qu'après plusieurs test, on a réussit à arréter le flashing mais l'orange reste jusqu'au prochain refresh (ce qui n'est pas normal)

    pour faire simple, vous n'avez pas ma source donc utilison une autre :

    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      application.Minimize;
      timer1.Enabled := true;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
     
      if GetForegroundWindow <> form1.Handle then
      begin
        FlashWindow(application.Handle,true);
        Memo1.Lines.Add('okkkkkkkkkkk');
      end;
     
    end;
    quepeut on faire pour améliorer ?

    P.S : si vous n'avez pas bien compris, regardez du coté de msn quand un contact vous parle, une fois clickez sur la fenetre l'orange par directe !

  14. #14
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    alors ? toujours personnes ?

  15. #15
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Et bien comme l'a montré Ero-Senin, on peut demander à une fenêtre de clignoter, mais on peut aussi lui demander d'arrêter de clignoter. Je penses donc que dès que ta fenêtre revient au premier plan, tu dois appeler explicitement l'API pour arrêter le clignotement.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  16. #16
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    oui ça arrête de clignoter ... mais du faite que ça clignotait déjà, la couleur orange reste ...

    de toute façon ceux qui répondent ne prennent même pas le teps de tester(à peine 10 lignes de code) donc vous ne comprendrez jamais c'et quoi exactement le prob ...

  17. #17
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    La solution que j'ai donnée convient à partir de XP. Et c'est comme ça que fonctionne MSN ! Teste tu verras ...

    Si on fait un SetForegroundWindow sur une fenêtre non active, elle clignote en orange. Elle s'arrête au bout d'un moment par contre. Cela ne marche pas en Windows 98

    Sinon il y a des subtilités pour que ça ne fonctionne pas de cette façon:
    http://msdn2.microsoft.com/en-us/library/ms633539.aspx

    Sinon je propose ce code, il est testé pour faire clignoter une fenetre d'une application externe (pas de souci avec la couleur de clignotement et l'arrêt du clignotement).

    Dans les déclarations de la form qui doit clignoter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      const WM_MessageFlash = WM_User + 1;
    Dans la déclaration de la form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      procedure MessageLoad(var M: TMessage); message WM_MessageFlash;
    Dans la partie implémentation
    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
     
    procedure TForm1.MessageLoad(var M: TMessage);
    begin
      Timer1.enabled := True;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if GetForegroundWindow <> Handle then
      begin
        FlashWindow(application.Handle,true);
      end
      else
        Timer1.Enabled := False;
    end;
    Et ensuite pour faire clignoter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Si on connait le handle de la fenetre à clignoter c'est plus simple, sinon on cherche par raport au nom de la fenetre
      SendMessage(FindWindow(nil, 'Le nom de ma fenetre'),WM_MessageFlash,0,0);
    Cordialement,
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

Discussions similaires

  1. Mise à jour des données du CR lorsque la DB est mise à jour
    Par j0hn01 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 17/02/2009, 14h33
  2. Réponses: 2
    Dernier message: 01/04/2008, 13h22
  3. [Winform] FAire clignoter dans la barre des tâches
    Par TSalm dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 12/11/2007, 13h52
  4. [information] utiliser des "dessins" si le fichier image n'est pas trouvé
    Par TabrisLeFol dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 25/05/2006, 12h05
  5. Réponses: 6
    Dernier message: 11/02/2005, 21h38

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