Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

POPUPMENU ET PERTE DE FOCUS


Information sur la source

Catégorie :Exécution Niveau : Initié Date de création : 12/09/2004 Date de mise à jour : 12/09/2004 10:45:51 Vu : 3 746

Note :
8,75 / 10 - par 4 personnes
8,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

Description

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

  • 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
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

Historique

12 septembre 2004 08:36:50 :
Mise à jour du titre !
12 septembre 2004 10:45:51 :
Petits oublis.. Eh oui.. j'avais fait un mic mac entre l'endroit d'où j'ai tiré ce code et l'appli que je suis en train de développer.. D'où certaines incohérences. Lol ...

Commentaires et avis

signaler à un administrateur
Commentaire de yoyo269 le 12/09/2004 09:34:23

Merci beaucoup tcari,

c'est exactement se que je cherchais depuis longtemps.
Par contre je pense que tu as dû oublier qq chose pour fixer la valeur lngMsg avec un truc dans le genre :

lngMsg = X / Screen.TwipsPerPixelX

Et de plus il a fallu que je déclare la fonction SetForeGround en Private parce que ça passait pas en public, mais bon on se débrouille facilement avec ça.

Donc je te mets 8 et pas 10 parce que c'est une source qui n'est pas de toi et pour le petit oubli d'affectation à la variable.

YOYO, @+.

signaler à un administrateur
Commentaire de bilaloch le 12/09/2004 10:12:51

Tres bonne source. 9/10.

@ ++

signaler à un administrateur
Commentaire de tcari le 12/09/2004 10:50:00

Voilà, c'est corrigé.. Du moins j'espère.. J'étais pas bien réveillé ce matin (un dimanche matin à 8h30 ! faut être fou pour poster du code ici !)

signaler à un administrateur
Commentaire de KaViDee le 12/09/2004 11:22:04

Cool, moi aussi j'en avais justement besoin :)
merci
++

signaler à un administrateur
Commentaire de Jielde le 24/02/2005 01:27:15

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

signaler à un administrateur
Commentaire de RemyFR le 09/09/2005 08:53:10

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


signaler à un administrateur
Commentaire de clret le 08/02/2007 16:45:33

un simple petit merci de plus...
je cherchais cette fonction depuis plusieurs jours...

signaler à un administrateur
Commentaire de aieeeuuuuu le 31/01/2008 10:35:49 9/10

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

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,608 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.