OVH Cloud OVH Cloud

systray

3 réponses
Avatar
Joel
bonjour,
voici mon probleme je place mon icon dans le systray avec un click droit un
popup s'affiche (normal) mais si je ne selectionne pas un de ses choix et
que je click a coté ou sur autre chose se popup ne se desactive pas et reste
afficher... se qui est genant puisque pour qu'il s'effache je doit
obligatoirement faire un choix sur se popup. voisi mon code...
'
'dans un module
'icontray
Public Const AJOUT = &H0
Public Const MODIF = &H1
Public Const SUPPRIME = &H2
Public Const MOUSEMOVE = &H200
Public Const MESSAGE = &H1
Public Const Icone = &H2
Public Const TIP = &H4

Public Const DOUBLE_CLICK_GAUCHE = &H203
Public Const BOUTON_GAUCHE_POUSSE = &H201
Public Const BOUTON_GAUCHE_LEVE = &H202
Public Const DOUBLE_CLICK_DROIT = &H206
Public Const BOUTON_DROIT_POUSSE = &H204
Public Const BOUTON_DROIT_LEVE = &H205

Public Type IconeTray
cbSize As Long 'Taille de l'icône (en octets)
hWnd As Long 'Handle de la fenêtre chargée de recevoir les
messages envoyés lors des évènements sur l'icône (clics, doubles-clics...)
uID As Long 'Identificateur de l'icône
uFlags As Long
uCallbackMessage As Long 'Messages à renvoyer
hIcon As Long 'Handle de l'icône
szTip As String * 64 'Texte à mettre dans la bulle d'aide
End Type

Public IconeT As IconeTray

Public Declare Function Shell_NotifyIcon Lib "shell32" Alias
"Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As IconeTray) As Boolean

' dans la form
Private Sub Form_Load()
IconeT.cbSize = Len(IconeT)
IconeT.hWnd = frmControle.hWnd
IconeT.uID = 1&
IconeT.uFlags = Icone Or TIP Or MESSAGE
IconeT.uCallbackMessage = MOUSEMOVE
IconeT.szTip = "Contrôle rendez-vous inactif" & Chr$(0)
IconeT.hIcon = frmControle.Image1(0).Picture
Shell_NotifyIcon AJOUT, IconeT
IconeAff
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single,
y As Single)
Dim msg As Integer
Dim rec As Boolean
msg = X / Screen.TwipsPerPixelX
If rec = False Then
rec = True
Select Case msg
Case DOUBLE_CLICK_GAUCHE
LanceRDV "Tous"
Case BOUTON_DROIT_LEVE
PopupMenu mnuMenu
End Select
rec = False
End If
End Sub

3 réponses

Avatar
Picalausa François
"Joel" a écrit dans le message de news:
45503487$0$25941$
bonjour,
voici mon probleme je place mon icon dans le systray avec un click droit
un popup s'affiche (normal) mais si je ne selectionne pas un de ses choix
et que je click a coté ou sur autre chose se popup ne se desactive pas et
reste afficher... se qui est genant puisque pour qu'il s'effache je doit
obligatoirement faire un choix sur se popup. voisi mon code...



Hello,

C'est un problème connu de cette fonction, documenté dans la msdn:
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/resources/menus/menureference/menufunctions/trackpopupmenuex.asp
(section remarques)
"To display a context menu for a notification icon, the current window must
be the foreground window before the application calls TrackPopupMenu or
TrackPopupMenuEx. Otherwise, the menu will not disappear when the user
clicks outside of the menu or the window that created the menu (if it is
visible)."

Je te conseille donc d'utiliser SetForegroundWindow comme indiqué dans cet
article de la kb:
http://support.microsoft.com/default.aspx/kb/176085

--
Picalausa François
Avatar
Joel DECOTIGNY
merci pour cette reponte et conseil je vais allez voir pour
SetForegroundWindow
encore merci


"Picalausa François" a écrit dans le message de news:

"Joel" a écrit dans le message de news:
45503487$0$25941$
bonjour,
voici mon probleme je place mon icon dans le systray avec un click droit
un popup s'affiche (normal) mais si je ne selectionne pas un de ses choix
et que je click a coté ou sur autre chose se popup ne se desactive pas et
reste afficher... se qui est genant puisque pour qu'il s'effache je doit
obligatoirement faire un choix sur se popup. voisi mon code...



Hello,

C'est un problème connu de cette fonction, documenté dans la msdn:
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/resources/menus/menureference/menufunctions/trackpopupmenuex.asp
(section remarques)
"To display a context menu for a notification icon, the current window
must be the foreground window before the application calls TrackPopupMenu
or TrackPopupMenuEx. Otherwise, the menu will not disappear when the user
clicks outside of the menu or the window that created the menu (if it is
visible)."

Je te conseille donc d'utiliser SetForegroundWindow comme indiqué dans cet
article de la kb:
http://support.microsoft.com/default.aspx/kb/176085

--
Picalausa François




Avatar
Joel DECOTIGNY
je viens d'essayer le code pour (SetForegroundWindow)
par contre il est dit dans le code: la forme doit être entièrement visible
avant d'appeler Shell_NotifyIcon
se qui me genait car je ne veut pas quelle soit vu mais apparament j'ai
supprimer les ligne:
Private Sub Form_Load()
' Me.Show
' Me.Refresh

et apparament sa fonctionne tres bien
la form est regler sur visibleúlse
encore merci de m'avoir indiquer ce code


"Picalausa François" a écrit dans le message de news:

"Joel" a écrit dans le message de news:
45503487$0$25941$
bonjour,
voici mon probleme je place mon icon dans le systray avec un click droit
un popup s'affiche (normal) mais si je ne selectionne pas un de ses choix
et que je click a coté ou sur autre chose se popup ne se desactive pas et
reste afficher... se qui est genant puisque pour qu'il s'effache je doit
obligatoirement faire un choix sur se popup. voisi mon code...



Hello,

C'est un problème connu de cette fonction, documenté dans la msdn:
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/resources/menus/menureference/menufunctions/trackpopupmenuex.asp
(section remarques)
"To display a context menu for a notification icon, the current window
must be the foreground window before the application calls TrackPopupMenu
or TrackPopupMenuEx. Otherwise, the menu will not disappear when the user
clicks outside of the menu or the window that created the menu (if it is
visible)."

Je te conseille donc d'utiliser SetForegroundWindow comme indiqué dans cet
article de la kb:
http://support.microsoft.com/default.aspx/kb/176085

--
Picalausa François