Page 1 sur 1

[RESOLU] Gérer le Tab et le Return sur un StringGadget

Publié : mar. 10/janv./2012 22:12
par fd
Bonjour,

Voici la problématique : j'utilise un premier String dans lequel il est saisi une valeur (numérique), lorsque le champ est quitté (Tab) le second String est rempli de la valeur du premier.
Dans le second String la sortie par le Tab ou Return est interprétée, ici remplissage du listicon (utilisation du menu_0). La valeur du String_2 +1 alimente le String_1 pour recommencer la saisie suivante. Puis réinitialisation du fonctionnement normal. Or le Tab n'est plus géré dans le String_1.

Je suis obligé d'annuler le fonctionnement des raccourcis, car il y a d'autres gadgets dans mon programme.

Avez-vous déjà vu ce problème ? Voici mon code (désolé c'est un peu long) ... Merci

Code : Tout sélectionner

Enumeration
  #Window_0 : #String_1 : #String_2 : #ListIcon_0 : #Menu_0
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 5, 5, 200,300, "Test",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    StringGadget(#String_1,10,20, 130, 20, "")
    StringGadget(#String_2,10,50, 130, 20, "") 
    ListIconGadget(#ListIcon_0, 10, 100, 130, 150, "String_1", 60, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
    AddGadgetColumn(#ListIcon_0, 1, "String_2", 60)
  EndIf  
  SetActiveGadget(#String_1)
EndProcedure

Open_Window_0()

Quit = 0

Repeat 
  
  EventID = WaitWindowEvent()
  
  Select EventWindow() 
    Case  #Window_0
      Select EventID 
        Case #PB_Event_Gadget 
          EvtGadget = EventGadget() 
          Select EvtGadget  
            Case #String_1
              If EventType() = #PB_EventType_Focus            
                SendMessage_(GadgetID(#String_1), #EM_SETSEL, Len(GetGadgetText(#String_1)),Len(GetGadgetText(#String_1)))                  
              EndIf  
              If EventType() = #PB_EventType_LostFocus       
                SetGadgetText(#String_2,Trim(GetGadgetText(#String_1)))                
              EndIf
            Case #String_2
              If EventType() = #PB_EventType_Focus 
                SendMessage_(GadgetID(#String_2), #EM_SETSEL, Len(GetGadgetText(#String_2)),Len(GetGadgetText(#String_2)))
                AddKeyboardShortcut(#Window_0,#PB_Shortcut_Return, #Menu_0)
                AddKeyboardShortcut(#Window_0,#PB_Shortcut_Tab, #Menu_0)
              EndIf
          EndSelect 
          
        Case #PB_Event_CloseWindow 
          Quit = 1 
          
        Case #PB_Event_Menu     
            Select EventMenu()     
               Case #Menu_0 
                 RemoveKeyboardShortcut(#Window_0,#PB_Shortcut_Return)
                 RemoveKeyboardShortcut(#Window_0, #PB_Shortcut_Tab)  
                 AddKeyboardShortcut(#Window_0, #PB_Shortcut_Tab, #PB_Shortcut_Tab)                      
                 AddGadgetItem(#ListIcon_0,-1,GetGadgetText(#String_1)+Chr(10)+GetGadgetText(#String_2))
                 Texte.s = Str(Val(GetGadgetText(#String_2))+1)
                 SetGadgetText(#String_2,"")
                 SetGadgetText(#String_1,Texte)
                 SetActiveGadget(#String_1)           
            EndSelect
             
      EndSelect           
  EndSelect 

Until Quit = 1

Re: Gérer le Tab et le Return sur un StringGadget

Publié : mar. 10/janv./2012 22:34
par case
pourquoi utilise tu des shortcuts je ne sais pas si j'ai bien compris ce que tu veux faire...

Code : Tout sélectionner

Enumeration
  #Window_0 : #String_1 : #String_2 : #ListIcon_0 : #Menu_0
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 5, 5, 200,300, "Test",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    StringGadget(#String_1,10,20, 130, 20, "")
    StringGadget(#String_2,10,50, 130, 20, "")
    ListIconGadget(#ListIcon_0, 10, 100, 130, 150, "String_1", 60, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection)
    AddGadgetColumn(#ListIcon_0, 1, "String_2", 60)
  EndIf 
  SetActiveGadget(#String_1)
EndProcedure

Open_Window_0()

Quit = 0

Repeat
 
  EventID = WaitWindowEvent()
 
  Select EventWindow()
    Case  #Window_0
        ;Debug EventID
      Select EventID
        Case #PB_Event_Gadget
          EvtGadget = EventGadget()
          Select EvtGadget 
            
            Case #String_1
              If EventType() = #PB_EventType_Focus           
                SendMessage_(GadgetID(#String_1), #EM_SETSEL, Len(GetGadgetText(#String_1)),Len(GetGadgetText(#String_1)))                 
              EndIf 
              If EventType() = #PB_EventType_LostFocus       
                SetGadgetText(#String_2,Trim(GetGadgetText(#String_1)))               
              EndIf
            Case #String_2
              If EventType() = #PB_EventType_Focus
                SendMessage_(GadgetID(#String_2), #EM_SETSEL, Len(GetGadgetText(#String_2)),Len(GetGadgetText(#String_2)))
                ;AddKeyboardShortcut(#Window_0,#PB_Shortcut_Return, #Menu_0)
                ;AddKeyboardShortcut(#Window_0,#PB_Shortcut_Tab, #Menu_0)
              EndIf
              If EventType() = #PB_EventType_LostFocus       
                 AddGadgetItem(#ListIcon_0,-1,GetGadgetText(#String_1)+Chr(10)+GetGadgetText(#String_2))
                 Texte.s = Str(Val(GetGadgetText(#String_2))+1)             
                 SetGadgetText(#String_2,"")
                 SetGadgetText(#String_1,Texte)
                 SetActiveGadget(#String_1)    
              EndIf
          EndSelect
         
        Case #PB_Event_CloseWindow
          Quit = 1                      
      EndSelect           
  EndSelect

Until Quit = 1

Re: Gérer le Tab et le Return sur un StringGadget

Publié : mar. 10/janv./2012 22:54
par fd
Heu. Pour passer d'un champ de saisie à l'autre en gérant aussi la touche Entrée.

Re: Gérer le Tab et le Return sur un StringGadget

Publié : mer. 11/janv./2012 0:49
par case
ah mais pour le tab c'est pas la peine de le gerer vu qu'il est deja gere nativement.. le return je crois qu'il y a un truc... faut que je fouine mes vieux codes j'avais fait un truc il me semble...

Re: [RESOLU] Gérer le Tab et le Return sur un StringGadget

Publié : mer. 11/janv./2012 7:09
par fd
Merci.
J'ai séparé la gestion de la touche Entrée avec addkey... et mis la gestion du Tab dans LostFocus. Cela fonctionne. Il faut juste que je ne traite pas le LostFocus lorsque celui ci a été provoqué par la touche Entrée.