Page 1 sur 1

Evennements et StringGadget

Publié : ven. 11/déc./2015 14:07
par Aliass
Bonjour à tous,

Je me pose une question sur les événements générés par StringGadget.
A l'éxécution du code ci dessous, au clic (prise de focus) sur StringGadget, 2 évenements sont générés de même à la perte de focus deux autres événement sont générés.
Idem quand une touche est préssée alors que le gadget à le focus.
Comment éviter de traiter 2 fois l'évenement ?

Avez-vous une idée ou alors c'est moi qui me pose des questions qui n'ont pas lieu d'être...

Code : Tout sélectionner

If OpenWindow (0, 0, 0, 230 , 120, " Exemple de gestion des évènements ...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered )
  
  ButtonGadget (1, 10, 10, 200 , 20, " Cliquez moi")
  CheckBoxGadget (2, 10, 40, 200 , 20, " Cochez moi ")
  StringGadget(3,10,70,100,20,"")
 
  If CreateMenu (0, WindowID (0))
    MenuTitle (" Menu ")
    MenuItem (1, " Item 1")
    MenuItem (2, " Item 2")
    MenuItem (3, " Item 3")
  EndIf
  
  Repeat
    Event = WaitWindowEvent ()
    
    Select Event
    
      Case #PB_Event_Gadget
        Select EventGadget ()
          Case 1 : Debug " Bouton cliqué !"
          Case 2 : Debug " Case à cocher cliquée !"
          Case 3 : Debug " Champ éditable cliqué !"
        EndSelect
      
      Case #PB_Event_Menu
        Select EventMenu ()
          Case 1 : Debug " Menu item 1 cliqué !"
          Case 2 : Debug " Menu item 2 cliqué !"
          Case 3 : Debug " Menu item 3 cliqué !"
        EndSelect
    
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf

Re: Evennements et StringGadget

Publié : ven. 11/déc./2015 14:21
par falsam
Bonjoue Aliass.

Quand tu entres dans ton champs éditables tu déclenches différents types d’événements que tu peux tester avec la fonction EventType().

Avec EventType() tu peux tester quand tu entres dans un champs éditable, quand tu est en mode édition ou encore quand tu sorts de ton champs éditable.

Code : Tout sélectionner

If OpenWindow (0, 0, 0, 230 , 120, " Exemple de gestion des évènements ...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered )
  
  ButtonGadget (1, 10, 10, 200 , 20, " Cliquez moi")
  CheckBoxGadget (2, 10, 40, 200 , 20, " Cochez moi ")
  StringGadget(3,10,70,100,20,"")

  If CreateMenu (0, WindowID (0))
    MenuTitle (" Menu ")
    MenuItem (1, " Item 1")
    MenuItem (2, " Item 2")
    MenuItem (3, " Item 3")
  EndIf
  
  Repeat
    Event = WaitWindowEvent ()
    
    Select Event
    
      Case #PB_Event_Gadget
        Select EventGadget ()
          Case 1 : Debug " Bouton cliqué !"
          Case 2 : Debug " Case à cocher cliquée !"
          Case 3 
            Select EventType()
              Case #PB_EventType_Focus      : Debug "Focus dans Champ éditable  !"
              Case #PB_EventType_Change     : Debug "Champ éditable en cours de modification !"  
              Case #PB_EventType_LostFocus  : Debug "Suis sorti du champ éditable!"  
            EndSelect
        EndSelect
      
      Case #PB_Event_Menu
        Select EventMenu ()
          Case 1 : Debug " Menu item 1 cliqué !"
          Case 2 : Debug " Menu item 2 cliqué !"
          Case 3 : Debug " Menu item 3 cliqué !"
        EndSelect
    
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf

Re: Evennements et StringGadget

Publié : ven. 11/déc./2015 14:24
par Shadow
Salut,

Code : Tout sélectionner

If OpenWindow (0, 0, 0, 230 , 120, " Exemple de gestion des évènements ...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered )
 
  ButtonGadget (1, 10, 10, 200 , 20, " Cliquez moi")
  CheckBoxGadget (2, 10, 40, 200 , 20, " Cochez moi ")
  StringGadget(3,10,70,100,20,"")

  If CreateMenu (0, WindowID (0))
    MenuTitle (" Menu ")
    MenuItem (1, " Item 1")
    MenuItem (2, " Item 2")
    MenuItem (3, " Item 3")
  EndIf
 
  Repeat
    Event = WaitWindowEvent ()
   
    Select Event
   
      Case #PB_Event_Gadget
        Select EventGadget ()
          Case 1 : Debug " Bouton cliqué !"
          Case 2 : Debug " Case à cocher cliquée !"
          Case 3 
            
            Select EventType()
                
              Case #PB_EventType_Focus
                Debug " Champ éditable cliqué !"
                
            EndSelect
            
        EndSelect
     
      Case #PB_Event_Menu
        Select EventMenu ()
          Case 1 : Debug " Menu item 1 cliqué !"
          Case 2 : Debug " Menu item 2 cliqué !"
          Case 3 : Debug " Menu item 3 cliqué !"
        EndSelect
   
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf

Re: Evennements et StringGadget

Publié : ven. 11/déc./2015 15:23
par Aliass
Merci beaucoup pour ces précisions.

Donc si j'ai bien compris :
- Le gadget StringGadget génére plusieurs événements (ce qui ne semble pas être le cas de ButtonGadget par exemple),
- #PB_Event_Gadget réagit à tous ces événements,
- Je dois donc appliquer un 2eme filtre avec EventType() pour traiter précisément l'événement (prise de focus, perte de focus, saisie d'une caractère, etc.) qui a été détecté.