Page 1 sur 1

Boucle dans les event ?

Publié : ven. 17/juin/2011 9:36
par Shinao
Bonjour, again,

Vu que j'ai maintenant la méthode pour faire des gadgets avec des ID automatique, j'aurais aimé savoir comment gérer les events sur ceux-ci.

Voila ce que j'ai testé dans ma boucle event :

Code : Tout sélectionner

Case #mongadget1
...
...

For i = 1 To NbLog Step 1
                  Case i
                    Select EventType()
                      Case #PB_EventType_LeftClick
                        Messagerequester("", "Yeah")
                    EndSelect
 Next
NbLog liste le nombre de gadget automatique
Mais seulement quand je fais une boucle, il ne prend pas en compte mes select avant pour les event...

Donc j'ai fais ça :

Code : Tout sélectionner

For i = 1 To NbLog Step 1

            Event = WaitWindowEvent()
  
            Select Event
              Case #PB_Event_Gadget
                Select EventGadget()

                  Case i
                    Select EventType()
                      Case #PB_EventType_LeftClick
                        Messagerequester("", "Yeah")
                    EndSelect
                EndSelect
            EndSelect
          Next
Et la, il ne se passe rien, il ne prend pas en compte ma boucle.

De plus, je n'arrive pas à debug dans mon select WindowEvent() pour voir ou il y a un problème, en même temps c'est assez logique...


Merci pour toute aide

Re: Boucle dans les event ?

Publié : ven. 17/juin/2011 11:34
par case
tu ne dois pas mettre le waitwindowevent() dans ta boucle for/next mais a l'exterieur de celle ci

essaie comme ca

Code : Tout sélectionner

event=waitwindowevent()
if event  ; si un evenement est déclenché
  select event
    case #PB_Event_Gadget  ; il s'agit d'un gadget
    gad=eventgadget()
    for i=1 to nblog                ; boucle de test
      if gad=i                         ; si le gadget est le même que le declencheur
         select eventtype()    
           case #pb_eventtype_leftclick  ; bouton gauche 
             Messagerequester("", "Yeah") 
             break                                    ;sort de la boucle for/next
         endselect
      endif
    next
  endselect
endif

Re: Boucle dans les event ?

Publié : ven. 17/juin/2011 11:45
par graph100
@Case : arf t'as été plus rapide :D

@Shinao : bah regarde le code qui suis :mrgreen:

Code : Tout sélectionner

#offset_gadget_dynamique = 100

Nombre_gadget = 10

;{ ouverture de la fenetre, et des gadgets

If OpenWindow(0, 0, 0, 210, 500, "Test pour Shinao", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
	
	; gadget qui va nous servir pour afficher les résultats
	ButtonGadget(0, 10, 10, WindowWidth(0) - 20, 20, "");, #PB_Text_Border)
	
	
	;{ on crée les gadgets dynamiques
	For a = 1 To Nombre_gadget
		ButtonGadget(#offset_gadget_dynamique + a, 10, a * 30 + 10, WindowWidth(0) - 20, 20, "Boutton : " + Str(a))
		
	Next
	;}
	
Else
	End
EndIf

;}


;{ boucle principale

Repeat
	event = WaitWindowEvent()
	
	If event = #PB_Event_Gadget
		
		; le select pour traiter les gadgets que tu connais et qui sont fixé
		Select EventGadget()
			Case 0
				SetGadgetText(0, "")
				
		EndSelect
		
		
		; la boucle pour traiter les gadgets dynamiques
		For a = 1 To Nombre_gadget
			
			If EventGadget() = #offset_gadget_dynamique + a
				
				SetGadgetText(0, "Le bouton : " + GetGadgetText(#offset_gadget_dynamique + a) + " a été appuyé")
				
			EndIf
		Next
		
	EndIf
	
	
Until event = #PB_Event_CloseWindow

;}


End

Re: Boucle dans les event ?

Publié : ven. 17/juin/2011 13:21
par Shinao
Je n'arrive pas à l'appliquer à mon code, j'ai l'impression que c'est la même chose, a part le if eventgadget(), d'ailleurs ce qui est logique pour une boucle, mais mon Case devrait fonctionner aussi.

Je vous met une plus grande partie du code modifié un peu pour que ça ressemble au votre (ne fonctionnant pas) :

Code : Tout sélectionner

Repeat
  Event = WaitWindowEvent()
  
  Select Event
      Case #PB_Event_Gadget
          Select EventGadget()
         ;mes constantes dont je connais le nom
             Case #ImageFlagEurope
          ;mes fonctions

          For i = 1 To NbLog Step 1
                  If EventGadget() = Programmes(i-1)\pid ;pid a une valeur numérique
                    Select EventType()
                      Case #PB_EventType_LeftClick
                        ChangeEtape(2)
                    EndSelect     
                  EndIf
                EndSelect
          Next
          
      EndSelect
  EndSelect
Until Event = #PB_Event_CloseWindow
Or ceci ne fonctionne pas, est-ce parce que ce n'est pas autorisé ou est-ce moi qui as fait des erreurs dans la structure Programmes ?


Merci pour vos réps!

Re: Boucle dans les event ?

Publié : ven. 17/juin/2011 13:52
par Shinao
Corrigé :

Code : Tout sélectionner

Repeat
  Event = WaitWindowEvent()
 
  Select Event
      Case #PB_Event_Gadget
          Select EventGadget()
         ;mes constantes dont je connais le nom
             Case #ImageFlagEurope
          ;mes fonctions
      EndSelect
          For i = 1 To NbLog Step 1
                  If EventGadget() = Programmes(i-1)\pid ;pid a une valeur numérique
                    Select EventType()
                      Case #PB_EventType_LeftClick
                        ChangeEtape(2)
                    EndSelect     
                  EndIf
                EndSelect
          Next
  EndSelect
Until Event = #PB_Event_CloseWindow
Il fallait donc que je ferme le Select eventgadget() avant de faire une condition dessus.

Bref, merci à vous :)