Saut d'un gadget à l'autre par la touche "Entrée"

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
marco22
Messages : 2
Inscription : sam. 26/sept./2015 9:51

Saut d'un gadget à l'autre par la touche "Entrée"

Message par marco22 »

Bonjour à tous,

Débutant en PB, et venant du VisualBasic, j'essaie de créer une petite appli de type mathématique/statistique.
Pour saisir les nombres, j'utilise une série de StringGadget(s).
J'aimerais passer d'un StringGadget au suivant en validant par la touche "Entrée" (un peu comme dans Excel)
Ci-après mon code, qui ne fonctionne pas bien car, dès que deux caractères sont saisis, le gadget suivant est activé sans que la touche "Entrée" ne soit sollicitée : bref ! je patauge :mrgreen:

Merci de votre aide.

Code : Tout sélectionner

; Définition des noms des objets
    #ID_fenetre = 0 ; Déclaration d'une constante pour l'ID de la fenêtre
    #ID_Saisie1 = 1 ; Déclaration d'une constante pour l'ID du gadget
    #ID_Saisie2 = 2 
    #ID_Saisie3 = 3 
    
; Ouverture de la fenêtre de l'application
    OpenWindow (#ID_fenetre,10,10,250,150,"",#PB_Window_SystemMenu)
    
; Affichage des gadgets de saisie StringGadget(#Gadget, x, y, Largeur, Hauteur, Texte$ [, Options])
    StringGadget (#ID_Saisie1,110,10,100,30,"")
    StringGadget (#ID_Saisie2,110,39,100,30,"")
    StringGadget (#ID_Saisie3,110,68,100,30,"")   
    SetActiveGadget(1)
    
; Procédure de type "callback" pour     
  Procedure SaisieDonnees()   
        SetActiveGadget(EventGadget()+1)
  EndProcedure
   

; Programme principal
  Repeat
    Evenement = WaitWindowEvent()
    If Evenement = KeyboardReleased(#PB_Key_Return) 
      BindGadgetEvent(EventGadget(), @SaisieDonnees())
    EndIf
  Until Evenement = #PB_Event_CloseWindow
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Saut d'un gadget à l'autre par la touche "Entrée"

Message par G-Rom »

Bonjour et bienvenue marco , voila ton code corrigé :

Code : Tout sélectionner

; Définition des noms des objets
    #ID_fenetre = 0 ; Déclaration d'une constante pour l'ID de la fenêtre
    #ID_Saisie1 = 0 ; Déclaration d'une constante pour l'ID du gadget
    #ID_Saisie2 = 1 
    #ID_Saisie3 = 2 
    
    #EVENT_SUIVANT = $FF
    item_selected  = 0
    flag           = #False
    
; Ouverture de la fenêtre de l'application
    OpenWindow (#ID_fenetre,10,10,250,150,"",#PB_Window_SystemMenu)
    
    AddKeyboardShortcut(#ID_fenetre, #PB_Shortcut_Return, #EVENT_SUIVANT)
    
; Affichage des gadgets de saisie StringGadget(#Gadget, x, y, Largeur, Hauteur, Texte$ [, Options])
    StringGadget (#ID_Saisie1,110,10,100,30,"")
    StringGadget (#ID_Saisie2,110,40,100,30,"")
    StringGadget (#ID_Saisie3,110,70,100,30,"")   

;
   

; Programme principal
  Repeat
    
    Repeat
      event = WindowEvent()
      
      If event = #PB_Event_CloseWindow
        End
      EndIf 
      
      If event = #PB_Event_Menu
        If EventMenu() = #EVENT_SUIVANT
          item_selected+1
          item_selected%3
          flag = #False
          Debug item_selected
        EndIf 
      EndIf 
      
      
    Until event = 0
    
    
    
    
    If item_selected>=0 And flag = #False
        flag = #True
        SetActiveGadget(item_selected)
    EndIf
    
    
    For i = 0 To 2
      If GetActiveGadget() = i And flag = #True
        item_selected = i
      EndIf 
    Next 
    
    
    
ForEver
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Saut d'un gadget à l'autre par la touche "Entrée"

Message par microdevweb »

Un autre manière de faire (inspiré du code de G-Rom)

Code : Tout sélectionner

; Définition des noms des objets
    #ID_fenetre = 0 ; Déclaration d'une constante pour l'ID de la fenêtre
    #ID_Saisie1 = 0 ; Déclaration d'une constante pour l'ID du gadget
    #ID_Saisie2 = 1
    #ID_Saisie3 = 2
   
    #EVENT_SUIVANT = 0
    Procedure NextGadget()
          id=GetActiveGadget()
          id+1
          If id>#ID_Saisie3
                id=#ID_Saisie1
          EndIf
          SetActiveGadget(id)
    EndProcedure 
; Ouverture de la fenêtre de l'application
    OpenWindow (#ID_fenetre,10,10,250,150,"",#PB_Window_SystemMenu)
   AddKeyboardShortcut(#ID_fenetre, #PB_Shortcut_Return, #EVENT_SUIVANT)
   BindEvent(#PB_Event_Menu,@NextGadget(),#ID_fenetre,#EVENT_SUIVANT)
; Affichage des gadgets de saisie StringGadget(#Gadget, x, y, Largeur, Hauteur, Texte$ [, Options])
    StringGadget (#ID_Saisie1,110,10,100,30,"")
    StringGadget (#ID_Saisie2,110,40,100,30,"")
    StringGadget (#ID_Saisie3,110,70,100,30,"")   
    SetActiveGadget(#ID_Saisie1)
  Repeat 
        event=WaitWindowEvent()    
  Until event = #PB_Event_CloseWindow
   
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
marco22
Messages : 2
Inscription : sam. 26/sept./2015 9:51

Re: Saut d'un gadget à l'autre par la touche "Entrée"

Message par marco22 »

Quelle réactivité ! Bravo !

Les codes fonctionnent parfaitement : je vais maintenant essayer de bien les comprendre.

Un grand merci donc à microdevweb et à G-Rom.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Saut d'un gadget à l'autre par la touche "Entrée"

Message par nico »

Manque une vérif dans le code de microdeweb:

Code : Tout sélectionner

Procedure NextGadget()
  If ID >= #ID_Saisie1 And ID <= #ID_Saisie3
    id=GetActiveGadget()
    id+1
    If id>#ID_Saisie3
      id=#ID_Saisie1
    EndIf
    SetActiveGadget(id)
  EndIf
EndProcedure 
Répondre