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 :

Problème code clavier entre Delphi et d'autres applications


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Problème code clavier entre Delphi et d'autres applications
    Bonjour à Tous...

    Ne sachant pas trop où poster ce sujet je le mets dans langage.

    Je réalise en ce moment un Front-End pour l'émulateur de Flippers (FUTURE PINBALL)

    J'utilisais jusqu'à présent les touches du clavier (VK_key).
    VK_LSHIFT (Flipper gauche) fait défiler les images vers la gauche.
    VK_RSHIFT (Flipper droite) fait défiler les images vers la droite.
    VK_SPACE (Lance le flipper).
    VK_ESCAPE (Quitter).
    VK_LCONTROL (Mode aléatoire)
    VK_LCONTROL (Quitter)

    Pour cela, j'utilise le code suivant : if GetKeyState(VK_key) <0 then...
    Tout fonctionne parfaitement et je n'ai aucun problème de ce coté-là.

    J'ai réalisé un 'CAB' pour faire pour de vraie... et me passer de clavier.
    J'ai donc eu l'idée de modifier mon programme afin de récupérer la configuration des touches de Futur Pinball qui sont stockées dans la base de registre.
    Toujours aucun problème une petite fonction pour lire la BDR windows et je récupère bien la valeur des touches de Futur Pinball.
    ---
    LE PROBLEME :

    Les codes de touches ne sont pas les mêmes et cela ne marche plus bien sûr.
    Les codes Futur Pinball ne correspondent pas aux touches du clavier quand mon programme tourne.

    Code de Touches Delphi :
    VK_LSHIFT = 37
    VK_RSHIFT = 39
    VK_SPACE = 32
    VK_ESCAPE = 27
    VK_LCONTROL = 162
    VK_LCONTROL = 163
    ---
    Code de Touches Futur Pinball :
    FLIP Gauche = 42 (Shift gauche)
    FLIP Droite = 54 (Shift droite)
    PLUNGER = 57 (Espace)
    SpécialKey1 = Ctrl-Gauche (Mode aléatoire)
    SpécialKey2 = Ctrl-Droite (Escape)

    Je ne vois pas de relation entre le code de ces touches.

    Je pensais que les codes de touches clavier étaient les mêmes et gérées par le système.
    Pourriez-vous m'aider ?

    Merci...

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 753
    Points : 13 336
    Points
    13 336
    Par défaut
    Il se base sur le code physique de la touche (le scan code) et non sur le code virtuel (le virtual key code).

    MapVirtualKeyEx pour passer de l'un à l'autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SC := MapVirtualKeyEx(VK, MAPVK_VK_TO_VSC, 0);
    VK := MapVirtualKeyEx(SC, MAPVK_VSC_TO_VK_EX, 0);
    Erreur de frappe sans doute mais les codes sont faux: VK_LSHIFT=160, VK_LEFT=37

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Yep ! Merci @Andnotor.

    Comment faire simple alors que l"on peut faire compliqué...

    Erreur de frappe sans doute mais les codes sont faux: VK_LSHIFT=160, VK_LEFT=37
    Ouais, bien vu...

    Encore merci, j'étais resté sur l'aide de delphi et n'avais pas pensé au SDK.

    Sait-on pourquoi les codes virtuels ne sont pas les mêmes que les codes physique du clavier ?

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 753
    Points : 13 336
    Points
    13 336
    Par défaut
    A cause de la localisation du clavier. AZERTY - QWERTY, A-Q même scancode mais VK différents.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2014
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    AZERTY/QUERTY : Mais oui mais bien sur... (Mon cerveau est au ralenti aujourd'hui.)

    Je viens de faire quelques test. (Ca peut peut-être aider...)

    Je récup le ScanCode des Touches du programme stocker dans la base de registre.
    Je stock les cinq codes dans un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Tkb[0]:=Registry.ReadInteger('LeftFlipperKey');
    Tkb[1]:=Registry.ReadInteger('RightFlipperKey');
    Tkb[2]:=Registry.ReadInteger('PlungerKey');
    Tkb[3]:=Registry.ReadInteger('Special1Key');
    Tkb[4]:=Registry.ReadInteger('Special2Key');
    Je convertis en Code Virtuel (VK_xxx)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Tkb[0] := MapVirtualKeyEx(TKb[0], 3, 0);  // 3 parce que je veux différencier la touches gauche et droite. (Ctrl, Shift)
    //etc...
    Je test le clavier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if GetKeyState(Tkb[0]) <0 then ... // GetKeyState car il fait la différenciation
    //etc...
    Et ça marche super bien... génial.

    Encore Merci @Andnotor.

    A bientôt. Le poste est résolu !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/12/2015, 18h57
  2. Interfaçage entre ERP Navision et Autres applications
    Par salysky dans le forum Autres ERP
    Réponses: 0
    Dernier message: 01/07/2015, 15h50
  3. Problème de flottant entre delphi et sql server
    Par zanoubya dans le forum Débuter
    Réponses: 6
    Dernier message: 02/06/2010, 11h36
  4. Problème de relation entre deux tables + autre chose
    Par Goth_sensei dans le forum Langage SQL
    Réponses: 7
    Dernier message: 30/03/2006, 20h49
  5. Réponses: 7
    Dernier message: 30/09/2005, 17h53

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