[Résolu] routine qui n'accepte qu'un caractère autorisé

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[Résolu] routine qui n'accepte qu'un caractère autorisé

Message par Micoute »

Bonjour à tous,

je viens de nouveau solliciter votre aide précieuse, car j'aimerais faire une routine qui n'accepte qu'un seul caractère parmi ceux qui sont autorisés.

En fait j'essaie de remplacer un ComboBoxGadget.

Je joins mon code de test et je vous remercie d'avance.

Code : Tout sélectionner

Enumeration
  #Fenetre_principale
EndEnumeration

Enumeration
  #Str_Genre
EndEnumeration

Enumeration
  #Police  
EndEnumeration

Global.l Evenement

LoadFont(#Police, "Arial Nova", 30, #PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(#Police))

Procedure Quitter()  
  CloseWindow(#Fenetre_principale)
  End
EndProcedure

Procedure Definir_Genre()
  Protected LngTxt = 0, Lettre
  Select EventGadget()
    Case #Str_Genre
      Select EventType()
        Case #PB_EventType_Change
          LngTxt = Len(GetGadgetText(#Str_Genre))
          Lettre =Asc(Mid(GetGadgetText(#Str_Genre),LngTxt ,1))
          Select Lettre
            Case 'f', 'm'
              If Len(GetGadgetText(#Str_Genre)) = 1
                SetGadgetText(#Str_Genre,UCase(GetGadgetText(#Str_Genre)))
              EndIf
          EndSelect
      EndSelect
  EndSelect 
EndProcedure

Procedure Fenetre_principale()
  If OpenWindow(#Fenetre_principale, 0, 0, 400, 400, "Test M/F", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    StringGadget(#Str_Genre, 20, 10, 70, 60, "", #ES_CENTER)
    SetGadgetAttribute(#Str_Genre, #PB_String_MaximumLength, 1)
    
    SetActiveGadget(#Str_Genre)
    
    BindEvent(#PB_Event_CloseWindow, @Quitter())
    BindGadgetEvent(#Str_Genre, @Definir_Genre())
  EndIf
EndProcedure

Fenetre_principale()

;- Boucle
Repeat
  Evenement = WaitWindowEvent()
ForEver
Dernière modification par Micoute le mar. 30/oct./2018 13:28, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Christophe
Messages : 43
Inscription : lun. 22/oct./2018 19:34
Localisation : Haisnes (62)

Re: routine qui n'accepte qu'un caractère autorisé

Message par Christophe »

Bonjour Micoute

essai ça

Code : Tout sélectionner

Enumeration
  #Fenetre_principale
EndEnumeration

Enumeration
  #Str_Genre
EndEnumeration

Enumeration
  #Police 
EndEnumeration

Global.l Evenement

LoadFont(#Police, "Arial Nova", 30, #PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(#Police))

Procedure Quitter() 
  CloseWindow(#Fenetre_principale)
  End
EndProcedure


Procedure Definir_Genre()
  
  Select EventwParam()
    Case #VK_M, #VK_F
      SetGadgetText(#Str_Genre, Chr(EventwParam()))
  
    Default
      SetGadgetText(#Str_Genre,"")
      
  EndSelect
 
EndProcedure

  
  
Procedure Fenetre_principale()
  If OpenWindow(#Fenetre_principale, 0, 0, 400, 400, "Test M/F", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    StringGadget(#Str_Genre, 20, 10, 70, 60, "", #ES_CENTER | #PB_String_UpperCase)
    SetGadgetAttribute(#Str_Genre, #PB_String_MaximumLength, 1)
   
    SetActiveGadget(#Str_Genre)
   
    BindEvent(#PB_Event_CloseWindow, @Quitter())
    BindGadgetEvent(#Str_Genre, @Definir_Genre())
    
  EndIf
EndProcedure

Fenetre_principale()

;- Boucle
Repeat
  Evenement = WaitWindowEvent()
ForEver
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: routine qui n'accepte qu'un caractère autorisé

Message par Ar-S »

En gardant ton code

Code : Tout sélectionner

Enumeration
  #Fenetre_principale
EndEnumeration

Enumeration
  #Str_Genre
EndEnumeration

Enumeration
  #Police 
EndEnumeration

Global.l Evenement

LoadFont(#Police, "Arial Nova", 30, #PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(#Police))

Procedure Quitter() 
  CloseWindow(#Fenetre_principale)
  End
EndProcedure

; ICI TU CREES TES FILTRES
Procedure Checkit(filtre1.s,filtre2.s)
  
  If GetGadgetText(#Str_Genre) = filtre1 Or GetGadgetText(#Str_Genre) = filtre2
    ProcedureReturn 1
    Else
      SetGadgetText(#Str_Genre,"")
      ProcedureReturn 0
  EndIf

EndProcedure


Procedure Definir_Genre()
  Protected LngTxt = 0, Lettre
  Select EventGadget()
    Case #Str_Genre
      Select EventType()
        Case #PB_EventType_Change
         
          ; VERIFICATION
          Checkit("M","F")
          
      EndSelect
  EndSelect
EndProcedure

Procedure Fenetre_principale()
  If OpenWindow(#Fenetre_principale, 0, 0, 400, 400, "Test M/F", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    StringGadget(#Str_Genre, 20, 10, 70, 60, "", #ES_CENTER)
    SetGadgetAttribute(#Str_Genre, #PB_String_MaximumLength, 1)
   
    SetActiveGadget(#Str_Genre)
   
    BindEvent(#PB_Event_CloseWindow, @Quitter())
    BindGadgetEvent(#Str_Genre, @Definir_Genre())
  EndIf
EndProcedure

Fenetre_principale()

;- Boucle
Repeat
  Evenement = WaitWindowEvent()
ForEver
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Christophe
Messages : 43
Inscription : lun. 22/oct./2018 19:34
Localisation : Haisnes (62)

Re: routine qui n'accepte qu'un caractère autorisé

Message par Christophe »

@Ar-s

Tu devrais rajouter #PB_String_UpperCase au StringGadget car sinon il faut être obligatoirement en majuscule pour que ton code fonctionne
Répondre