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

wxWidgets Discussion :

Evènement OnKey : pas de touche "Return" ?!


Sujet :

wxWidgets

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Par défaut Evènement OnKey : pas de touche "Return" ?!
    Bonjour

    Mon petit problème, aujourd'hui se situe au niveau de l'évenementiel de wxWidget :
    J'ai associé ma fonction onkeydown à ma checkListBox, pour qu'elle repère mes commandes clavier. Toutes les touches sont reconnues... sauf la touche "Entrée". Bien sur, inutile de vous dire que c'est celle dont j'ai besoin.
    J'imagine que la touche Entrée provoque un autre évènement, mais je ne sais pas lequel ! (EVT_LIST_ITEM_ACTIVATED semblait approprié mais il appartient à wxListView, dont ne dépend pas ma wxCheckListBox...)

    Une idée ?

    Merci !

  2. #2
    Membre émérite Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Par défaut
    Salut,
    Montre nous un bout de ton code d'où viens ton problème,
    As tu jeter un oeil au keycode ?? http://www.lpthe.jussieu.fr/~zeitlin....html#keycodes

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Par défaut
    Ok, voici un bout de mon code, volontairement simplifié. La classe dialog est instanciée par un objet myframe que je ne décrirai pas ici.

    Le fichier myDialog.h
    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
    class myDialog : public wxDialog
    {
    private:
     
    	wxCheckListBox * TypeList;
     
    	wxCheckListBox * SubTypeList;
     
    public:
    	myDialog(wxWindow* parent, const wxString& title, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize);
    	~myDialog();
     
    	// ***************************************
    	// void OnKeyDown(wxKeyEvent & event);
    	//
    	// Key event...
    	// ***************************************
    	void OnKeyDown(wxKeyEvent & event);
     
    };
    Le fichier myDialog.cpp
    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
    #include "myDialog.h"
     
    myDialog::myDialog(wxWindow* parent, const wxString& title, const wxPoint& pos, const wxSize& size)
    							:wxDialog(parent, -1, title, pos, size, wxSYSTEM_MENU)
    {
    	wxBoxSizer * theSizer = new wxBoxSizer( wxHORIZONTAL );
     
    	// Création de la première liste
    	TypeList = new wxCheckListBox(this, -1, wxPoint(-1,-1), wxSize(-1, -1) );
    	theSizer->Add(TypeList, wxALL);
    	TypeList->Connect(wxEVT_KEY_DOWN,(wxObjectEventFunction) &myDialog::OnKeyDown, NULL, this);
     
    	// Création de la deuxieme liste
    	SubTypeList = new wxCheckListBox(this, -1, wxPoint(-1,-1), wxSize(-1, -1) );
    	theSizer->Add(SubTypeList, wxALL);
    	SubTypeList->Connect(wxEVT_KEY_DOWN,(wxObjectEventFunction) &myDialog::OnKeyDown, NULL, this);
    }
     
    myDialog::~myDialog(){
     
    }
     
    void myDialog::OnKeyDown(wxKeyEvent & event){
    	wxMessageBox( wxString::Format("%d", event.GetKeyCode() ) );
    }
    J'avais déjà jeté un coup d'oeil au keycode, je pense que le problème est un peu plus compliqué.

    Merci

  4. #4
    Membre émérite Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Par défaut
    Re salut,
    Alors je n'ai pas eu le temps de regarder en detaille ton bout de code, mais il est sur que l'evenement EVT_KEY_DOWN est valable pour TOUTES les touches du clavier.
    Va jeter un oeil dans les exemples fournis avec la librairie ( keyboard ) tu cela te confirmera ce que je viens de te dire.
    Donc ton problème viens d'autre part ...

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 65
    Par défaut
    Merci pour ta réponse, j'ai regardé l'exemple keyboard, mais ça ne m'a pas trop inspiré...

    En fait, j'ai déjà implémenté des évènements keyDown sur ma wxFrame : ça marche très bien!
    Les différences, dans notre cas, c'est que:
    1: j'associe mon évènement EVT_KEY_DOWN à une wxListBox, et non à une wxFrame. Or ça ne m'étonnerait pas que les wxListBox aient un évenement sur la validation (donc sur dblclick ou entrée). Lorsque j'appuie sur "entrée", le focus passe de la première liste à la deuxième.
    2: j'associe mon évènement avec la méthode Connect au lieu de faire une EVENT_TABLE.

    Selon ta théorie, tu penses que suite à l'appuie sur "Entrée", il y ait 2 évènements d'appelés : onKeyDown & onValidate ?

  6. #6
    Membre émérite Avatar de Jérémy Lefevre
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Luxembourg

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 898
    Par défaut
    Theoriquement il n'y a aucune différences entre la touche enter par rapport au autre touche!
    Tu associes ton évènement sur ta listBox pourquoi ne pas l'associer à ta frame?

    petite question est ce que cela marche lorsque tu appuis sur la touche "tab" ??

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

Discussions similaires

  1. ne peut pas simplement "aXSLProc.Process(aCursor);"
    Par didier.cabale dans le forum XMLRAD
    Réponses: 16
    Dernier message: 08/03/2006, 12h25

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