Changer icone tray

jordangj Messages postés 63 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 8 mai 2007 - 26 sept. 2004 à 23:45
jordangj Messages postés 63 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 8 mai 2007 - 27 sept. 2004 à 19:53
Bonjour
je voudrais savoir comment changer l'icone de mon programme quand je clic 1 fois sur mon icone dans le systray:
  With m_IconData
        .cbSize = Len(m_IconData)
        .hwnd = Me.hwnd
        .uID = vbNull
        '.uFlags = NIF_ICON Or NIF_INFO Or NIF_MESSAGE Or NIF_TIP 'NIF_TIP Or NIF_MESSAGE
        .uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
        .uCallbackMessage = WM_MOUSEMOVE
        .hIcon = Me.Icon
        .szTip = "PHPLive Tray" & vbNullChar
        .dwState = 0
        .dwStateMask = 0
        .dwInfoFlags = 1 'NIIF_ERROR
        .uTimeout = 1000
   End With
  
        Shell_NotifyIcon NIM_ADD, m_IconData


merci d'avance
GJ

15 réponses

cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
27 sept. 2004 à 09:49
Salut,

Lorsque je créer une icone tray voilà ce que je fait :

Private 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
Dim IconeT As IconeTray

'Constantes nécessaires
Private Const AJOUT = &H0
Private Const MODIF = &H1
Private Const SUPPRIME = &H2
Private Const MOUSEMOVE = &H200
Private Const MESSAGE = &H1
Private Const Icone = &H2
Private Const TIP = &H4

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

'API nécessaire
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, pnid As IconeTray) As Boolean


Puis :
sub form_load()
    'Préparation de la variable IconeT
    IconeT.cbSize = Len(IconeT) 'Taille de l'icône en octet
    IconeT.hWnd = Me.hWnd       'Handle de l'application (pour qu'elle reçoive les messages envoyés lors d'un clic, double-clic...
    IconeT.uID = 1&             'Identificateur de l'icône
    IconeT.uFlags = Icone Or TIP Or MESSAGE
    IconeT.uCallbackMessage = MOUSEMOVE     'Renvoyer les messages concernant l'action de la souris
    IconeT.hIcon = Me.Icon   'Mettre en icône l'image qui est dans le contrôle "Image1"
    IconeT.szTip = "Icon Tray" & Chr$(0)    'Texte de la bulle d'aide

    'Appel de la fonction pour mettre l'icône dans le système tray
    Shell_NotifyIcon AJOUT, IconeT
end sub


Puis :
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Static msg As Long

    'Se produit lorsque l'utilisateur agit avec la souris sur
    'l'icône placée dans le système tray

    msg = X / Screen.TwipsPerPixelX
    Select Case msg     'Différentes possibilité d'action
        Case DOUBLE_CLICK_GAUCHE:   'mettez
            Call reloadform
        Case BOUTON_GAUCHE_POUSSE:  'ce
        Case BOUTON_GAUCHE_LEVE:    'que
        Case DOUBLE_CLICK_DROIT:    'vous
        Case BOUTON_DROIT_POUSSE:   'voudrez
        Case BOUTON_DROIT_LEVE:     'qu'il se passe
            PopupMenu Menu          'fait apparaitre le menu
    End Select
End Sub


Et ne pas oublier :
Private Sub Form_Unload(Cancel As Integer)
    IconeT.cbSize = Len(IconeT)
    IconeT.hWnd = Me.hWnd
    IconeT.uID = 1&
    Shell_NotifyIcon SUPPRIME, IconeT
End Sub


Chris...
Firstruner
0
jordangj Messages postés 63 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 8 mai 2007
27 sept. 2004 à 17:51
merci mais je vois pas comment changer d'icone dsl
merci encore
GJ
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
27 sept. 2004 à 17:59
Il suffit de faire un script qui modifie la propriété suivante de l'icontray : IconeT.hIcon = Me.Icon
Me.icon pouvant être une imagebox ou picturebox ou image BMP

Chris...
Firstruner
0
jordangj Messages postés 63 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 8 mai 2007
27 sept. 2004 à 18:09
un truc comme ca ??

Private Sub change()
IconeT.hIcon = Form2.Icon
Shell_NotifyIcon AJOUT, IconeT
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
27 sept. 2004 à 18:51
T'as tout piger !

Chris...
Firstruner
0
jordangj Messages postés 63 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 8 mai 2007
27 sept. 2004 à 18:52
ca marche po...
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
27 sept. 2004 à 18:56
Attent je rejète un oeil au truc

Chris...
Firstruner
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
27 sept. 2004 à 19:06
Ah oui effectivement, le pb viens que iconT n'est pas un objet public. et là je bloque car je n'avais pas penser à ça, il faut que je me renseigne pour faire un objet public et je reviens vers toi

Désolé de ce contre temps

Chris...
Firstruner
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
27 sept. 2004 à 19:13
Sinon j'ai une autre solution :

Bon déjà si tu veux éxécuter un clic dans sur l'icone tray il faut modifier ce bloc, j'ai repris ta fonction 'Private sub change()'

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

'Se produit lorsque l'utilisateur agit avec la souris sur
'l'icône placée dans le système tray

msg = X / Screen.TwipsPerPixelX
Select Case msg 'Différentes possibilité d'action
Case DOUBLE_CLICK_GAUCHE: 'mettez
Case BOUTON_GAUCHE_POUSSE: 'ce
Case BOUTON_GAUCHE_LEVE: 'que
call change()              '<==========================
Case DOUBLE_CLICK_DROIT: 'vous
Case BOUTON_DROIT_POUSSE: 'voudrez
Case BOUTON_DROIT_LEVE: 'qu'il se passe
End Select
End Sub


Ensuite il faut :

private sub change()
Shell_NotifyIcon SUPPRIME, IconeT
IconeT.hIcon = Form2.Icon
Shell_NotifyIcon AJOUT, IconeT
end sub


En fait on la supprime du systray pour la modifier et on la recréer.

Chris...
Firstruner
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
27 sept. 2004 à 19:17
Je l'ai tester, ça marche du tonnere

Chris...
Firstruner
0
jordangj Messages postés 63 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 8 mai 2007
27 sept. 2004 à 19:21
merci imecable
alors ce ke j'aimerai faire c'est 1 clic ca met l'icone du form2 et un autre clic sa remet l'icon du form1
comment recupéré la valeur de l'icone pour faire ca ??

merci encore !!
GJ
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
27 sept. 2004 à 19:28
Declare une variable public dans l'onglet 'Général'
Regarde :

'-Général-
public EtatIconTray as boolean

Puis dans le sub suivant met :
sub form_load
EtatIconTray= true
end sub

 Puis dans le sub suivant met : 

private sub change()
if EtatIconTray =true then
Shell_NotifyIcon SUPPRIME, IconeT
IconeT.hIcon = Form2.Icon
Shell_NotifyIcon AJOUT, IconeT
else
Shell_NotifyIcon SUPPRIME, IconeT
IconeT.hIcon = Form1.Icon
Shell_NotifyIcon AJOUT, IconeT
end if
end sub


Chris...
Firstruner
0
jordangj Messages postés 63 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 8 mai 2007
27 sept. 2004 à 19:34
je pence que c la solution mais j'ai bien declaré public EtatIconTray as boolean
mais la variable EtatIconTray ne passe jamais a false

merci
GJ
0
cboulas Messages postés 2641 Date d'inscription mercredi 2 juin 2004 Statut Membre Dernière intervention 8 janvier 2014 16
27 sept. 2004 à 19:36
Oupss, sorry j'ai oublié un truc

private sub change()
if EtatIconTray=true then
Shell_NotifyIcon SUPPRIME, IconeT
IconeT.hIcon = Form2.Icon
Shell_NotifyIcon AJOUT, IconeT
EtatIconTray=false
else
Shell_NotifyIcon SUPPRIME, IconeT
IconeT.hIcon = Form1.Icon
Shell_NotifyIcon AJOUT, IconeT
EtatIconTray=true
end if
end sub


Falais pas chercher bien loin non plus.

Chris...
Firstruner
0
jordangj Messages postés 63 Date d'inscription lundi 12 juillet 2004 Statut Membre Dernière intervention 8 mai 2007
27 sept. 2004 à 19:53
merci beaucoup c impecable,
Merci beaucoup
0
Rejoignez-nous