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

C++Builder Discussion :

[BDB]Annuler appui sur touche [IDE]


Sujet :

C++Builder

  1. #1
    Membre actif Avatar de Jerome S
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2011
    Messages
    62
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Ao�t 2011
    Messages : 62
    Par d�faut [BDB]Annuler appui sur touche
    Bonjour,
    Je suis en cours d'apprentissage du C++. Je dois travailler sur Borland Builder C++
    Aujourd'hui, je dois contr�ler la saisie au niveau d'un TEdit. Si l'utilisateur presse certaines touches, rien ne doit se passer.
    Actuellement, j'ai essay� :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    void __fastcall TCondition::BarreConditionKeyDown(TOject *, WORD &Key, TShiftState)
     
    if(Key!=107 && Key!=110)
    {
        Key=0;
    }
    Mais ca ne fonctionne pas. Quand j'affiche le code de la touche press� dans un TLablel, il m'affiche bien le code 0 mais le caract�re s'affiche quand m�me.
    Quelqu'un a une id�e s'il vous plait ?
    Merci d'avance

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par d�faut
    Utilise l��v�nement OnKeyPress plutot que OnKeyDown pour emp�cher/autoriser uniquement certains caract�res:

    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
     
    void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
    {
    // autoriser uniquement les chiffres
      switch ( Key )
      {
        case '0' : break;
        case '1' : break;
        case '2' : break;
        case '3' : break;
        case '4' : break;
        case '5' : break;
        case '6' : break;
        case '7' : break;
        case '8' : break;
        case '9' : break;
        case '\b' : break;
        default: Key = 0 ; break ;
      }
    }
    ou dans ton exemple:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void __fastcall TForm1::Edit2KeyPress(TObject *Sender, char &Key)
    {
    // autoriser uniquement les lettre 'k' et 'n'
      switch ( Key )
      {
        case 'k' : break;
        case 'n' : break;
        case '\b' : break;
        default: Key = 0 ; break ;
      }
    }

  3. #3
    Membre actif Avatar de Jerome S
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2011
    Messages
    62
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Ao�t 2011
    Messages : 62
    Par d�faut
    Ca fonctionne ! Merci � toi !
    Comment se fait-il que dans l'�venement KeyPress ca fonctionne alors que KeyDown ne fonctionne pas ?

    Merci encore

  4. #4
    Membre confirm� Avatar de bfespi69
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2008
    Messages
    79
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 79
    Par d�faut
    Tu pouvais faire �a aussi dans le onkeydown, �a marche :


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    void __fastcall TCondition::BarreConditionKeyDown(TOject *, WORD &Key, TShiftState)
     
    if(Key!=107 && Key!=110)
    {
        Key=NULL;
    }

  5. #5
    Expert �minent
    Avatar de ShaiLeTroll
    Homme Profil pro
    D�veloppeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    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 : 14 094
    Par d�faut
    @bfespi69, tu es s�r que cela fonctionne ?
    Sur mon C++Builder 2007, l'affectation � Z�ro ou � NULL n'a aucun effet et g�n�re le m�me code Assembleur !
    Tu ne confonds pas OnKeyDown et OnKeyPress ?

    En plus, il faut faire attention OnKeyDown fourni des Codes Virtuels, ces codes sont diff�rents d'un caract�re

    �crire
    c'est comme �crire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    if(Key!=VK_ADD && Key!=VK_DECIMAL)
    Donc n'autoriser que '+' et '.' et non que 'k' et 'n'


    Extrait de l'aide Controls.TWinControl.OnKeyDown
    Mais pour les touches qui g�n�rent des caract�res, Windows produit �galement le message WM_CHAR. Au moment du d�clenchement de votre �v�nement OnKeyDown, le message WM_CHAR de la touche sera d�j� dans la file d'attente des messages. Comme la d�finition de Key sur #0 n'arr�te pas sa livraison, l'�v�nement OnKeyPress est d�clench�. En d�finissant Key sur #0, OnKeyPress n'a pas le droit d'�tre d�clench� pour les touches n'ayant pas de caract�res. Pour les touches repr�sentant des caract�res, OnKeyPress continuera � �tre d�clench�.
    Perso, je trouve cela assez flou, les touches sans caract�res sont rares comme ALT, CTRL, MAJ, m�me mais ces touches, cela ne les �limines pas !
    Pour la saisie OnKeyPress est nettement plus pratique car c'est bien un Char le param�tre !
    Pensez que Char pourra �tre Ansi ou Unicode selon la version de C++Builder
    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

  6. #6
    Membre confirm� Avatar de bfespi69
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2008
    Messages
    79
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 40
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 79
    Par d�faut
    Sur Borland C++ Builder 5 , cela fonctionne de mettre NULL pour exclure certaines touches.

    Cependant je ne poss�de que cette version alors je ne sais pas pour les plus r�centes.

    Voici mon code sur OnKeyPress :

    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
     
    void __fastcall TfrmEtapeCNDef::TransformKey(TObject *Sender, char &Key)
    {
        if ( Key == '.' ) Key = DecimalSeparator;
     
        if ( ! (    Key == DecimalSeparator
                 || ( Key >= '0' && Key <= '9' )
                 || Key == '\b'
                 || Key == '+'
                 || Key == '-'
               )
           )
        {
            Key = NULL;
        }
    }

  7. #7
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par d�faut
    Je confirme que le code
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    if(Key!=107 && Key!=110)
    {
      Key=NULL;
    }
    ne fonctionne pas dans le OnKeyDown (sous Borland C++ Builder 5)
    Il faut utiliser le OnKeyPress...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Detection d'appuis sur touche CTRL + autre touche
    Par rolls dans le forum VB 6 et ant�rieur
    R�ponses: 4
    Dernier message: 11/11/2008, 14h23
  2. R�ponses: 2
    Dernier message: 05/05/2008, 13h16
  3. appui sur touche
    Par Ludo_360 dans le forum Delphi
    R�ponses: 6
    Dernier message: 14/05/2007, 09h13

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