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

Interfaces Graphiques Discussion :

Utilisation des flèches du clavier


Sujet :

Interfaces Graphiques

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Par défaut Utilisation des flèches du clavier
    bonjour,

    bon alors voilà, j'ai un petit soucis avec la mise en place d'interaction entre mon appli faite avec GUIDE et les flèches du clavier.

    concrètement, j'ai une variable dont j'affiche la valeur avec un Static text, et j'aimerai pouvoir faire varier la valeur de cette variable en utilisant les flèches gauche et droite du clavier (pour incrémenter ou décrémenter).

    j'ai donc intégré une fonction KeyPressFcn, mais je ne sais pas comment récupérer les messages "left arrow" et "right arrow".

    j'arrive à récupérer des charactères avec le bout de code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function figure1_KeyPressFcn(hObject, eventdata, handles)
     
    Key = get(gcf,'CurrentCharacter')
    mais cette solution ne me renvoit rien pour autre chose que des caractères. Par ailleurs, j'ai essayé de transposer la valeur renvoyée par le clavier en ASCII, en double mais rien à faire, je me retrouve avec un NaN ou un [] désespérant.

    ce qui me fait me demander si ajoutter ses propres accelerators est possible avec matlab. une idée?

  2. #2
    Membre émérite
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Par défaut
    Salut,

    Je ne sais pas si c'est le fait de travailler en GUIDE qui empeche d'obtenir le code ASCII, ou autre chose.
    sans GUIDE ça marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    figure('KeyPressFcn',@gg)
    uicontrol('style','text','position',[250 250 100 30],'string','');
     
    function gg(obj,events)
    key=double(get(gcf,'CurrentCharacter'));
    set(findobj('style','text'),'string', num2str(key));

  3. #3
    Membre émérite
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Par défaut
    je viens de tester avec GUIDE, et ça marche aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function figure1_KeyPressFcn(hObject, eventdata, handles)
    % hObject    handle to figure1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    key=double(get(gcf,'CurrentCharacter'));
    set(handles.edit1,'string',num2str(key));
    avec quelle version de matlab travails-tu?

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Par défaut
    je travaille sous la R2006a

    ton code marche effectivement parfaitement avec des caractères de type .... heu .... caractères genre "a b c d ...."

    moi je tente d'utiliser les flèches directionnelles du clavier, et c'est là que ça plante, le caractère retourné est ' ' quelque soit la flèche utilisée (haut, bas, gauche ou droite)

  5. #5
    Membre averti Avatar de pwfsic
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 56
    Par défaut
    J'ai eu le même problème que toi, et j'ai été "obligée" de faire sans guide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    set(gcf, 'KeyPressFcn', @KeyPressFcn);
     
    function KeyPressFcn(src, evnt)
     
    key=evnt.Key;
    et avec ça si t'appuies sur les flèches directionnelles, c'est reconnu par key comme 'leftarrow', 'downarrow', 'uparrow', et 'rightarrow'.

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Voici une solution :
    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
    function anim
     
    figure('doublebuffer','on','keypressfcn',@kpfcn)
    colormap(cool)
     
    axes('xlim',[-50 50],'ylim',[-50 50])
     
    fv.vertices=[-5 -5 ; 5 -5 ; 0 5];
    fv.faces=1:3;
    fv.facecolor='interp';
    fv.facevertexcdata=rand(3,1);
    fv.tag='triangle';
     
    patch(fv);
     
    function kpfcn(obj,event)
     
    h=findobj('type','patch','tag','triangle');
     
    xy=get(h,{'xdata','ydata'});
     
    switch get(obj,'currentcharacter')
     
    case 28 % Gauche
     
        xy{1}=xy{1}-1;
     
    case 29 % Droite
     
        xy{1}=xy{1}+1;
     
    case 30 % Haut
     
        xy{2}=xy{2}+1;
     
    case 31 % Bas
     
        xy{2}=xy{2}-1;
     
    case 27 % Esc
     
        xy{1}=[-5 ; 5 ; 0 ];
        xy{2}=[-5 ; -5 ; 5];
     
    end
     
    set(h,{'xdata','ydata'},xy)
    On remarque ici qu'il n'est pas nécessaire de transformer la valeur caractère contenue dans la propriété CurrentCharacter en double pour la comparer. Matlab le fait automatiquement en convertissant la valeur en code ASCII :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    V='A'
    V=='A'
    V==65
    double(V)
    char(65)
    A la place de la propriété CurrentCharacter, il est aussi possible d'utiliser la propriété non documentée CurrentKey de l'objet Figure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    switch get(obj,'currentkey')
     
       case 'leftarrow'
     
       case 'rightarrow'
     
       case 'uparrow'
     
       case 'downarrow'
     
       case 'escape'
     
    end
    Mais il me semble que cette solution nuit à la portabilité du code entre OS... si je me souviens bien

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Par défaut
    Merci DutMatlab, ça marche effectivement....

    Est-ce qu'il y a une table de correspondance référencées entre les touches claviers et les messages reçus par Matlab quelque part sur le net? Parce que sans ton aide, j'avoue que je n'aurai jamais trouvé (savoir que droite c'est 2P, ben.... faut le savoir)

    merci encore.

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Je n'ai pas connaissance d'une telle table pour Matlab. Pour l'instant, il faut essayer avec le bout de code suivant en récupérant les valeurs dans le command window :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function testchar
    figure('keypressfcn','cc=get(gcbf,''currentcharacter''),double(cc)');
    Mais cela pourrait faire l'objet d'un article ou d'une section de la rubrique Matlab

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2007
    Messages : 57
    Par défaut
    Bon après avoir joué avec MATLAB ce matin, j'ai une table de correspondance entre le code ASCII clavier et les messages récupérés par Matlab, et bon.... c'est une bête table ascii quoi -___-

    Il semblerait que MATLAB ne reconnaisse pas certains caractères, et que sa propres table soit étendue à plus que 128 charactères.

    Voici donc ce que j'ai réussit à récupérer, à voir si c'est complétable et si ça peut servir comme base de connaissance (n'étant pas modo, je préfère laisser cette décision à quelqu'un de mieux placé que moi )



    (accessible à l'adresse http://www.servimg.com/image_preview...=24&u=11205468)

  10. #10
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Si ça peut aider, il y a longtemps (je ne sais plus ni comment ni avec quelle version ), j'avais récupéré le fichier joint qui est un peu différent.
    J'avais dû faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for k=1:200,disp([num2str(k),' = ',k]),end
    + récupérer les trucs que je connaissais (entrée, échap...)
    Fichiers attachés Fichiers attachés

  11. #11
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Je pense qu'on utilisera ce genre de notation (voir bas de page) dans un futur article Matlab : http://c.developpez.com/cours/bernar...ne/node138.php

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/04/2014, 09h23
  2. Utiliser des raccourcis clavier avec des flèches
    Par gandf dans le forum C++Builder
    Réponses: 3
    Dernier message: 21/01/2014, 00h33
  3. utilisation des raccourcis claviers pour debugger.
    Par Mobistar dans le forum Eclipse Java
    Réponses: 8
    Dernier message: 30/05/2007, 15h39
  4. Réponses: 4
    Dernier message: 24/04/2007, 18h05
  5. Utilisation des flèches du clavier
    Par yenlui dans le forum C
    Réponses: 2
    Dernier message: 18/04/2006, 19h50

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