String Gadget Numérique

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

String Gadget Numérique

Message par Lord Nelson »

Bonsoir,

Bha voilà, j'en avais besoin donc j'ai créer ça, c'est très simple mais rudement efficace !

Code : Tout sélectionner

Procedure.l IsNumerique(Chaine$)
  
  If Chaine$ = "" Or Chaine$ = "."
    ProcedureReturn #False
  EndIf
  
  For Caractere = 0 To 255
    
    Select Caractere
        
      Case 0 To 45, 47, 58 To 255
        
        If FindString(Chaine$, Chr(Caractere), 1)
          ProcedureReturn #False
        EndIf
        
    EndSelect
    
  Next
  
  If CountString(Chaine$, ".") > 1 
    ProcedureReturn #False
  EndIf
  
  ProcedureReturn #True
EndProcedure

If OpenWindow(0, 0, 0, 322, 205, "Entrez un nombre", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  StringGadget(1, 8,  35, 306, 20, "")
  
  Repeat
    
    Evenement = WaitWindowEvent(1)
    EventType = EventType() 
    
    If EventType = #PB_EventType_Change
      
      Chaine$ = GetGadgetText(1)
      
      If Not IsNumerique(Chaine$)
        
        If SauvegardeChaine$ > ""
          
          SetGadgetText(1, SauvegardeChaine$)
          
          keybd_event_(#VK_END,0,0,0)
          keybd_event_(#VK_END,0,2,0)
          
        Else
          SetGadgetText(1, "")
          
        EndIf
        
      Else
        SauvegardeChaine$ = Chaine$
        
      EndIf
      
    EndIf
    
    
  Until Evenement = #PB_Event_CloseWindow
  
EndIf
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: StringGadget Numérique

Message par falsam »

Sujet déja évoqué mais c'est pas mal. Je dis pas mal car on ne peut pas effacer le 1er caractère saisi.

Ensuite j'aurais appelé cette procédure IsDecimal()

Amélioration à apporter : Spécifier le nombre de chiffres aprés le point décimal.

Fonction : IsDecimal(Chaine$, Decimal = 2) (2 par défaut)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Lord Nelson
Messages : 355
Inscription : dim. 01/déc./2013 15:29

Re: StringGadget Numérique

Message par Lord Nelson »

Correction:

Code : Tout sélectionner

Procedure.l IsNumerique(Chaine$)
 
  If Chaine$ = "" Or Chaine$ = "."
    ProcedureReturn #False
  EndIf
 
  For Caractere = 0 To 255
   
    Select Caractere
       
      Case 0 To 45, 47, 58 To 255
       
        If FindString(Chaine$, Chr(Caractere), 1)
          ProcedureReturn #False
        EndIf
       
    EndSelect
   
  Next
 
  If CountString(Chaine$, ".") > 1
    ProcedureReturn #False
  EndIf
 
  ProcedureReturn #True
EndProcedure

If OpenWindow(0, 0, 0, 322, 205, "Entrez un nombre", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  StringGadget(1, 8,  35, 306, 20, "")
  
  Repeat
    
    Evenement = WaitWindowEvent(1)
    EventType = EventType() 
    
    If EventType = #PB_EventType_Change
      
      Chaine$ = GetGadgetText(1)
      
      If Not IsNumerique(Chaine$)
        
        If SauvegardeChaine$ > ""
          
          If Chaine$ = ""
            SauvegardeChaine$ = ""
          EndIf
          
          SetGadgetText(1, SauvegardeChaine$)
          
          keybd_event_(#VK_END,0,0,0)
          keybd_event_(#VK_END,0,2,0)
          
        Else
          SetGadgetText(1, "")
          
        EndIf
        
      Else
        
        SauvegardeChaine$ = Chaine$
        
      EndIf
      
    EndIf
    
  Until Evenement = #PB_Event_CloseWindow
  
EndIf
Pour le reste, non, c'est bien Si numérique et pas décimale car tu peut entrer un nombre entier comme décimale !
De plus, pourquoi Spécifier le nombre de chiffres aprés le point décimal ?
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: StringGadget Numérique

Message par falsam »

Lord Nelson a écrit :De plus, pourquoi Spécifier le nombre de chiffres aprés le point décimal ?
Parce que c'est souvent le cas dans des applications de gestion.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: StringGadget Numérique

Message par nico »

Je t'encourage pas à poster dans cette section, "Trucs et astuces" est une vitrine; c'est pas un fourre tout.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: StringGadget Numérique

Message par falsam »

Nico tu me surprends. Tu ne lui a pas dit d'utiliser une méthode de subclassing pour contrôler la saisie avant l'affichage :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre