Shell_NotifyIcon et MDI FORM probleme

Signaler
Messages postés
77
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
20 juillet 2005
-
Messages postés
77
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
20 juillet 2005
-
Yop :)

J'ai un vieux problème... j'utilise le l'api Shell_NotifyIcon pour iconiser mon application au formLoad... depuis le debugguer de Vb ca marche... je crée l'exe et boom ca marche pas il réagit pas à l'event Mouse move.

Si j'essaie sur une form principale non mdi ca marche...

Je paste un exemplee code (sur une non mdi) :

Option Explicit

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

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

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
MsgBox "copain" '- pour testeer si ca rentre dans l'event..

Static rec As Boolean, 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
If rec = False Then
rec = True
Select Case msg 'Différentes possibilité d'action
Case DOUBLE_CLICK_GAUCHE: 'mettez


'MainForm.mnuTrayAfficher.Enabled = False
Me.WindowState = vbMaximized
Me.Visible = True 'Cache la fenêtre
App.TaskVisible = True


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 Me.mnutray 'fait apparaitre le menu

End Select
rec = False
End If
End Sub

Private Sub Form_Load()

'Affiche l'icone
'If MainForm.MSComm.PortOpen = True Then
' IconiseForm 2, False, eAjout
'Else
' IconiseForm 1, False, eAjout
'End If
'Recupère le commandline
'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 = &H200 '&H200 'Renvoyer les messages concernant l'action de la souris
IconeT.hIcon = Me.Image1.Picture 'Mettre en icône l'image qui est dans le contrôle "Image1"
IconeT.szTip = "System Monitor" & 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

'Me.Hide 'Cache la fenêtre
Me.WindowState = vbMinimized
App.TaskVisible = False 'Retire le bouton de l'application de la barre
'des tâches
'MainForm.mnuTray.Visible = True

End Sub

2 réponses

Messages postés
200
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
18 novembre 2005

Une des caractéristique des form MDDI est qu'elle sont composé de deux fenetres, l'une des deux est fille de la précédente. le hWnd que vous utilisez n'est peut être pas le bon.
essayez d'utiliser qqe chose comme
ChildHwnd = GetWindow(me.hwnd, GW_CHILD)

sans garantie de résultat mais on se sait jamais.

Jean-Luc
Messages postés
77
Date d'inscription
samedi 28 décembre 2002
Statut
Membre
Dernière intervention
20 juillet 2005

Bien joué merci ca marche niquel ;)