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

Langage Delphi Discussion :

Reconnaissance du code touche.


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 36
    Points : 25
    Points
    25
    Par défaut Reconnaissance du code touche.
    Bonjour
    j'ai un (gros) souci, je suis en train de developper une appli et j'ai ce probleme.
    L'utilisateur doit saisir un code alphanumerique. Le probleme est qu'il peut aussi bien etre en capslock ou non.
    Je ne peux pas me fier au code ASCII car en plus l'utilisateur peut aussi bien avoir un clavier suisse ou belge. Ce qu'il me faudrait c'est arriver a savoir s'il a appuyer sur la touche 1 (meme si il tape & avec un clavier francais par exemple) et ce afin de "corriger" la textbox:
    Exemple :
    il tape &éfr ou 12FR, j'affiche dans la textBox 12FR.
    J'espere que je suis clair dans mes explications.
    J'ai parcouru pas mal de forums et tenté (entre autre) d'utiliser la fonction VkKeyScan mais sans succes.
    Alors si quelqu'un peut me debloquer, merci d'avance

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 668
    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 668
    Points : 7 008
    Points
    7 008
    Par défaut
    Citation Envoyé par pixigol Voir le message
    Je ne peux pas me fier au code ASCII
    Au code ASCII d'accord, mais au code touche ?
    Ca n'a rien à voir.
    Exemple :
    Le code ASCII 97 = lettre 'a' (minuscule).
    Le code touche 97 = touche '1' du pavé numérique.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    C'est bien le code touche que je voudrais recuperer, j'utilisais VkKeyScan mais j'ai vu que VkKeyScan(1) <> VkKeyScan(&).
    J'ai quand meme fait le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for i:=1 to length(wsText) do
    begin
      wiChar := VkKeyScan(wsText[i]);
      if (wiChar>47) and (wiChar<58) then
        edStdNuDdeExt.Text := edStdNuDdeExt.Text + intToStr(wiChar-48)
      else edStdNuDdeExt.Text := edStdNuDdeExt.Text + High(wsText[i]);
    end;
    Le truc c'est que pour rajouter de la difficulté, les caracteres sont automatiquement mis en majuscule (et du coup le "à" correspondant à 0 devient "À"). Et VkKeyScan(À) = -1 et pas 48...

  4. #4
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 668
    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 668
    Points : 7 008
    Points
    7 008
    Par défaut
    Citation Envoyé par pixigol Voir le message
    C'est bien le code touche que je voudrais recuperer
    Tu utilises quel composant ?
    Si je prend l'exemple du TEdit, l'évènement OnKeyDown (ou OnKeyPress) te permet de faire ça.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 36
    Points : 25
    Points
    25
    Par défaut
    C'est effectivement un composant TEdit (enfin un peu retouché en interne), mais pour tout dire, ce fameux code n'est pas "tapé", il vient d'un code barre scanné qui renseigne automatiquement le TEdit...
    Mais suivant si l'utilisateur est en CAPSLOCK ou non, ben le code est mal renseigné (comme mon exemple plus, "&éfr" au lieu de 12FR)

  6. #6
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 668
    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 668
    Points : 7 008
    Points
    7 008
    Par défaut
    Citation Envoyé par pixigol Voir le message
    ce fameux code n'est pas "tapé", il vient d'un code barre scanné qui renseigne automatiquement le TEdit...
    Mais suivant si l'utilisateur est en CAPSLOCK ou non, ben le code est mal renseigné (comme mon exemple plus, "&éfr" au lieu de 12FR)
    Effectivement, là ça complique ...
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 72
    Points : 48
    Points
    48
    Par défaut
    Je crois que dans ce bout de code, le probleme du capslock est géré, (pas testé)

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    procedure SendKeys(s : string);
    var
        i : integer;
        flag : bool;
        w : word;
    begin
        // Get the state of the caps lock key
     
        flag := not GetKeyState(VK_CAPITAL) and 1 = 0;
     
        // If the caps lock key is on then turn it off
        if flag then
        begin
            SimulateKeystroke( VK_CAPITAL, 0 );
        end;
     
        for i := 1 to Length(s) do
        begin
          w := VkKeyScan(s[i]);
          // If there is not an error in the key translation
     
          if ((HiByte(w) <> $FF) and (LoByte(w) <> $FF)) then
          begin
     
            // If the key requires the shift key down - hold it down
     
            if HiByte(w) and 1 = 1 then
            begin
              SimulateKeyDown( VK_SHIFT );
            end;
     
            // Send the VK_KEY
     
            SimulateKeystroke( LoByte(w), 0 );
     
            // If the key required the shift key down - release it
     
            if HiByte(w) and 1 = 1 then
            begin
              SimulateKeyUp(VK_SHIFT);
            end;
     
          end;
        end;
     
        // if the caps lock key was on at start, turn it back on
     
        if flag then
        begin
          SimulateKeystroke( VK_CAPITAL, 0 );
        end;
     
    end;

Discussions similaires

  1. remplacement des codes touches clavier
    Par compas dans le forum Périphériques
    Réponses: 4
    Dernier message: 22/08/2006, 08h29
  2. Pb avec code touche BackSpace du clavier
    Par marti dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/08/2006, 10h34
  3. [TP] Problème code touche clavier
    Par phildeb dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 02/12/2005, 22h44
  4. Code touches virtuels -> mise en forme
    Par Neilos dans le forum Windows
    Réponses: 3
    Dernier message: 18/11/2004, 23h37

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