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 :

Détecter l'appui sur la touche Tabulation


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 265
    Par défaut Détecter l'appui sur la touche Tabulation
    Bonjour,

    Je cherche à créer une petite fonction de saisie intuitive de mots dans une phrase.
    J'ai pu constater dans plusieurs applications que lorsque le mot qui s'affiche correspond à celui qu'on désire, on tape sur la touche (flèche horizontale vers la gauche et une autre en-dessous vers la droite).
    Eh bien impossible de trouver le code ASCII de cette touche, donc celle située à gauche du clavier au-dessus du cadenas.
    Lorsque je demande en message la valeur de cette touche je ne reçois rien.
    Lorsque je tape sur cette touche je passe à un Edit différent.

    Si quelqu'un pouvait m'éclairer je lui serais bien reconnaissant.

    Merci.

    BB

  2. #2
    Membre émérite
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Par défaut
    Bonjour,

    c'est la touche Tab (Tabulation) code ASCII = #9

    Cordialement,
    @+

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 265
    Par défaut
    Merci Cirec,

    En effet c'est la touche Tab mais sauf erreur elle n'est reconnue que lors de l'évènement Keydown; je ne me trompe pas ou est-ce normal?

    BB

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Bonjour,

    Sinon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function  ToucheCla(t : integer) : boolean; // Appui Touche Clavier ou Souris
    //        utilisations : if ToucheCla(VK_CONTROL) then
    //                         if ToucheCla(VK_RETURN) then 
    //                       if ToucheCla(Ord('R')) then
    begin     Result:= ((GetAsyncKeyState(t) and 32768)<> 0)
    end;
    avec touche Tab = VK_TAB

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Membre émérite
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Par défaut
    oui,
    la touche est interceptée et n'est pas retransmise aux descendants mais on peut quand même récupérer le message ou l'info, soit comme
    le propose Gilbert (mais il me semble que la touche doit être pressée lors de l'appel à "ToucheCla" pour que ce soit efficace) soit comme ceci
    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
      TForm3 = class(TForm)
        ...
        procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    implementation
     
    procedure TForm3.CMDialogKey(var Message: TCMDialogKey);
    begin
      with Message do
        if CharCode = VK_TAB then
        begin
          Caption := 'Touche Tab Pressée';
          Result := 1; // 0 = Message Traité  1 = Message non Traité
        end;
      inherited;  // propage le message aux autres composants
      // on peut décider de ne pas le propager dans certain cas ;)
    end;
    end.
    pour voir un comportement différent tu ajoute un TMemo avec le Focus et tu modifie comme ceci:
    le message est intercepté et marqué comme traité mais non propagé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm3.CMDialogKey(var Message: TCMDialogKey);
    begin
      with Message do
        if CharCode = VK_TAB then
        begin
          Caption := 'Touche Tab Pressée';
          Result := 1; // 0 = Message Traité  1 = Message non Traité
        end;
      //inherited;  // propage le message aux autres composants
      // on peut décider de ne pas le propager dans certain cas ;)
    end;
    puis:
    le message est intercepté et marqué comme non traité et non propagé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm3.CMDialogKey(var Message: TCMDialogKey);
    begin
      with Message do
        if CharCode = VK_TAB then
        begin
          Caption := 'Touche Tab Pressée';
          Result := 0; // 0 = Message Traité  1 = Message non Traité
        end;
      //inherited;  // propage le message aux autres composants
      // on peut décider de ne pas le propager dans certain cas ;)
    end;
    tu verras de suite la différence de comportement
    Cordialement,
    @+

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 265
    Par défaut
    Merci à vous mais je coince déjà à la première ligne, c'est-à-dire que je reçois le message suivant : " [Erreur] Unit1.pas(20): Déclaration forward ou external non satisfaite : 'TForm1.CMDialogKey'"
    Je ne pige pas pourquoi il ne faut quand même pas faire appel à une DLL particulière.
    Mais sinon vos explications sont claires.

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

Discussions similaires

  1. Code ASCII du symbole Euro
    Par FW-S dans le forum Delphi
    Réponses: 9
    Dernier message: 03/04/2007, 01h27
  2. [web] Barre de Progression ASCII
    Par Red Bull dans le forum Web
    Réponses: 13
    Dernier message: 05/06/2003, 12h56
  3. Ascii DOs -> Ascii Windows
    Par remixtech dans le forum Langage
    Réponses: 3
    Dernier message: 22/03/2003, 07h14
  4. Conversion binaire -> ASCII
    Par will13013 dans le forum C
    Réponses: 8
    Dernier message: 08/01/2003, 04h12
  5. exporter la structure d'une base Sybase en ascii
    Par Jean-Cyp dans le forum Sybase
    Réponses: 5
    Dernier message: 05/11/2002, 16h15

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