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

Composants VCL Delphi Discussion :

TEdit et contrôle des saisies


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier Avatar de Nzs26
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Points : 76
    Points
    76
    Par défaut TEdit et contrôle des saisies
    Bonjour,

    Alors je souhaite que dans ma zone de saisie l'utilisateur ne puisse entrer que des entiers. J'ai donc écrit la méthode suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // NOEMIE - function de test des entiers
    function T_frmData.fcTestInteger(strChaine : string; key : char) : string;
    begin
     // showmessage ('strChaine' + strChaine);
      if key  in ['0' .. '9'] then
        strChaine := strChaine + key;
       // showmessage('strChaine+key ' + strChaine);
      fcTestInteger := strChaine;
    end;
    Que j'appel de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TfrmCtrl.zsVirgKeyPress(Sender: TObject; var Key: Char);
    begin
      inherited;
      self.zsVirg.Text := _frmdata.fcTestInteger(self.zsVirg.Text, key)
    end;
    Le première caractère alphabétique que je tente d'entrer dans ma zone de saisie et accepté et ensuite les autres non, donc si vous avez une idée d'où cela pourrait venir ?

    Après l'écriture du premier caractère alphabétique dans ma zone de saisie, la fonction s'exécute correctement !

    La création de cette fonction à mis de côté l'attribution de la propriété Max Length de ma zone de saisie, si vous aviez aussi une idée de l'origine de ce problème ?

    Merci d'avance,

    NZs

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Pourquoi ne pas mettre directement le code dans le OnKeyPress sans utiliser de fonction ...

    Ca donnerai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TfrmCtrl.zsVirgKeyPress(Sender: TObject; var Key: Char);
    begin
      inherited;
      if not (Key in ['0'..'9',Chr(VK_DELETE),Chr(VK_BACK)]) then
        Key:=#0;
    end;
    A+

  3. #3
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Perso j'utilise un code similaire à ero-senin mais pour des besoins plus complexes il y a le TMaskEdit...

  4. #4
    Membre régulier Avatar de Nzs26
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Points : 76
    Points
    76
    Par défaut
    Alors j'utilise en fonction car ce contrôle doit être effectué sur plusieurs zones de saisies dans plusieurs formulaire différents donc au niveau de l'optimisation je trouvais cela préférable.

    Cependant, je vais essayer de ne pas utiliser de fonction pour observer si mon problème sera toujours présent ou non. Je vous tiens au courant ...

    NZs

  5. #5
    Membre régulier Avatar de Nzs26
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Points : 76
    Points
    76
    Par défaut
    Alors quand je n'utile pas de fonction, mon contrôle s'exécute correctement ...

    Mais vu qu je vais réutiliser plusieurs fois ce contrôle, j'ai réelement besoin de le traiter dans une fonction ...

    Mais du coup je ne vois pas du tout où se situe la source du problème ?

    NZs

  6. #6
    Membre régulier Avatar de Nzs26
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Points : 76
    Points
    76
    Par défaut
    Juste pour une culture personnelle et pour combler ma curiosité :

    j'ai compris le rôle de #0 mais théoriquement, il est interprété comme :
    - pas de caractère saisis
    - caractère null :''
    - autremement ?


  7. #7
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 678
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 678
    Points : 7 091
    Points
    7 091
    Par défaut
    Je dirais "caractère null", non ?
    Celui dont le code ascii est 0.

  8. #8
    Membre régulier Avatar de Nzs26
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Points : 76
    Points
    76
    Par défaut
    Oui au fond ça me paraîtrait logique

    Sinon, tu ne saurais pas pourquoi mon contrôle ne s'exécute pas de la manière manière selon qu'il se situe dans une fonction ou directement dans l'évènement ?

  9. #9
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Citation Envoyé par Lung Voir le message
    Je dirais "caractère null", non ?
    Celui dont le code ascii est 0.
    C'est cela oui

    Citation Envoyé par Nzs26 Voir le message
    Alors quand je n'utile pas de fonction, mon contrôle s'exécute correctement ...

    Mais vu qu je vais réutiliser plusieurs fois ce contrôle, j'ai réelement besoin de le traiter dans une fonction ...

    Mais du coup je ne vois pas du tout où se situe la source du problème ?

    NZs
    Si tu veux vraiment utiliser une fonction, fais comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function OnlyNumber(Key:Char):char;
    begin
      if not (Key in ['0'..'9',Chr(VK_DELETE),Chr(VK_BACK)]) then
        result:=#0
      else
        Result:=Key;
    end;
     
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      Key:=OnlyNumber(Key);
    end;
    Ca fonctionne

    A+

  10. #10
    Membre régulier Avatar de Nzs26
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Points : 76
    Points
    76
    Par défaut
    Efectivement, ta fonction s'exécutée correctement sauf que ( il y a toujours un sauf ^^ ), les '.' été accepté donc j'ai inclus la non admission du code ASCII du 'dot' dans ma méthode.

    Je laisse le code au cas où cela pourrait aider quelqu'un, même si l'optimisation est pas géniale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function T_frmData.fcTestInteger(key : char) : char;
    begin
      if not (key in ['0' .. '9', Chr(VK_DELETE), Chr(VK_BACK)]) then
        result := #0
      else
        begin
        if key = #46 then
          result := #0
        else
          result := key;
    end;
    En tous cas, merci beaucoup pour ta rapidité de réponse et ta grande aide

    NZs

  11. #11
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par Nzs26 Voir le message
    Efectivement, ta fonction s'exécutée correctement sauf que ( il y a toujours un sauf ^^ ), les '.' été accepté donc j'ai inclus la non admission du code ASCII du 'dot' dans ma méthode.
    Je ferai comme ceci plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function OnlyNumber(Key:Char):char;
    begin
      if not (Key in ['0'..'9',Chr(VK_BACK)]) then
        result:=#0
      else
        Result:=Key;
    end;
    Le VK_DELETE correspond à la touche Sup du pavé numérique (c'était une légère erreur de ma part ... )

    Citation Envoyé par Nzs26 Voir le message
    En tous cas, merci beaucoup pour ta rapidité de réponse et ta grande aide

    NZs
    Pas de soucis, c'est toujours un plaisir et bonne continuation pour la suite

  12. #12
    Membre régulier Avatar de Nzs26
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Points : 76
    Points
    76
    Par défaut
    J'étais arrivée à une optimisation similaire à la tienne, j'ai enlevé le contrôle ASCII pour le 'dot' et maintenant ça s'exécute correctement sans !

    Donc fonction terminée et très concluante

    NZs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. contrôles des champs saisis dans un formulaire
    Par barouz dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 06/12/2013, 13h55
  2. Réponses: 24
    Dernier message: 28/01/2011, 13h19
  3. Contrôle de saisie dans des cellules
    Par lenul78570 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/03/2010, 23h46
  4. Contrôle des saisies sous DeskI 11.5.0.0
    Par samy37 dans le forum Deski
    Réponses: 1
    Dernier message: 23/05/2008, 09h44
  5. Contrôle de saisi des textbox d'un gridview
    Par getz85 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 18/02/2008, 10h40

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