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 :

Contrôle à partir du clavier


Sujet :

C++Builder

  1. #1
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Par défaut Contrôle à partir du clavier
    Bonjour à tous!

    Voila mon problème...
    J'ai un bouton qui declenche une action. Je voudrais utiliser, à un moment donné, la touche F1 du clavier pour declencher la même action.

    Exemple: Bouton "Créer (F1)"

    Question: Comment faire???

    Merci d'avance pour la réponse :o)

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Par défaut
    si ton "a un moment donné" c'est qd tu es sur un composant donné alors:
    sur le keypress de ce composant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      if (Key == code de la touche F1)
      {
        boutonCreerClick(Sender);
      }

  3. #3
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Par défaut
    En fait, je voudrais faire, je pense, comme "ShortCut" pour les menus.

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 188
    Par défaut
    alors dans ce cas .... ça depasse mes maigres compétences
    dsl

  5. #5
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Par défaut
    Merci q. même! :o)

  6. #6
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    tu peut essayer en mettant le code de mike600river dans l'evenement OnKeyPress de la Form, sinon il faut que tu fasse un Thread qui va scruter le clavier avec un hook.

  7. #7
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut,
    Tu peux contrôler l'appuie sur la touche avec le côde suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if((GetAsyncKeyState(VK_F1) & 0x8000) != 0)
    {//appuie sur la touche F1
     ...
    }
    Mais il faut que tu scrutes comme l'a dit pottiez.

  8. #8
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Par défaut
    A nouveau bonjour et merci de votre intervention!

    J'ai essayé de faire comme c'était dit, mais j'ai l'impression que la programme ne donne pas la main au clavier. Comme si le clavier était debranché.

    Et pour le Thread, j'ai une erreur style, "la fonction Executer de Thread est = 0"

    Voila...

  9. #9
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Il faut que dans ta class TThread tu ais la fonction Execute, c'est celle qui lance ton thread. Comme l'exemple donné ici.

  10. #10
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Par défaut
    Citation Envoyé par Tiko38
    J'ai essayé de faire comme c'était dit, mais j'ai l'impression que la programme ne donne pas la main au clavier. Comme si le clavier était debranché.
    Essayes en mettant la propriété KeyPreview de ta fiche à true

  11. #11
    Membre émérite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par défaut
    Et pourquoi ne pas utiliser l'événement prévu pour ?

    TApplication::OnShortCut
    Se produit quand l'utilisateur appuie sur une touche (avant l'événement OnKeyDown).

    __property TShortCutEvent OnShortCut = {read=FOnShortCut, write=FOnShortCut};

    Description

    Utilisez l'événement OnShortCut pour distribuer les frappes de raccourcis clavier avant qu'ils ne soient gérés par la fiche ou ses contrôles. Quand l'utilisateur appuie sur une touche, l'application a l'opportunité de la distribuer comme touche de raccourci au lieu du traitement standard des frappes de touches (OnKeyDown, OnKeyPress et OnKeyUp). Le traitement prédéfini des raccourcis est défini pour les raccourcis de menu et les actions associées à la fiche. OnShortCut permet à la fiche de définir d'autres raccourcis.

    Si le gestionnaire d'événement OnShortCut implémente une réponse pour la frappe d'une touche, initialisez le paramètre Handled à true. Cela empêche la transmission de la frappe de touche aux menus ou actions associés à l'application. Cela empêche aussi le traitement de frappe de touche standard, de la même manière que le fait un raccourci d'action ou de menu.

    Remarque*: Vous pouvez aussi répondre à cet événement en utilisant le composant TApplicationEvents, qui vous permet d'affecter un gestionnaire d'événement par l'intermédiaire de l'EDI.

  12. #12
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Par défaut
    Salut!

    J'ai fait exactement pareil (afin.., je pense).
    Mais le problème persiste...

    J'ai crée aussi un DLL comme c'est montré sur ce Forum, mais je n'arrive pas à le charger.

    Une autre question... dois-je enregistrer le .dll dans le même projet ou dans un autre projet?

    Merci, d'avance et pour toutes les réponses!!!

  13. #13
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Citation Envoyé par bakaneko
    Essayes en mettant la propriété KeyPreview de ta fiche à true
    Citation Envoyé par 10_GOTO_10
    Et pourquoi ne pas utiliser l'événement prévu pour ?
    L'evènement ne se lance que sur les touches clavier "classique" donc pas sur les flèches, supr., Fx ...
    Voilà donc pourquoi il ne peut pas utiliser cet évennement.

  14. #14
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Par défaut
    Pour le KeyPreview - c'est fait (dépuis un moment).

    Si qqn sait comment faire sans se casser le ...pied , j'aimerais bien.

  15. #15
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Une solution de fortune serait de mettre un Timer avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
        if((GetAsyncKeyState(VK_F1) & 0x8000) != 0)
        {//appuie sur la touche F1
             Timer1->Enabled = false;
             ShowMessage("F1");
             Timer1->Enabled = true;
        }
    }
    Ici le ShowMessage permet de te rendre compte de la saisie et les Enabled servent à éviter les "rebonds" de la touche (en gros que tu fasses 5 fois l'action pour un appuie sur F1)

    Plus ton temps est petit, plus tu réagis vite, perso j'ai essayé avec 1ms et ca fonctionne impec. Si tu veux le faire avec un thread je te donne un exemple plus tard, sinon et si cette solution te convient il ne te reste plus qu'à mettre résolu

  16. #16
    Membre émérite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par défaut
    Citation Envoyé par bandit boy
    L'evènement ne se lance que sur les touches clavier "classique" donc pas sur les flèches, supr., Fx ...
    Voilà donc pourquoi il ne peut pas utiliser cet évennement.
    Ok pour les flèches et suppr, par contre les touches de fonctions devraient marcher (c'est les touches de raccourci les plus utilisées).

    Sinon, il faut faire un MESSAGE_MAP sur le message WM_KEYDOWN (voir BEGIN_MESSAGE_MAP dans l'aide)

  17. #17
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Par défaut
    Merci beaucoup! Ca marche à merveil!

    Finalement c'était pas plus dificile que ça

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

Discussions similaires

  1. Contrôle des LEDS clavier
    Par j0o0 dans le forum C
    Réponses: 9
    Dernier message: 30/08/2007, 18h50
  2. lire une entree a partir du clavier
    Par solawe dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 03/01/2007, 15h22
  3. [C#] executer une "methode?" a partir du clavier
    Par Rafsky dans le forum Windows Forms
    Réponses: 15
    Dernier message: 22/10/2006, 19h27
  4. [PL/SQL] Saisir des données a partir du clavier
    Par future dans le forum Oracle
    Réponses: 11
    Dernier message: 30/03/2005, 12h12
  5. Réponses: 2
    Dernier message: 27/03/2005, 19h15

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