Bonjour,
Je dois appliquer une modification dans une application pour que, lorsqu'un événement précis survient, l'icône de l'application clignote dans la barre des tâches.
Notre application tournant en tâche de fond par rapport à une autre application, le but est de prévenir l'utilisateur qu'une action est à réaliser d'urgence dans la nôtre.
J'ai chipoté un moment avec la bibliothèque FlashWindow, puis avec FlashWindowEx. Mais le résultat n'est pas satisfaisant.
Puis, en explorant les ressource de developpez, je suis tombé sur le tutoriel de Arkham46 :
http://www.developpez.net/forums/d59...ation-systray/
Celui-ci répond parfaitement à ce que je dois faire. Je peux programmer une icône clignotante dans le systray. Je peux même lui affecter une infobulle. Tout est nickel.
Mais j'ai quand même un soucis et je ne vois pas comment le régler :
Dans le systray, que ce soit sous XP ou sous Win7, l'icône créée est décalée à chaque clignotement.
Sous Win7, ce n'est pas vraiment un problème parce que le systray est dans un cadre indépendant (C'est gênant, mais ce n'est pas un problème), mais sous XP, cela provoque une réduction progressive de ma barre des tâches. Ce qui est un effet indésiré.
En explorant les méthodes de la classe créée par Arkham46, j'ai essayé de supprimer l'icône, après chaque clignotement, dans le systray à l'aide des méthodes :
HideSysTray
HideFormInTaskBar
Quelque chose m'échappe ou je ne place pas mon appel de fonction correctement, mais je ne parviens pas à arrêter ce phénomène intempestif.
Voici le timer que j'ai programmé dans mon formulaire utilisant la classe de Arkham :
Si quelqu'un pouvait me dire quelle idiotie je fais, je lui brulerais un cierge.
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 Private Sub Form_Timer() On Error GoTo ErrorHandling ' Récupération des numéros de processus des fenêtres ' Debug.Print ipProcApp ipProcActive = GetActiveWindow ipProcForeground = GetForegroundWindow ' Debug.Print "Application : " & ipProcApp _ & "Form : " & ipProcForm _ & " " & "Active : " & ipProcActive _ & " " & "Foreground : " & ipProcForeground ' Si la fenêtre du formulaire n'est pas la fenêtre active ' Faire clignoter une icône dans le systray If ipProcForm <> ipProcForeground Then ' Debug.Print "Access en fond" 'DoCmd.Beep Form_FrmSysTray.ShowFormInTaskBar Me If blnFlash Then DoCmd.OpenForm "FrmSysTray", acNormal, , , , acHidden Else Form_FrmSysTray.HideFormInTaskBar Me DoCmd.Close acForm, "FrmSysTray" End If blnFlash = Not (blnFlash) Else ' Si la fenêtre du formulaire est la fenêtre active, ' faire clignoter la fenêtre. ' Debug.Print "Access en avant" Call FlashWindow(ipProcForeground, True) End If FinSub: Exit Sub ErrorHandling: ' Gestion d'erreur. ' !!! Attention !!! A modifier pour utiliser la procédure ' d'erreur call errorsolution habituelle. If Err.Number <> 0 Then MsgBox Err.Number & vbCrLf & Err.Description End If Resume FinSub End Sub
Merci.
Partager