IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Empêcher la saisie de caractères autres que les chiffrres


Sujet :

Langage Delphi

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Empêcher la saisie de caractères autres que les chiffrres
    Bonjour à tous,
    j'aimerais empêcher la saisie de caractères autres que les chiffres dansune zone de texte(Edit). j'ai beau utilisé la fonction ord ou le cast Byte, je n'ai pas le résultat escompté. j'ai comme message "type de données incompatible"
    Quelqu'un n'aurait pas un bout de code qui pourrais m'aider à surmonter cette difficulté.
    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut


    Pour les vieux Delphi : Comment ne rentrer que des chiffres dans un TEdit ?

    Pour les versions plus récente (2005+) : Documentation Embarcadero - TEdit.NumbersOnly
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 556
    Points : 3 933
    Points
    3 933
    Par défaut
    Salut

    Ce serait sans doute plus facile de répondre si tu nous montrais ton code

    @+

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  4. #4
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    composant spinedit
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  5. #5
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 771
    Points
    2 771
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Pour les versions plus récente (2005+) : Documentation Embarcadero - TEdit.NumbersOnly

    merci, sa je ne le savais pas
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut
    Bonjour,

    A toutes fins utiles je te donne le code que j'utilise qui est un peu plus simple et me donne sarisfaction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function ConverStrToInt(TEMP:string;var Flag:Boolean):integer;
    if (TEMP<>'') and TEMP<>'-') then
      try  
    Result:=StrToInt(TEMP)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 111
    Points : 64
    Points
    64
    Par défaut
    Je complète ma réponse ci-dessus non terminée stupidement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    function ConverStrToInt(TEMP:string;var Flag:Boolean):integer;
    begin
       if (TEMP<>'') and (TEMP<>'-') then
          try
             Result:=StrToInt(TEMP);
          except
          on EConvertError do
             begin
             MessageDlg('Expression non valide'+#10+#10+
             'Seuls les chiffres sont admis.',mtError,[mbOK],0);
             Flag:=True;
             end;
          end
       else
       Result:=0;
    end;
     
    function ConverStrToFlo(TEMP:string;var Flag:Boolean):single;
    begin
       Flag:=False;
       if (TEMP<>'') and (TEMP<>'-') then
         begin
           try
           Flag:=False;
           Result:=StrToFloat(TEMP);
           except
           if (FDecSep=False) and (Pos('.',TEMP)<>0) then
             MessageDlg('Windows est configuré sur votre PC avec la virgule'+#10+
             'comme séparateur décimal.'+#10+#10+
             'Vous devez donc utiliser ce caractère à la place du point.',
             mtError,[mbOK],0)
           else if (FDecSep=True) and (Pos(',',TEMP)<>0) then
             MessageDlg('Windows est configuré sur votre PC avec le point'+#10+
             'comme séparateur décimal.'+#10+#10+
             'Vous devez donc utiliser ce caractère à la place de la virgule.',
             mtError,[mbOK],0)
           else
             MessageDlg('Expression non valide.'+#10+#10+
             'Seuls les chiffres et si nécessaire'+#10+
             'le signe - en tête sont acceptés.',mtError,[mbOK],0);
           Flag:=True;
           end;
         end
       else Result:=0;
    end;
     
    //Procedures d'appel
    procedure Form.EditIntChange(Sender:TObject);//pour un entier.
    var Resultat,TempI:integer;
         Flag:Boolean;
    begin
    TempI:=ConverStrToInt(EditInt.Text,Flag);
    if Flag=True then
      begin
        Flag:=False;EditInt.SetFocus;Exit;
      end;
    else Resultat:=TempI;
    end;
     
    procedure Form.EditFloatChange(Sender:TObject);//pour un flottant
    var Resultat,TempS:single;
    begin
    TempS:=ConverStrToFlo(EditFloat.Text,Flag);
    if Flag=True then
      begin
        Flag:=False;EditFloat.SetFocus;Exit;
      end
    else Resultat:=TempS;
    end;

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Points : 20
    Points
    20
    Par défaut
    Sinon, on peut utiliser l'évènement OnKeyPress du TEdit:

    Pour les anciennes version de Delphi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if (Ord(Key)>=32) and not(Key in ['0'..'9']) then
        Key := #7;
    end;
    A partir des versions Unicode de Delphi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if (Ord(Key)>=32) and not(CharInSet(Key, ['0'..'9'])) then
        Key := #7;
    end;
    Pour info, "Key := #7" provoque un son windows (ding)

    Pour aller un peu plus loin, pour les Float par exemple, on peut transformer automatiquement le point ou la virgule en format valide de Windows:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if (Ord(Key)>=32) and not(CharInSet(Key, ['0'..'9', ',', '.'])) then
        Key := #7;
      if (Key=',') or (Key='.') then
        Key := FormatSettings.DecimalSeparator;
    end;

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par Stevens.Georges Voir le message
    Je complète ma réponse ci-dessus non terminée stupidement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    function ConverStrToInt(TEMP:string;var Flag:Boolean):integer;
    begin
       if (TEMP<>'') and (TEMP<>'-') then
          try
             Result:=StrToInt(TEMP);
          except
          on EConvertError do
             begin
             MessageDlg('Expression non valide'+#10+#10+
             'Seuls les chiffres sont admis.',mtError,[mbOK],0);
             Flag:=True;
             end;
          end
       else
       Result:=0;
    end;
     
    function ConverStrToFlo(TEMP:string;var Flag:Boolean):single;
    begin
       Flag:=False;
       if (TEMP<>'') and (TEMP<>'-') then
         begin
           try
           Flag:=False;
           Result:=StrToFloat(TEMP);
           except
           if (FDecSep=False) and (Pos('.',TEMP)<>0) then
             MessageDlg('Windows est configuré sur votre PC avec la virgule'+#10+
             'comme séparateur décimal.'+#10+#10+
             'Vous devez donc utiliser ce caractère à la place du point.',
             mtError,[mbOK],0)
           else if (FDecSep=True) and (Pos(',',TEMP)<>0) then
             MessageDlg('Windows est configuré sur votre PC avec le point'+#10+
             'comme séparateur décimal.'+#10+#10+
             'Vous devez donc utiliser ce caractère à la place de la virgule.',
             mtError,[mbOK],0)
           else
             MessageDlg('Expression non valide.'+#10+#10+
             'Seuls les chiffres et si nécessaire'+#10+
             'le signe - en tête sont acceptés.',mtError,[mbOK],0);
           Flag:=True;
           end;
         end
       else Result:=0;
    end;
     
    //Procedures d'appel
    procedure Form.EditIntChange(Sender:TObject);//pour un entier.
    var Resultat,TempI:integer;
         Flag:Boolean;
    begin
    TempI:=ConverStrToInt(EditInt.Text,Flag);
    if Flag=True then
      begin
        Flag:=False;EditInt.SetFocus;Exit;
      end;
    else Resultat:=TempI;
    end;
     
    procedure Form.EditFloatChange(Sender:TObject);//pour un flottant
    var Resultat,TempS:single;
    begin
    TempS:=ConverStrToFlo(EditFloat.Text,Flag);
    if Flag=True then
      begin
        Flag:=False;EditFloat.SetFocus;Exit;
      end
    else Resultat:=TempS;
    end;
    Pour éviter les try..except, on peut utiliser les fonctions TryStrToInt pour la conversion des entiers, et TryStrToFloat pour les Float.
    Ces fonctions renvoient faux si la conversion est impossible

  10. #10
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 111
    Points : 171
    Points
    171
    Par défaut
    bon jour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
     
     var a :string ;
    begin
     if ord(key)>31 then    // si nés pas une touche comme esc, retour, sup ,...
    try
    a := tedit(sender).Text; // a :=  l'ancien valeur de tedit.text 
    Insert(key,a,tedit(sender).SelStart); //inserer key dans le texte 'A' dans la position de cursseur
    strtofloat( a); //convertire A en real   
    // strtoint (a);  ou en entier 
    except
    abort; // si la conversation 'strtofloat( a);' na pas réussi -- > annuler la saisie de tedit  
     
    end;
      end;

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/06/2011, 14h38
  2. C/S autre que les leaders?
    Par fredtheman dans le forum Bases de données
    Réponses: 13
    Dernier message: 19/05/2009, 12h45
  3. [VBA]Supprimer caractère autre que alphanumérique
    Par charliejo dans le forum VBA Access
    Réponses: 6
    Dernier message: 26/04/2007, 10h11
  4. Réponses: 3
    Dernier message: 01/03/2007, 14h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo