Page 1 sur 1
Problème avec une Procedure IsMouseOverGadget
Publié : sam. 15/mars/2014 18:08
par Lord Nelson
Salut,
Je rencontre un soucis avec cette procédure
Elle fait appel à des API, je crois bien que le problème vient de là, elle foire la réactualisation d'affichage d'une image sur mon ScrollAreaGadget
Je peut pas posté d’exemple, trop long
Je voudrait simplement savoir s'il avais un équivalent sans API ?
Je voudrait savoir si la souris est sur un gadget
Il me semble avoir vue un équivalent un jour mais impossible de savoir ou c'est, c'est comme rechercher une aiguille dans une meule de foin

Re: Problème avec une Procedure IsMouseOverGadget
Publié : sam. 15/mars/2014 18:22
par majikeyric
En utilisant un CanvasGadget tu as accès à plein d'evènements:
Code : Tout sélectionner
#PB_EventType_MouseEnter : Le curseur de la souris est entré dans le gadget
#PB_EventType_MouseLeave : Le curseur de la souris est sorti du gadget
#PB_EventType_MouseMove : Le curseur de la souris a bougé
#PB_EventType_MouseWheel(*) : La molette de la souris a bougé
#PB_EventType_LeftButtonDown : Le bouton gauche de la souris a été pressé
#PB_EventType_LeftButtonUp : Le bouton gauche de la souris a été relâché
#PB_EventType_LeftClick : Un clic avec le bouton gauche de la souris
#PB_EventType_LeftDoubleClick : Un double-clic avec le bouton gauche de la souris
#PB_EventType_RightButtonDown : Le bouton droit de la souris a été pressé
#PB_EventType_RightButtonUp : Le bouton droit de la souris a été relâché
#PB_EventType_RightClick : Un clic avec le bouton droit de la souris
#PB_EventType_RightDoubleClick: Un double-clic avec le bouton droit de la souris
#PB_EventType_MiddleButtonDown: Le bouton central de la souris a été pressé
#PB_EventType_MiddleButtonUp : Le bouton central de la souris a été relâché
#PB_EventType_Focus : Le gadget a obtenu le focus clavier
#PB_EventType_LostFocus : Le gadget a perdu le focus clavier
#PB_EventType_KeyDown(*) : Une touche clavier a été pressée
#PB_EventType_KeyUp(*) : Une touche clavier a été relâchée
#PB_EventType_Input(*) : Du texte a été entré dans le gadget
ça peut peut être t'aider...
Tu passes un flag à 1 quand tu as un #PB_EventType_MouseEnter, et tu le repasses à 0 quand tu as un #PB_EventType_MouseLeave.
Re: Problème avec une Procedure IsMouseOverGadget
Publié : sam. 15/mars/2014 18:31
par Patrick88
en utilisant WindowMouseX et ...Y, tu peux connaitre la position de la souris dans ta fenêtre, comme tu connais la position de tes gadgets et leur taille, pas bien difficile de trouver sur quel gadget tu te trouves
Pat
Re: Problème avec une Procedure IsMouseOverGadget
Publié : sam. 15/mars/2014 18:49
par Lord Nelson
Hum...
Merci pour ses idées

Re: Problème avec une Procedure IsMouseOverGadget
Publié : sam. 15/mars/2014 18:52
par majikeyric
J'ai pas testé mais ça doit marcher...
Code : Tout sélectionner
Procedure.b SourisSurvoleGadget(gadget.i)
Protected.i SourisPosX, SourisPosY, GadgetPosX, GadgetPosY, GadgetLargeur, GadgetHauteur, FenetreActive
FenetreActive=GetActiveWindow()
GadgetPosX=GadgetX(gadget,#PB_Gadget_WindowCoordinate)
GadgetPosY=GadgetY(gadget,#PB_Gadget_WindowCoordinate)
GadgetLargeur=GadgetWidth(gadget)
GadgetHauteur=GadgetHeight(gadget)
SourisPosX=WindowMouseX(FenetreActive)
SourisPosY=WindowMouseY(FenetreActive)
If SourisPosX<GadgetPosX : ProcedureReturn #False : EndIf
If SourisPosX>=(GadgetPosX+GadgetLargeur) : ProcedureReturn #False : EndIf
If SourisPosY<GadgetPosY : ProcedureReturn #False : EndIf
If SourisPosY>=(GadgetPosY+GadgetHauteur) : ProcedureReturn #False : EndIf
ProcedureReturn #True
EndProcedure
Re: Problème avec une Procedure IsMouseOverGadget
Publié : sam. 15/mars/2014 18:58
par Lord Nelson
Merci, ya ça aussi que j'ai fais:
Code : Tout sélectionner
Procedure.l IsMouseOverGadget(Fenetre, Gadget)
If (IsGadget(Gadget) And IsWindow(Fenetre))
If (WindowMouseX(Fenetre) >= GadgetX(Gadget) And WindowMouseX(Fenetre) <= GadgetX(Gadget) + GadgetWidth(Gadget)) And WindowMouseY(Fenetre) >= GadgetY(Gadget) And WindowMouseY(Fenetre) <= GadgetY(Gadget) + GadgetHeight(Gadget)
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndIf
EndProcedure
Re: Problème avec une Procedure IsMouseOverGadget
Publié : sam. 15/mars/2014 19:11
par majikeyric
Tu as une erreur de 1 pixel
If (WindowMouseX(Fenetre) >= GadgetX(Gadget) And WindowMouseX(Fenetre)
<GadgetX(Gadget) + GadgetWidth(Gadget)) And WindowMouseY(Fenetre) >= GadgetY(Gadget) And WindowMouseY(Fenetre)
< GadgetY(Gadget) + GadgetHeight(Gadget)
Re: Problème avec une Procedure IsMouseOverGadget
Publié : lun. 17/mars/2014 8:55
par MLD
@ Bonjour Mr Nelson
Vous pouvez aussi faire comme ceci.
Code : Tout sélectionner
Procedure HookProc(nCode,wParam,lParam)
GetCursorPos_(@point.POINT)
Handle = WindowFromPoint_(Point\X | (Point\Y << 32))
ParentHandle = GetParent_(Handle)
PbIdGadgetSurvoler = GetDlgCtrlID_(Handle) ; PbId du gadget survolé
Debug PbIdGadgetSurvoler
EndProcedure
OpenWindow(10,0,0,640, 300,"Mouse",#WS_CAPTION | #WS_SYSMENU | 1)
ScrollAreaGadget(6, 0,0,640,300,1000,1000)
ContainerGadget(5, 0, 0, 340, 300,#PB_Container_Single )
TextGadget (10, 10, 10, 100, 16, "ListIcon Standard", #PB_Text_Center)
SetWindowLong_(GadgetID(10), #GWL_STYLE, GetWindowLong_(GadgetID(10), #GWL_STYLE)|#SS_NOTIFY)
ListIconGadget(1, 10, 35, 300, 70, "Column 1", 100)
TextGadget (2, 10, 125, 120, 16, "ListIcon with Checkbox", #PB_Text_Center)
SetWindowLong_(GadgetID(2), #GWL_STYLE, GetWindowLong_(GadgetID(2), #GWL_STYLE)|#SS_NOTIFY)
ListIconGadget(3, 10, 150, 300, 70, "Column 1", 100, #PB_ListIcon_CheckBoxes)
ButtonGadget (4, 10, 230, 100, 20, "Add Gadget")
CloseGadgetList()
CloseGadgetList()
StickyWindow(10,1)
hhkLLMouse = SetWindowsHookEx_(#WH_MOUSE_LL,@HookProc(),GetModuleHandle_(0),0)
Repeat
EventID = WaitWindowEvent()
Until EventID = #PB_Event_CloseWindow
UnhookWindowsHookEx_(hhkLLMouse)
Re: Problème avec une Procedure IsMouseOverGadget
Publié : lun. 17/mars/2014 9:20
par Lord Nelson
@Bonjour Mr MLD
Merci pour votre code
@majikeyric
C'est grave docteur
