(Résolu] StringGadget conditionné
Publié : lun. 08/avr./2013 9:05
Je fais en ce moment un petit programme qui permet de vérifier le code INSEE de chacun et je m’embête pour la saisie du département Corse, car on peut avoir 2A ou 2B, ce qui fait que je ne peut pas faire une entrée numérique, mais je voudrais éviter qu'on puisse taper 2F ou 5Y.
Donc si le premier caractère tapé est un 2, le suivant ne peux être que A ou B exclusivement, mais peut être bien sûr n'importe quel chiffre de 0 à 9
si le premier chiffre n'est pas un 2, le suivant ne doit être qu'un chiffre de 0 à 9 uniquement.
J'avais pensé à un sous classement, mais je ne m'en sors pas, car je ne récupère pas mon entrée.
voici mon idée:
Si quelqu'un veut bien m'aider, je le remercie énormément à l'avance.
Donc si le premier caractère tapé est un 2, le suivant ne peux être que A ou B exclusivement, mais peut être bien sûr n'importe quel chiffre de 0 à 9
si le premier chiffre n'est pas un 2, le suivant ne doit être qu'un chiffre de 0 à 9 uniquement.
J'avais pensé à un sous classement, mais je ne m'en sors pas, car je ne récupère pas mon entrée.
voici mon idée:
Code : Tout sélectionner
;Sous classement
Global AncienneValeur
;Une procédure de sous-classement pour le gadget chaîne.
Procedure.i MonStringGadget(hWnd, uMsg, wParam, lParam)
Protected Resultat
Select uMsg
Case #WM_CHAR
If (wParam >=48 And wParam<= 57) Or wParam = #VK_BACK
Resultat = CallWindowProc_(AncienneValeur, hWnd, uMsg, wParam, lParam)
EndIf
EndSelect
ProcedureReturn Resultat
EndProcedure
Procedure.i MonStringGadget2(hWnd, uMsg, wParam, lParam)
Protected Resultat
Select uMsg
Case #WM_CHAR
If (wParam >= 'a' And wParam <= 'b') Or (wParam >=48 And wParam<= 57) Or wParam = #VK_BACK
Resultat = CallWindowProc_(AncienneValeur, hWnd, uMsg, wParam, lParam)
EndIf
EndSelect
ProcedureReturn Resultat
EndProcedure
If OpenWindow(0, 100, 200, 300, 100, "Base démo sous-classement 3", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
StringGadget(0, 60, 40, 180,20,"")
Repeat
If Left(GetGadgetText(0), 1) = "1" Or Left(GetGadgetText(0), 1) > "2"
MonStringGadget(hWnd, uMsg, wParam, lParam)
;Sous_classement de la chaîne de gadget par le remplacement procédure de fenêtre c'est par une des nôtres.
AncienneValeur = SetWindowLong_(GadgetID(0), #GWL_WNDPROC, @MonStringGadget())
ElseIf Left(GetGadgetText(0), 1) = "2"
MonStringGadget2(hWnd, uMsg, wParam, lParam)
;Sous_classement de la chaîne de gadget par le remplacement procédure de fenêtre c'est par une des nôtres.
AncienneValeur = SetWindowLong_(GadgetID(0), #GWL_WNDPROC, @MonStringGadget2())
EndIf
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
