Evennements et StringGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Aliass
Messages : 23
Inscription : lun. 17/sept./2012 8:09

Evennements et StringGadget

Message 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
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Evennements et StringGadget

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Shadow
Messages : 1413
Inscription : mer. 04/nov./2015 17:39

Re: Evennements et StringGadget

Message 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
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Aliass
Messages : 23
Inscription : lun. 17/sept./2012 8:09

Re: Evennements et StringGadget

Message 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é.
Répondre