Bonjour,
Je souhaite programmer une serie de stringgdagets qui se remplissent avec des nombres et pour gagner du temps à la saisie, je veux que la touche "entrée" remplace la touche Tab pour sauter au gadget suivant(pour cette série de gadget uniquement). Avez vous une idée ?
Bonne soirée.
StringGadget - simulation de la touche Tab
Bonjour à tous
Tu peux assayer ce code si tu veux !
Tu peux assayer ce code si tu veux !
Code : Tout sélectionner
Enumeration
#Win0
#Str0
#Str1
#Str2
#Str3
EndEnumeration
Procedure Open_Win0()
If OpenWindow(#Win0, 339, 296, 306, 263, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
If CreateGadgetList(WindowID(#Win0))
StringGadget(#Str0, 70, 60, 160, 20, "")
StringGadget(#Str1, 70, 100, 160, 20, "")
StringGadget(#Str2, 70, 140, 160, 20, "")
StringGadget(#Str3, 70, 180, 160, 20, "")
EndIf
EndIf
EndProcedure
Open_Win0()
Resultat = CreateToolBar(#PB_Any, #Win0)
AddKeyboardShortcut(#Win0,#PB_Shortcut_Return,15)
SetActiveGadget(#Str0)
Repeat ; Start of the event loop
Event = WaitWindowEvent() ; This line waits until an event is received from Windows
Menu = EventMenu()
GadgetID = EventGadget() ; Is it a gadget event?
If Event = #PB_Event_Gadget
If GadgetID = #Str0
ElseIf GadgetID = #Str1
ElseIf GadgetID = #Str2
ElseIf GadgetID = #Str3
EndIf
EndIf
If Menu = 15
keybd_event_(#vk_tab,0,0,0)
Menu=0
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
End
Denis
Bonne Jounée à tous
Bonne Jounée à tous
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.
voilà
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
;-
voilà
