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 :

Lier une touche du pavé numérique à un TButton


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Lier une touche du pavé numérique à un TButton
    Bonjour,

    me re-voici avec ma calculatrice, j'aimerais maintenant lier les touches du pavé numérique aux bouttons correspondants de ma fenêtre dansl le but de permettre une saisi via le pavé numerique.

    J'aimerais donc, lorsque l'on appui sur une touche du pavé numérique, que cela déclanche les instructions de l'événement OnClick de la touche correspondante, voici ce que j'ai essayé jusque là et que j'aimerai généraliser :

    Avec la procedure OnKeyDown, si le boutton n'est pas séléctioné, la procedure n'est pas prise en compte =>
    if key = VK_NUMPAD0
    then EditCalcAffichage.text := '0';

    Merci d'avance et pour les éventuelles réponse =)

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Tu parles de quel OnKeyDown, je veux dire par la, est ce le OnKeyDown du du EditCalcAffichage ou celui de la Form ou autre ?

    Une piste, vérifier que la propriété KeyPreview de la Form est à true

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    C'est sur le OnKeyDown du boutton du n° que j'avais éssayé de le mettre mais forcement si le bouton n'est pas selectioné ça na va pas aller.

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Effectivement. Comme l'a dit Ero-Sennin tu dois d'une part positionner la propriété KeyPreview de la Form à True et ensuite positionner l'évènement OnKeyDown sur la Form elle-même.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  5. #5
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 681
    Points
    681
    Par défaut
    Bonjour,

    vous pouvez dériver d'un TEdit en appliquant cette astuce.

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    En réalité depuis le début du sujet je me suis trompé, je parlait en fait d'un Tbutton...

    Hum tout d'abord merci pour ces réponses ça m'a un peu éclairé, j'ai donc fait quelques recherches et je me rend compte que je n'ai pas précisé que j'avais verouillé le Tedit qui contient les valeurs saisis.

    De façon plus explicite :

    - Je ne veux pas taper mes valeurs dedans mais je voudrais que lorsque j'appuie sur le bouton 1 du clavier, l'interface de mon programme se comporte exactement comme si j'avais cliqué à la souris.

    > D'après ce que j'ai compris c'est la procédure FormKeyPress qui me conviendrai le mieux
    > J'ai voulu la tester pour essayer de me familiariser avec mais étrangement(?) je n'ai pas réussi a m'en servir malgré avoir bien mis

    - form1.KeyPreview := True; // dans l'événement OnCreate de ma fiche
    - procedure FormKeyPress(Sender: TObject; var Key: Char); // dans les Type
    - procedure TForm1.FormKeyPress(Sender : TObject ; var Key : Char);
    begin
    key:=UpCase(Key);
    end;
    // Comme test apparemment plutôt simple d'utilisation (trouvé sur internet)
    Donc si vous pouvez encore plus m'éclairer ça me serrait fortement utile

    Merci.

    EDIT : J'avai commencé cette réponse il y a plus d'une heure, je regarde ce que vous me proposez bubulemaster. > J'ai regardé ce que vous me proposez mais je suis loin d'avoir le niveau pour comprendre l'ensemble du code et j'aimerai maitriser complètement mes blocs je pense donc faire l'impasse sur cette astuce mais merci quand même

  7. #7
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Re,

    Juste histoire de nous guider un peu, peux tu nous fournir un extrait de code ...
    Ce que je retiens de ce que tu veux faire c'est :
    Tu as une panoblie de TButton sur ta Form avec un TEdit (je fais gros).
    A chaque pression de la touche du pavé numérique, tu veux que le comportement du programme soit comme si on cliqué avec la souris sur ce bouton ...

    Il y a diverses façon de faire ... la plus simple dans ton cas, c'est de définir dans chaque caption de tes TButton un & qui veut dire qu'on va attribuer un raccourci au bouton.

    Par exemple, le bouton qui doit insérer un 1 dans le TEdit aura pour caption :
    &1

    et pour code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit1.Text:=Edit1.Text+'1';
    end;
    De même avec les autres boutons ...
    C'est une première solution ... avant de mettre les autres, dit moi si j'ai bien cerné ton soucis
    A+

  8. #8
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Re, oui c'est exactement ça ^^
    Effectivement j'avais pensé au focus mais cette solution incluerai le fait de devoir appuyer sur Alt + 1 non ?

    Ensuite pour ce qui est de ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit1.Text:=Edit1.Text+'1';
    end;
    c'est en quelques sortes le principe de ma calculette sauf que j'ai regrouppé les OnClick de tous les boutons numériques sur la meme instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TOnglets.Button1Click(Sender: TObject);
    begin
    // acquisition par cumul du nombre souhaité
    Valeur.text := Valeur.text + (sender As Tbutton).caption;
    end;
    Je sais que ça risque de m'être encore plus difficile de réaliser ce que je veux faire avec cette méthode mais le fait de regrouper tous les événements des numériques sur une même instruction m'est ordonné !

    En espérant t'avoir fait avancer, je vois si d'autres parties pourraient t'intéresser et j'edit si c'est le cas !

  9. #9
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Re,

    En prenant compte du fait que les captions des TButton sont de ce type : &1, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    begin
      Edit1.Text:=Edit1.Text+ copy((sender As Tbutton).caption,2,1);
    end;
    En espérant t'avoir aidé
    A+

  10. #10
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Bon hé bien je me sent pas très intelligent ou on dira plutôt fatigué puisque la simple propriété
    gérai apparemment automatiquement la saisi dan mon Tedit, j'ai mis environ 4H à m'en rendre compte on dirai enfin soit ce problème est donc réglé, et avec tout ce que j'ai trouvé ce soir je devrait réussir à m'en sortir pour les opérateurs merci pour ton attention ;p à un prochain problème de newbe


    EDIT :

    Voila au final j'ai choisi cette méthode qui ressemble effectivement a une vieille mobylette qu'on aurait trafiqué encore et encore mais ça fonctionne et ça vient du cœur ^^ si ça peut intéresser quelqu'un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TOnglets.plusKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
    case key of
    VK_ADD : begin plus.setfocus; keybd_event(VK_RETURN,0,1,0); end;
    VK_MULTIPLY : begin fois.setfocus; keybd_event(VK_RETURN,0,1,0); end;
    VK_SUBTRACT : begin moins.setfocus; keybd_event(VK_RETURN,0,1,0); end;
    VK_DIVIDE : begin diviz.setfocus; keybd_event(VK_RETURN,0,1,0); end;
    VK_RETURN : begin equal.setfocus; keybd_event(VK_RETURN,0,1,0); end;
    Une simulation donc pour la faire fonctionner correctement j'y ai renvoyer les OnKeyDown de tous les boutons de la fiche qui étaient inoccupés je trouve ça malheureusement trop barbare j'aimerai votre avis, de plus depuis que j'ai utilisé cette méthode, étrangement le KeyPreview := true ne semble plus avoir d'effet, je pense donc pour le moment, généraliser cette dernière solution à tous les boutons mais ça ne m'attire que peu :/ donc même si je le signale comme résolu j'accepte d'éventuelles piste.
    Salut, bnb.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 11/05/2013, 10h03
  2. Réponses: 6
    Dernier message: 26/08/2009, 12h14
  3. pavé numérique désactivé après utilisation d'une VM
    Par trotters213 dans le forum Ubuntu
    Réponses: 0
    Dernier message: 19/02/2009, 18h54
  4. Lier une touche à un JButton
    Par rXpCH dans le forum Composants
    Réponses: 3
    Dernier message: 07/07/2008, 16h55

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