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 :wink:

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 :mrgreen:

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 :lol:

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 :mrgreen: