voici une méthode un peu particulière.
elle a le mérite d'automatiser complètement la gestion du passage au gadget suivant. tu n'a pas besoin de gérer dans ta boucle d'évenements classique l'état du clavier et tout ce qui en résulte.
tu créé juste un StringGadget2() dans lequel tu indiques quel gadget tu veux activer si RETURN est saisie par l'utilisateur.
la procédure callback du StringGadget2() fera le travail de façon transparente pour toi.
Code : Tout sélectionner
;-
;- EXTENSION STRINGGADGET2
;-
Procedure.l StringGadget2_Callback(hwnd.l, msg.l, wParam.l, lParam.l)
Protected result.l
result = CallWindowProc_(GetProp_(hwnd, "USER_OLDPROC"), hwnd, msg, wParam, lParam)
If msg = #WM_CHAR
If wParam = #VK_RETURN
SetActiveGadget(GetProp_(hwnd, "USER_NEXTGAD"))
EndIf
EndIf
ProcedureReturn result
EndProcedure
Procedure.l StringGadget2(gadget.l, x.l, y.l, w.l, h.l, string.s, flags.l = #Null, nextgadget.l = -1)
Protected hGadget.l, result.l
result = StringGadget(gadget, x, y, w, h, string, flags)
If nextgadget <> -1
hGadget = GadgetID(gadget)
SetGadgetData(gadget, nextgadget)
SetProp_(hGadget, "USER_NEXTGAD", nextgadget)
SetProp_(hGadget, "USER_OLDPROC", SetWindowLong_(hGadget, #GWL_WNDPROC, @StringGadget2_Callback()))
EndIf
ProcedureReturn result
EndProcedure
;-
;- EXAMPLE D'UTILISATION
;-
Enumeration
#Win0
#Frame0
#Str0
#Str1
#Str2
#Str3
#Str4
EndEnumeration
If OpenWindow(#Win0, 339, 296, 210, 263, "test", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Win0))
Frame3DGadget(#Frame0, 10, 10, 190, 150, "Formulaire")
StringGadget2(#Str0, 25, 35, 160, 20, "", #PB_String_Numeric, #Str1) ; ici, on passera au gadget #Str1 si RETURN
StringGadget2(#Str1, 25, 65, 160, 20, "", #PB_String_Numeric, #Str2) ; ici, on passera au gadget #Str2 si RETURN
StringGadget2(#Str2, 25, 95, 160, 20, "", #PB_String_Numeric, #Str3) ; ici, on passera au gadget #Str3 si RETURN
StringGadget2(#Str3, 25, 125, 160, 20, "", #PB_String_Numeric, #Str0) ; ici, on passera au gadget #Str0 si RETURN
StringGadget2(#Str4, 25, 210, 160, 20, "") ; ici, pas de gadget suivant
SetActiveGadget(#Str0)
EndIf
EndIf
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
End
;-
;- FIN
;-