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

VB 6 et antérieur Discussion :

[VB6] Icône dans le systray + Menu contextuel


Sujet :

VB 6 et antérieur

  1. #1
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut [VB6] Icône dans le systray + Menu contextuel
    Bonjour,

    J'ai trouvé comment faire apparaitre une icône dans la zone à côté de l'heure de Windows. Voici le code :
    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
    Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
     
    Private Const WM_MOUSEMOVE = &H200
    Private Const NIF_ICON = &H2
    Private Const NIF_MESSAGE = &H1
    Private Const NIF_TIP = &H4
    Private Const NIM_ADD = &H0
    Private Const NIM_MODIFY = &H1
    Private Const NIM_DELETE = &H2
    Private Const MAX_TOOLTIP As Integer = 64
    Private Type NOTIFYICONDATA
        cbSize As Long
        hwnd As Long
        uID As Long
        uFlags As Long
        uCallbackMessage As Long
        hIcon As Long
        szTip As String * MAX_TOOLTIP
    End Type
    Private nfIconData As NOTIFYICONDATA
     
    Public Event SysTrayMouseDown(ByVal eButton As MouseButtonConstants)
    Public Event SysTrayMouseUp(ByVal eButton As MouseButtonConstants)
    Public Event SysTrayMouseMove()
    Public Event SysTrayDoubleClick(ByVal eButton As MouseButtonConstants)
    Public Event MenuClick(ByVal lIndex As Long, ByVal sKey As String)
     
    Private m_bAddedMenuItem As Boolean
    Private m_iDefaultIndex As Long
     
     
    Private Sub Form_Load()
        'On ajoute l'icone dans la barre des tâches
        With nfIconData
            .hwnd = Me.hwnd
            .uID = Me.Icon
            .uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
            .uCallbackMessage = WM_MOUSEMOVE
            .hIcon = Me.Icon.Handle
            .szTip = App.FileDescription & Chr$(0)
            .cbSize = Len(nfIconData)
        End With
        Shell_NotifyIcon NIM_ADD, nfIconData
    End Sub
    Maintenant je souhaiterai y ajouter un menu contextuel qui apparaitra en cliquant sur l'icône du systray.

    Merci d'avance de votra aide !

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    bouge pas j'ai ça sur mon ordi

    attend juste 10minutes (c'est ma pause café lol)

  3. #3
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut
    Citation Envoyé par Antoine1183
    bouge pas j'ai ça sur mon ordi

    attend juste 10minutes (c'est ma pause café lol)
    Ok je t'attends !

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    en fait tu crées un menu dans ta form que tu mets à visible = false

    apres tu mets l'evenement

    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
     
    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
        'cette procédure reçoit les rappels de l'icône de barre d'état système.
        Dim msg As Long
     
     
        If Me.ScaleMode = vbPixels Then
            msg = x
            Else
            msg = x / Screen.TwipsPerPixelX
        End If
     
        Select Case msg
            Case WM_LBUTTONDBLCLK
                Me.WindowState = vbNormal
                Me.Show
    'toi c'est ça que tu veux
            Case WM_RBUTTONDOWN
                Me.PopupMenu Me.menu_systray
                'là tu charges ton menu à visible = true
        End Select
    End Sub
    par contre n'oublie pas de rajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
       Private Const WM_MOUSEMOVE = &H200
     
       Private Const WM_LBUTTONDOWN = &H201     'Button down
       Private Const WM_LBUTTONUP = &H202           'Button up
       Private Const WM_LBUTTONDBLCLK = &H203   'Double-click
     
       Private Const WM_RBUTTONDOWN = &H204     'Button down
       Private Const WM_RBUTTONUP = &H205          'Button up
       Private Const WM_RBUTTONDBLCLK = &H206   'Double-click

  5. #5
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut
    Merci à toi Antoine1183 !!!

    ça semble fonctionner !

  6. #6
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut
    Encore une petite question...


    Je souhaite en cours d'execution de mon programme changer l'icône dans le systray, comment faire ?

  7. #7
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    deux solutions :

    soit tu supprimes l'icone et tu en rajoutes une
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            Shell_NotifyIcon NIM_DELETE, nid
            With nid
                .cbSize = Len(nid)
                .hwnd = Me.hwnd
                .uId = vbNull
                .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
                .uCallBackMessage = WM_MOUSEMOVE
                .hIcon = Me.Icon
                .szTip = "icone" & vbNullChar
            End With
            Shell_NotifyIcon NIM_ADD, nid
    ou tu la modifies direct (à essayer, jamais fait)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            With nid
                .cbSize = Len(nid)
                .hwnd = Me.hwnd
                .uId = vbNull
                .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
                .uCallBackMessage = WM_MOUSEMOVE
                .hIcon = Me.Icon
                .szTip = "icone" & vbNullChar
            End With
            Shell_NotifyIcon NIM_MODIFY, nid

  8. #8
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut
    Encore une fois merci !
    ça marche nickel !!!

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2004
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    juste pour info tu as choisi quelle méthode ?

    histoire de savoir si la modification marche correctement

  10. #10
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    J'ai lu ton code et je me ren compte que tu ne l'a pas tres bien dispose. Car tu melange tout. je vais te donner la procedure a suivre pour le faire.

    1 . Place ceci dans un module standard.
    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
     
     
    'type défini par l'utilisateur requis par Shell_NotifyIcon API call
       Public Type NOTIFYICONDATA
       cbSize As Long
       hwnd As Long
       uId As Long
       uFlags As Long
       uCallBackMessage As Long
       hIcon As Long
       szTip As String * 64
       End Type
     
       'constantes requises par l'appel API Shell_NotifyIcon :
       Public Const NIM_ADD = &H0
       Public Const NIM_MODIFY = &H1
       Public Const NIM_DELETE = &H2
       Public Const NIF_MESSAGE = &H1
       Public Const NIF_ICON = &H2
       Public Const NIF_TIP = &H4
       Public Const WM_MOUSEMOVE = &H200
       Public Const WM_LBUTTONDOWN = &H201     'Button down
       Public Const WM_LBUTTONUP = &H202       'Button up
       Public Const WM_LBUTTONDBLCLK = &H203   'Double-click
       Public Const WM_RBUTTONDOWN = &H204     'Button down
       Public Const WM_RBUTTONUP = &H205       'Button up
       Public Const WM_RBUTTONDBLCLK = &H206   'Double-click
     
       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
     
       Public nid As NOTIFYICONDATA
    2 . ensuite, place ceci dans ton formulaire (en remplacant par ce qui te concerne bien sur).
    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
    46
    47
    48
    49
    50
    51
     
    Private Sub Form_Load()
       'la forme doit être entièrement visible avant d'appeler Shell_NotifyIcon
       Me.Show
       Me.Refresh
       With nid
        .cbSize = Len(nid)
        .hwnd = Me.hwnd
        .uId = vbNull
        .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
        .uCallBackMessage = WM_MOUSEMOVE
        .hIcon = Me.Icon .szTip = "Your ToolTip" & vbNullChar
       End With
       Shell_NotifyIcon NIM_ADD, nid
       End Sub
     
       Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As
       _
          Single, Y As Single)
       'cette procédure reçoit les rappels de l'icône de barre d'état système.
       Dim Result As Long
       Dim msg As Long
        'the value of X will vary depending upon the scalemode setting
        If Me.ScaleMode = vbPixels Then
         msg = X
        Else
         msg = X / Screen.TwipsPerPixelX
        End If
        Select Case msg
         Case WM_LBUTTONUP                  '514 restore form window
          Me.WindowState = vbNormal
          Result = SetForegroundWindow(Me.hwnd)
          Me.Show Case WM_LBUTTONDBLCLK     '515 restore form window
          Me.WindowState = vbNormal
          Result = SetForegroundWindow(Me.hwnd)
          Me.Show
         Case WM_RBUTTONUP                  '517 display popup menu
          Result = SetForegroundWindow(Me.hwnd)
          Me.PopupMenu Me.mPopupSys ' Menu contextuel que tu doit creer et dont tu doit mettre a visible=false
        End Select
       End Sub
     
       Private Sub Form_Resize()
        'Nécessaire pour assurer que la fenêtre réduite soit masquée
        If Me.WindowState = vbMinimized Then Me.Hide
       End Sub
     
       Private Sub Form_Unload(Cancel As Integer)
        'cela supprime l'icône de la barre d'état système
        Shell_NotifyIcon NIM_DELETE, nid
       End Sub
    ce code n'est pas de moi, il de microsoft, je l'ai pris ici : http://support.microsoft.com/default.aspx?scid=KB;fr;q176085
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  11. #11
    Membre averti Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Points : 366
    Points
    366
    Par défaut
    @ Antoine1183 :
    Citation Envoyé par Antoine1183
    juste pour info tu as choisi quelle méthode ?

    histoire de savoir si la modification marche correctement
    J'ai pris la 1ere méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Shell_NotifyIcon NIM_DELETE, nid
            With nid
                .cbSize = Len(nid)
                .hwnd = Me.hwnd
                .uId = vbNull
                .uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
                .uCallBackMessage = WM_MOUSEMOVE
                .hIcon = Me.Icon
                .szTip = "icone" & vbNullChar
            End With
            Shell_NotifyIcon NIM_ADD, nid

    Quand à sovo : désolé mais tu arrive trop tard l'appli est déjà empaquetée et déployée sur les machines concernées... Merci quand même, si j'ai une retrouche à faire j'utiliserai ton code !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/09/2007, 23h32
  2. [VB6] Icône dans le Systray et MDIForm
    Par Jihnn dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 21/08/2006, 18h27
  3. [VB.NET] Icônes dans un Main Menu
    Par botanique dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/01/2006, 16h28
  4. Icône dans menu contextuel
    Par Larion dans le forum C++Builder
    Réponses: 4
    Dernier message: 01/04/2005, 22h45

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