Popupmenu et perte de focus

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 697 fois - Téléchargée 36 fois

Contenu du snippet

Voilà, j'aime bien faire des applications qui se lancent depuis la barre des tâches.
Mais dès que je fais un popupmenu (on fait un clique droit sur l'icône de la barre des taches et un menu apparait), celui ci refuse de se désactiver si je coche ailleurs dans l'écran.

J'ai cherché ici, mais je n'ai rien trouvé qui corrige ce bug.

Je suis donc allé pêcher ce code sur un autre site, et vu que ca m'a été super utile, je vous le livre de ce pas.

A prioris, il faut donc passer le prog qui est dormant dans la barre des tâches au premier plan, pour qu'il puisse détecter la perte de focus et donc quitter le popupmenu si on clique ailleurs dans la fenêtre ==> donc "SetForegroundWindow Me.hwnd"

Source / Exemple :


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 SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
        Dim Msg as long
        Msg = X / Screen.TwipsPerPixelX
        If Me.WindowState = vbMinimized then
            Select Case Msg
                Case BOUTON_DROIT_POUSSE 'on appuie sur le bouton droit
                       SetForegroundWindow Me.hwnd
                       Popupmenu Me.menu
            end select
        end if
end sub

A voir également

Ajouter un commentaire

Commentaires

Messages postés
698
Date d'inscription
jeudi 16 janvier 2003
Statut
Membre
Dernière intervention
20 mai 2011
2
Merci beaucoup
J'ai eu un peu de mal également a trouver la solution.
pourtant, ça n'est pas le nombre de sources sur ce site pour afficher un popupmenu qui manquent...
mais très peu indiquent comment faire pour l'effacer si on ne clique pas dessus.
et une solution efficace qui tiens en 2 lignes en plus :)

merci encore
Messages postés
8
Date d'inscription
jeudi 26 décembre 2002
Statut
Membre
Dernière intervention
25 octobre 2009

un simple petit merci de plus...
je cherchais cette fonction depuis plusieurs jours...
Messages postés
5
Date d'inscription
dimanche 3 novembre 2002
Statut
Membre
Dernière intervention
4 mars 2007

Super !!!!!

je cherchais depuis un petit moment.

Dans mon cad j'ai juste fais ceci :

# 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 SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
#

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

#msg = X / Screen.TwipsPerPixelX
#If rec = False Then
# rec = True
# Select Case msg
# Case DOUBLE_CLICK_GAUCHE:
# Quit_Click
# Case BOUTON_DROIT_LEVE:
# PopupMenu Menu
# End Select
# rec = False
#End If

#SetForegroundWindow Me.hwnd

#End Sub
Messages postés
226
Date d'inscription
mardi 17 octobre 2000
Statut
Membre
Dernière intervention
1 décembre 2010

Merci énormément, c'était un truc que je cherche depuis très longtemps, le trouvé enfin c'est super sa mérite bien une petite note sa
Messages postés
262
Date d'inscription
dimanche 1 septembre 2002
Statut
Membre
Dernière intervention
1 février 2019

Cool, moi aussi j'en avais justement besoin :)
merci
++
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.