Page 1 sur 1
J'ai un probleme avec les StringGadgets et menu contextuel.
Publié : sam. 14/oct./2006 12:27
par Kwai chang caine
Bonjour à tous
J'ai des problémes pour gérer les événements clic droit sur un StringGadget en meme temps que j'appelle un menu contextuel.
Exemple :
Code : Tout sélectionner
Enumeration
#Menu
#MenuEffacer
#MenuCheminRechercher
#MenuCheminApplication
#MenuNomChamp
#Champ
EndEnumeration
OpenWindow(1,200,200,400,200,"",#PB_Window_SystemMenu)
CreateGadgetList(WindowID(1))
StringGadget(#Champ,10,10,300,20,"")
; MENU CONTEXTUEL
; ***************
CreatePopupMenu(#Menu)
MenuItem(#MenuNomChamp, "Nom du champ")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #WM_RBUTTONDOWN
DisplayPopupMenu(#Menu, WindowID(1))
Debug EventGadget()
Case #PB_Event_Gadget
If EventGadget() = #Champ
Debug EventGadget()
EndIf
EndSelect
ForEver
Quand je clic gauche l'id du champ remonte bien, mais qd je clic droit, c'est le menu contextuel qui s'affiche et apres pour l'ID j'obtiens 0.
Deux questions me tarabustent :
1/ Comment faire pour obtenir l'ID du gadget sur lequel on a cliqué droit ???
2/ Est il possible de remettre à 0 l'EventGadget() ou est-on obligé de passer par une variable et la remettre à 0, puisque apparement il garde la valeur du dernier gadget utilisé ???
C'est pas vraiment facile de comprendre la gestion des divers evenements et surtout dans quel ordre les utiliser.
J'ai bien cherché quelques aides sur les événements gentillement proposée par droopy :
http://purebasic.hmt-forum.com/viewtopi ... evenements
et
http://purebasic.hmt-forum.com/viewtopi ... evenements
Mais on y parle pas des menus contextuels et des clics droits
Merci de votre aide.
Publié : sam. 14/oct./2006 16:27
par brossden
Esssaye
Code : Tout sélectionner
Enumeration
#Menu
#MenuEffacer
#MenuCheminRechercher
#MenuCheminApplication
#MenuNomChamp
#Champ
EndEnumeration
OpenWindow(1,200,200,400,200,"",#PB_Window_SystemMenu)
CreateGadgetList(WindowID(1))
StringGadget(#Champ,10,10,300,20,"")
; MENU CONTEXTUEL
; ***************
CreatePopupMenu(#Menu)
;*****************************************
For n=1 To 5
MenuItem(n, "Choix Numéro "+Str(n))
Next
;*****************************************
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #WM_RBUTTONDOWN
DisplayPopupMenu(#Menu, WindowID(1))
;******************************************
Case #PB_Event_Menu
Debug EventMenu()
;******************************************
EndSelect
ForEver
Les lignes changées sont entre les étoiles
Publié : sam. 14/oct./2006 16:47
par nico
Pour régler ton problème, il te faudrait un code qui te permette de savoir sur quel gadget tu es au survol.
Un code du genre MouseIn MouseOut, il y en a pleins d'autres qui font ça ou alors l'utilisation du message #WM_SETCURSOR ce qui t'obligeras à faire un callback.
Publié : sam. 14/oct./2006 17:06
par Kwai chang caine
Bonjour à vous 2
@BROSSDEN
Je te remercie de ton code qui fonctionne admirablement mieux que le miens.
Par contre ce n'est pas tout à fait ce que je voulais, j'ai du mal m'exprimer
@NICO
Tu es arrivé à décoder ma question, malgres qu'elle soit mal posée.
Je crois bien que ce que tu as dit est exactement ce que je veux.
Je vais chercher du coté des MouseIn MouseOut, mais si tu pouvais me donner un petit exemple pour le #WM_SETCURSOR et un callback, ça serait super sympa.
Les callbacks. ça m'interesse mortel, ce n'est pas la premiere fois que j'en entend parler, mais j'y comprend "couik", je ne sais ni comment les appeler, ni vraiment à quoi ils servent, j'ai lu des aides etc..., mais ça n'a pas encore percuté dans ma tête.
Je pense que c'est déja de la haute programmation et un niveau que j'aimerais toucher du doigt.
J'aimerais bien comprendre avec un exemple simple comme celui-la, un miracle est toujours possible et comme pure est le roi des miracles ....
Encore merci à tous les 2 d'aider le débutant que je suis.
Bonne journée
Publié : sam. 14/oct./2006 17:17
par nico
Comme c'est dit dans le code, ça ne marche que si le gadget n'est pas désactivé!
Code : Tout sélectionner
; Détecte le passage de la souris au dessus d'un Gadget
; on peut ainsi récupérer son ID ou son Handle
; il faut que l'ID du Gadget commence par 1
; car le message renvoie null s'il n'est pas au dessus un Gadget
; de plus si le gadget est désactivée, il ne sera pas détecté
Global Id.l
Procedure ProcedureCallback(WindowID, Message, wParam, lParam)
Resultat = #PB_ProcessPureBasicEvents
Select Message
Case #WM_SETCURSOR
Id=GetDlgCtrlID_(wParam)
;Debug "Handle= "+Str(wParam)+" , "+"ID= "+Str(GetDlgCtrlID_(wParam))
EndSelect
ProcedureReturn Resultat
EndProcedure
Enumeration
#Window
#String1
#Button
#CheckBox
EndEnumeration
Enumeration
#Menu
#MenuNomChamp
EndEnumeration
If OpenWindow(#Window,0,0,400,400,"Pure Basic",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(#Window))
StringGadget(#String1,20, 20,200,20,"Normal StringGadget...")
ButtonGadget(#Button, 20, 60, 200, 20, "Standard Button")
CheckBoxGadget(#CheckBox,20, 100,200,20,"CheckBox standard")
;DisableGadget(#Button,1)
SetWindowCallback(@ProcedureCallback())
CreatePopupMenu(#Menu)
MenuItem(#MenuNomChamp, "Nom du champ")
Repeat
EventID.l=WaitWindowEvent()
Select EventID
Case #WM_RBUTTONDOWN
Debug id
; A toi de faire les conditions pour ne gérer que les Gadgets souhaités
DisplayPopupMenu(#Menu, WindowID(#Window))
Case #PB_Event_Gadget
Select EventGadget()
Case 0
EndSelect
Case #WM_CLOSE
Quit=1
EndSelect
Until Quit=1
EndIf
Publié : sam. 14/oct./2006 17:40
par nico
J'aui trouvé plus simple:
Code : Tout sélectionner
Case #WM_RBUTTONDOWN
GetCursorPos_(@point.POINT)
handle=WindowFromPoint_(point\X,point\Y)
Id=GetDlgCtrlID_(handle)
Debug Id
DisplayPopupMenu(#Menu, WindowID(1))
Publié : sam. 14/oct./2006 18:04
par Kwai chang caine
Alors la, je reste sans voix ......
C'est exactement ce que je cherchais.
J'etais passé par une procedure super compliqué qui donnais la position de la souris, mais alors la .......
Mille merci pour ce, petit par la taille, mais immense code par l'éfficacité, que tu viens de me donner.
Que serais le purebasic sans ce forum et ses professeurs.
Passez une excelente soirée.
Petit scarabé
Publié : sam. 14/oct./2006 18:48
par Gratteur
C'est de l'api, tu ne peux pas l'inventer.
Visites un peu le site de microsoft, y'a plein de trucs utiles sur l'os.
Probleme avec les textgadget
Publié : jeu. 19/oct./2006 22:53
par barnierchristophe
J'ai essayé la petite astuce du Soldat inconnu. J'ai l'impression que cela ne marche pas pour les strings gadget....????
Publié : ven. 20/oct./2006 6:51
par Kwai chang caine
Quelle astuce du soldat inconnu ?

Publié : ven. 20/oct./2006 19:08
par barnierchristophe
J'avais mal lu; Il s'agissait dun message de nico et non du soldat inconnu....
Publié : ven. 20/oct./2006 23:03
par Kwai chang caine
Bah si, c'est d'ailleurs pour ça que je l'ai utilisé il me semble.