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

 Delphi Discussion :

TEdit et DecimalSeparator


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 50
    Points
    50
    Par défaut TEdit et DecimalSeparator
    Bonjour à tous,

    c'est clairement débile mais j'utilise une fonction pour ne permettre que des entier dans une TEdit et bizarement il autorise le point decimal '.' alors que je ne l'autorise pas. Est ce normal??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function AllowOnlyDigit (Key :Char) : Char;
    begin
      if (Key in ['0'..'9',Chr(VK_BACK),Chr(VK_DELETE)]) then
        AllowOnlyDigit:=Key
      else
        AllowOnlyDigit:=#0;
    end;
    Merci pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Supprime VK_DELETE de ton if.
    A savoir qu'un Chr(VK_DELETE) renvoie un point (.)

    @+ Claudius

  3. #3
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 50
    Points
    50
    Par défaut
    Et ça me laissera la possibilité d'utiliser la touche delete?

  4. #4
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 50
    Points
    50
    Par défaut
    Je ne vois même pas pourquoi j'ai mis cette question je peux y répondre tout seul. Et la réponse est oui lol.

    Par contre sais tu ou je peux trouver une table avec toute les correspondance car c'est pas évident.

    Pour ma fonction suivante je veux permettre les nombre decimaux ducoup je dois utiliser VK_DELETE et non VK_DECIMAL c'est un peu louche.

    Merci beaucoup a plus.

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Oui, parce que la touche DELETE ne déclenche pas d'évènement OnKeyPress.

    @+

  6. #6
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Fait également attention au fait qu'on peut saisir des données dans un Edit, avec du copier/coller, et même faire le copier/coller à la souris...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 60
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Franck SORIANO Voir le message
    Fait également attention au fait qu'on peut saisir des données dans un Edit, avec du copier/coller, et même faire le copier/coller à la souris...
    et comment éviter ça ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Points : 146
    Points
    146
    Par défaut
    En gérant entièrement le copier/coller vous même.

    Pour le click de droit sur un TEdit, la propriété PopupMenu permet de définir un menu personalisé à cet effet (Si vide, delphi créé un menu par défaut : Couper/Copier/Coller/Sélectionner tout)

    Donc, vous pouvez vous créer votre propre menu et ensuite l'assigner au TEdit avec la propriété PopupMenu (Edit1.PopupMenu)

    Et heureusement, le TEdit possède déjà des fonctions toutes faites :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Edit1.CopyToClipBoard
    Edit1.PasteFromClipBoard
    Edit1.CutToClipBoard
    Edit1.SelectAll
    Pour vérifier le contenu du presse papier avant d'effectuer un coller vous pouvez utiliser l'objet ClipBoard qui est déjà instancié d'ailleur (Comme l'objet Application).

    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ClipBoard.AsText //retourne la valeur courrante du presse-papier
    dans votre cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      for i = 1 to Length(ClipBoard.AsText) do
       begin
         if AllowOnlyDigits(ClipBoard.AsText[i]) = #0 then
           //Caractère non accepté trouvé
       end;
    Note1 : Pour utiliser l'objet ClipBoard, vous devez inclure l'unité : ClipBrd

    Note2 : Les raccourcis clavier ne sont pas créé automatiquement si vous créez votre menu. Vous devrez les assigner vous même dans la propriété ShortCut de votre Menu. Je le spécifie car il est souvent oublié

    Note3 : Si vous utilisez beaucoup de ce genre de restriction dans votre application, il serait peut-être préférable de travailler avec un TActionList afin d'éviter de répété toujours le même code sur toute les fenêtres

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 60
    Points : 56
    Points
    56
    Par défaut
    Merci pour cette réponse claire!

  10. #10
    Membre du Club
    Inscrit en
    Août 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 117
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par pepi22 Voir le message
    Note3 : Si vous utilisez beaucoup de ce genre de restriction dans votre application, il serait peut-être préférable de travailler avec un TActionList afin d'éviter de répété toujours le même code sur toute les fenêtres
    Pour toute mes validations j'ai créé une unité simple dans laquelle je met toutes mes fonctions de validation. Ne connaissant pas le composant TActionList; est-ce plus intéressant d'utiliser ce composant ou ma solution est aussi efficace?

    Merci pour ces explications claires et complètes.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 203
    Points : 146
    Points
    146
    Par défaut
    Les deux solutions sont aussi efficace en terme de réutilisation.

    Le seul avantage d'un TActionList est que l'on peut assigné une action directement sur un composant.

    Par exemple : Un popup menu a une propriété Action (PopupMenu.Action) auquel on peut assigné une action définis dans un TActionList.

    Donc la liaison se fait au Design Time tandis que avec une unité de code, la liaison se fait en code au Run Time.

  12. #12
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 695
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 695
    Points : 13 131
    Points
    13 131
    Par défaut
    Et là, on n'a parlé que d'événementiel.

    Le TActionList permet surtout de centraliser l'aspect visuel des différents objets. Les images, les captions, les états Enabled/Disabled. etc.

    Un TToolButton ou un TMenu deviennent presque "Parents" (au sens Langue française ) voir "Jumeaux" alors qu'ils ne dérivent pas des mêmes objets.

    S'il n'y a pas d'aspect graphique, le TActionList n'apporte pas grand chose.

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

Discussions similaires

  1. DecimalSeparator
    Par titiyo dans le forum Langage
    Réponses: 9
    Dernier message: 11/06/2003, 15h39
  2. Curseur d'un TEdit
    Par Guile dans le forum Composants VCL
    Réponses: 2
    Dernier message: 19/05/2003, 18h33
  3. TEdit (encore)
    Par dj.motte dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/12/2002, 19h02
  4. [TEdit][TListBox]Recherche instantanée
    Par SamDaKap dans le forum C++Builder
    Réponses: 3
    Dernier message: 19/11/2002, 21h31
  5. TEdit : selection du texte et autre fonction
    Par Odulo dans le forum Composants VCL
    Réponses: 5
    Dernier message: 01/08/2002, 14h27

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