[RESOLU]obtenir coin haut/gauche zone utilisable panelgadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

[RESOLU]obtenir coin haut/gauche zone utilisable panelgadget

Message par Patrick88 »

j'ai viré le post précédent parce que
-il n'y avait pas de réponse
-j'ai trouvé la solution, et c'était tout con :lol: :wink:

donc le problème était que lorsque l'on déplace le curseur de la souris sur les gadgets qui sont dans le panel, le rectangle rouge qui représente leur dimension et position en x,y dans le panel, se positionne en fait depuis le 0,0 de la fenetre et pas depuis la position x,y du panel gadget...

pas cool

ci-après, le code "qui marche pas", il faut être dans le coin haut/gauche du gadget pour qu'il soit détecté (pour augmenter le seuil de détection, changer la valeur de #TailleZoneRecherche

Code : Tout sélectionner

#TailleZoneRecherche = 30

OpenWindow(0,0,0,400,300,"test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
PanelGadget(0,10,10,300,200)
AddGadgetItem(0,-1,"Onglet 1")
	ButtonGadget(1,10,10,100,20,"bouton 1")
	ButtonGadget(2,10,30,100,20,"bouton 2")
AddGadgetItem(0,-1,"Onglet 2")
	ButtonGadget(3,110,10,100,20,"bouton 3")
	ButtonGadget(4,110,30,100,20,"bouton 4")
CloseGadgetList()

Repeat
	ev = WaitWindowEvent()
	
	If ev=#WM_MOUSEMOVE
		mx = WindowMouseX(0) ; coordonnées curseur souris
		my = WindowMouseY(0)
		
		For h = 0 To 4		
			gx = GadgetX(h)
			gy = GadgetY(h)
			gw = GadgetWidth(h)
			gh = GadgetHeight(h)

			If mx > gx-#TailleZoneRecherche And mx < gx+#TailleZoneRecherche
				If my > gy-#TailleZoneRecherche And my < gy+#TailleZoneRecherche
					;; okay - on est sur le coin haut gauche du gadget situé sous le curseur souris
					result = h
					If StartDrawing(WindowOutput(0))
						DrawingMode(#PB_2DDrawing_Outlined)
						Box(gx,gy,gw,gh,RGB(255,0,0))
						StopDrawing()
					EndIf	
		 			Debug "trouvé"
		 			Break
				EndIf
			EndIf
		Next 
			
	EndIf
Until ev =#PB_Event_CloseWindow
j'ai simplifier le code afin de ne garder que l'essentiel.

la solution est

1/ recaler le y du rectangle dessiné (donc le y du gadget dans le panel)
avec la fonction GetGadgetAttribute(#gadget_panel, #PB_Panel_TabHeight) qui renvoie la hauteur des boutons du panelgadget

2/ recaler le x avec gadgetx( du panelgadget...

la détection du panelgadget est volontairement désactivé par if h>0

Code : Tout sélectionner

#TailleZoneRecherche = 30

OpenWindow(0,0,0,400,300,"test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
PanelGadget(0,10,10,300,200)
AddGadgetItem(0,-1,"Onglet 1")
	ButtonGadget(1,10,10,100,20,"bouton 1")
	ButtonGadget(2,10,30,100,20,"bouton 2")
AddGadgetItem(0,-1,"Onglet 2")
	ButtonGadget(3,110,10,100,20,"bouton 3")
	ButtonGadget(4,110,30,100,20,"bouton 4")
CloseGadgetList()

Repeat
	ev = WaitWindowEvent()
	
	If ev=#WM_MOUSEMOVE
		mx = WindowMouseX(0) ; coordonnées curseur souris
		my = WindowMouseY(0)
		
		For h = 0 To 4		
			gx = GadgetX(h)
			gy = GadgetY(h)
			gw = GadgetWidth(h)
			gh = GadgetHeight(h)

			If h>0
				If mx > gx-#TailleZoneRecherche And mx < gx+#TailleZoneRecherche
					If my > gy-#TailleZoneRecherche And my < gy+#TailleZoneRecherche
						;; okay - on est sur le coin haut gauche du gadget situé sous le curseur souris
						result = h
						hauteur_bouton = GetGadgetAttribute(0, #PB_Panel_TabHeight)
	
	  				gy = GadgetY(h)+GadgetY(0)+	hauteur_bouton
	  				gx = GadgetX(h)+GadgetX(0)
	  				
						If StartDrawing(WindowOutput(0))
							DrawingMode(#PB_2DDrawing_Outlined)
							Box(gx,gy,gw,gh,RGB(255,0,0))
							StopDrawing()
						EndIf	
			 			Debug "trouvé"
			 			Break
					EndIf
				EndIf
			EndIf
		Next 
			
	EndIf
Until ev =#PB_Event_CloseWindow
petite remarque j'ai écrit cette fonction car le code "déplacement de gadget avec des poignées" dans astuce ne marche pas avec des container ou des panels, la fonction ne permet pas de "descendre" dans le gadget.... bon c'est surement possible, mais je sais pas faire....

je riposterai le code complet quand ça marchera...

Patrick