Menu + systray [Résolu]

Signaler
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
-
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
-
bonjour

j'ai une application dans lequel j'ai mis un systray, quand clic sur un bouton elle devient invisible et apparait pres de l'horloge du système dans la barre des taches. quand on fait un clic droit un menu s'affiche avec plusieurs option.
jusqu'au là tout va bien, le problème c'est que quand on fait un clic droit et que le menu s'affiche puis on change d'avis et on clic autre part sur n'importe quel autre fenêtre le menu reste afficher
quelqu'un peut m'aider a le rendre invisible si on clic autre part svp ?

merci d'avance


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie

8 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
salut,

montre nous le code de ton systray?
il faut faire un setforegroundwindow avant l'appel afin d'éviter ces désagréments...

++
[hr]
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut
Problème connu.
Voir <ce lien>

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
donc COMME J'AI INDIQUé DANS MON PREMIER POST :
il faut faire un setforegroundwindow avant l'appel afin d'éviter ces désagréments...


donc avant la ligne
Me.PopupMenu Form2.mnuFichier, vbPopupMenuRightButton


il faut mettre
SetForegroundWindow me.hwnd

SetForegroundWindow étant déclarée en public dans le module

NB : tes select case ne servent presque à rien (pourquoi tester un CAS s'il n'y pas pas d'action dessus (sans else))

++
[hr]
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
3
re
dans un module j'ai :

''****************************************************************** Déclaration des variable *****************************************************************
Public Const NOTIFYICON_VERSION = 3
Public Const NOTIFYICON_OLDVERSION = 0
Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Const NIM_SETFOCUS = &H3
Public Const NIM_SETVERSION = &H4
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4
Public Const NIF_STATE = &H8
Public Const NIF_INFO = &H10
Public Const WM_MOUSEMOVE = &H200
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public Const WM_RBUTTONDBLCLK = &H206
Public tooltip As String
'*********************************************************************** Déclaration des fonction ************************************************************
Public Declare Function SetForegroundWindow Lib "user32" _
(ByVal hwnd As Long) As Long
Public Declare Function Shell_NotifyIcon Lib "shell32" _
Alias "Shell_NotifyIconA" _
(ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean

'************************************************************************ Déclaration d'objet *****************************************************************

Public m_IconData As NOTIFYICONDATA
Public Type NOTIFYICONDATA
   cbSize As Long
   hwnd As Long
   uID As Long
   uFlags As Long
   uCallbackMessage As Long
   hIcon As Long
   szTip As String * 128
   dwState As Long
   dwStateMask As Long
   szInfo As String * 256
   uTimeout As Long
   szInfoTitle As String * 64
   dwInfoFlags As Long
End Type
Public Sub unlodf()

On Error Resume Next

   With m_IconData
        .cbSize = Len(m_IconData)
        .hwnd = Form2.hwnd
        .uID = vbNull
        .uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
        .uCallbackMessage = WM_MOUSEMOVE
        .hIcon = Form2.Icon
        .szTip = "ChaT-Land" & vbNullChar
        .dwState = 0
        .dwStateMask = 0
        .dwInfoFlags = 1
        .uTimeout = 3000
   End With

End Sub
Public Sub bulleinfo()
On Error Resume Next
    Dim s As String
    s = ""
   'tooltip = ""
   tooltip = "TG continuera de fonctionner de sorte que vous puissiez relooker votre PC à tout moment."
   
    With m_IconData
    
        .cbSize = Len(m_IconData)
        .hwnd = Form2.hwnd
        .uID = vbNull
        .uFlags = NIF_ICON Or NIF_INFO Or NIF_MESSAGE Or NIF_TIP
        .uCallbackMessage = WM_MOUSEMOVE
        .hIcon = Form2.Icon
        .szTip = "TG" & vbNullChar
        .dwState = 0
        .dwStateMask = 0
        .szInfo = tooltip & Chr(0)
        .szInfoTitle = "TG est toujours en cours d'exécution" & Chr(0)
        .dwInfoFlags = 1
        .uTimeout = 3000
        
    End With
    
       Shell_NotifyIcon NIM_MODIFY, m_IconData


End Sub
Public Sub syst()
Call unlodf
Shell_NotifyIcon NIM_ADD, m_IconData
Call bulleinfo
End Sub


dans form_load = Call syst
et pour afficher le menu:


Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

dim Msg As Long
    Msg = X / Screen.TwipsPerPixelX
        Select Case Msg
            Case WM_LBUTTONDBLCLK:
    tous_invi
    Image9.Visible = True
    lsitdmarge.Visible = True
    Form2.Show
    listapp.Nodes(listapp.Nodes.Count).Selected = True
            Case WM_LBUTTONDOWN:
            Case WM_LBUTTONUP:
            Case WM_RBUTTONDBLCLK:
            Case WM_RBUTTONDOWN:
            Case WM_RBUTTONUP:
            Me.PopupMenu Form2.mnuFichier, vbPopupMenuRightButton
        End Select    
End Sub


voila mon code si quelqu'un peut m'aider
merci d'avance

Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
3
ohhhh
merci beaucoup sa fonctionne a merveille

pour les select case je vais les enlevé
merci encore



Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
3
re
svp j'ai un autre problème avec le systray
quand j'essai de le supprimer avec:
Shell_NotifyIcon NIM_DELETE, m_IconData

sa fonctionne pas


Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
appelé où et quand?
pas de re-création après? (timer ou autre)

et dans le module pourquoi ton ID est null?
.uID = vbNull

il devrait être à &1 non?....

et si tu modifies qqc du systray (icon, tooltip, etc), tu penses bien à changer et mettre à jour le .cbSize ??

(avec code à l'appui stp)
Messages postés
580
Date d'inscription
mercredi 20 août 2008
Statut
Membre
Dernière intervention
20 avril 2010
3
pour l'arréter je fait :

Private Sub quiter_Click()
        Shell_NotifyIcon NIM_DELETE, m_IconData
end sub


pour le .uid = vbnull j'ai pris le module tel qu'il est depuis vbfrance et tout fonctionne bine, la création de la NotifyIcon et sa modification
sauf le delete ne fonctionne pas

Quand on pose une question on est con 5 minutes,Quand on ne la pose pas on le reste toute sa vie