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 :

[Delphi 2005] OnKeyPressed inactif sur la touche [ENTREE]


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 122
    Points
    122
    Par défaut [Delphi 2005] OnKeyPressed inactif sur la touche [ENTREE]
    Bonjour à tous,

    Dans une TListBox, j'utilise l'événement OnKeyPressed. Seulement, cet événement me détecte toutes les touches ASCII sauf la touche entrée.
    Voilà le bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure MaFiche.ListBoxKeyPress(Sender: TObject; var Key: Char);
    begin
      ShowMessage('Key Pressed : '+ Key);
      if not (Key = #13) then Key := #0 else
      begin etc...
    Lorsque je fais [entrée], je n'obtiens aucun message, preuve que cette touche n'est pas détectée, et le composant suivant prend le focus...

    Avez-vous une explication ? Merci d'avance.

  2. #2
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Tente de déplacer ton évènement dans le onKeyDown (il survient en premier).

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 122
    Points
    122
    Par défaut
    Ok et merci.

    Même problème avrc OnKeyDown. Par contre ça fonctionne bien avec OnKeyUp... Je trouve ça un peu "bidouillage", non ? As-tu une explication ?

  4. #4
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Je suis surpris que ça marche avec le keyUp plutôt que le KeyDown, mais bon.

    Le ocmposant doit intercepter la touche. C'est la seule explication que je vois.

  5. #5
    Membre habitué Avatar de phplive
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 179
    Points : 150
    Points
    150
    Par défaut
    Etrange ...

    Avec Delphi 7 et une listbox tout ca qu'il y a de plus standard ca marche bien !

    Tu es sûr que tu n'interceptes pas déjà cette touche à un niveau plus bas ?

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 122
    Points
    122
    Par défaut
    Non, je ne pense pas... D'autant plus étrange que sur une autre fiche, le OnKeyPress fonctionne bien... J'essaie de comprendre...

    Normalement, avec le ShowMessage dans l'événement, je devrais récupérer le code de la touche Entrée... Là, je n'ai rien...

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Dans le onkeydown

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Case Key of
      VK_RETURN: begin
        Showmessage('ENTRER');
      end;
    end;
    C'est normal que tu ne recupères pas le code du caractère entrée vu que ce n'est pas un code caractère visible (< 32 en ASCII).

  8. #8
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 122
    Points
    122
    Par défaut
    Salut Malatar,

    Pour le OnKeyPress, voilà ce que dit l'aide :
    OnKeyPress enregistre le caractère ASCII correspondant à la touche enfoncée. Les touches n'ayant pas d'équivalent ASCII (Maj ou F1, par exemple) ne génèrent pas d'événement OnKeyPress. Les combinaisons de touches (comme Maj+A), ne génèrent qu'un seul événement OnKeyPress (dans cet exemple, Maj+A donne pour Key la valeur "A" si Verr Maj est désactivé). Pour répondre aux touches non-ASCII ou aux combinaisons de touches, utilisez le gestionnaire d'événement OnKeyDown ou OnKeyUp.
    Or, toi, tu dis :

    C'est normal que tu ne recupères pas le code du caractère entrée vu que ce n'est pas un code caractère visible
    La distinction ne se fait pas sur le fait qu'1 caractère soit visible ou non, mais sur le fait que le caractère ait une représentation ASCII. Ce qui est le cas de [Entrée].

    En testant un peu mieux mon cas, j'ai la nette impression que lorsqu'il existe un autre composant sur la fiche (Combo, Edit, Bouton...) le OnKeyPress ne détecte plus correctement la touche Entrée.

    Est-ce spécifique à ma version de Delphi ou à mon install ?

  9. #9
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Tu n'aurais pas un bouton avec la propriété Default à True, sur ta fiche ? Ou un évènement OnKeyPress sur ta fiche, traité grâce à KeyPreview=True ?

  10. #10
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 122
    Points
    122
    Par défaut
    Dans le mille Mac Lak. Je viens de tester.

    Par défaut, je donne toujours la possibilité à l'utilisateur de sortir de la fiche par Esc... Donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     KeyPreview := True et OnkeyPress sur la fiche  // ben tiens !
    Bor. de. mer ! J'ai même pas pensé à ça !

    Un trés grand merci !

    (Par contre, j'ai mis la propriété Default := false pour les boutons)

  11. #11
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Vulcanos
    Bor. de. mer ! J'ai même pas pensé à ça !
    Toujours vérifier les trucs "évidents", y compris les trucs dont "on est sûr"... C'est dingue le nombre de bugs que j'ai pu trouver dans des fonctions/modules "testés"...

  12. #12
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 142
    Points : 122
    Points
    122
    Par défaut
    Ouais, bien d'accord avec toi... Et depuis le temps que je fais ce noble métier, je tombe encore dans la marmite pleine de poix...

    Et puisque tu me donnes l'occasion d'1 grand moment de vérité, je pense qu'1 regard extérieur aide à mieux percevoir ces évidences (le forum et ta réponse en sont des preuves).

    Le fin du fin étant d'acquérir soi-même ce même regard extérieur par rapport à ses propres elucubrations... J'en ai terminé avec ces considérations digne de Lao-Tseu

    Merci encore.

  13. #13
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Citation Envoyé par Vulcanos
    Et depuis le temps que je fais ce noble métier, je tombe encore dans la marmite pleine de poix...
    Parceque tu crois être le seul ? J'ai "trouvé" la solution parceque j'ai eu le même problème, un jour... ;-)

    Citation Envoyé par Vulcanos
    je pense qu'1 regard extérieur aide à mieux percevoir ces évidences
    Principe même du "pair-programming", et j'ai déjà constaté que c'est extrêmement efficace, à condition d'avoir des développeurs complémentaires, et non pas des "clones".

    Bon KeyPress ! ;-)

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

Discussions similaires

  1. sortir d'une boucle en cliquant sur la touche entree ?
    Par bounadalvidal dans le forum Débuter
    Réponses: 3
    Dernier message: 21/12/2010, 17h39
  2. listener suite clique sur la touche entree
    Par riadhhwajdii dans le forum JSF
    Réponses: 0
    Dernier message: 26/06/2009, 18h00
  3. soumettre le form en cliquant sur la touche ENTREE
    Par john_wili dans le forum Struts 1
    Réponses: 0
    Dernier message: 09/04/2009, 19h00
  4. détecter l'appui sur la touche Entree
    Par john_wili dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 11/02/2009, 17h42
  5. Réponses: 4
    Dernier message: 16/11/2005, 17h12

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