Réponses clavier

19:34 modifié dans API AppKit #1
Hello à  tous,
Quelle classe faut-il utiliser pour répondre au clavier ?
En fait je veux tout simplement qu'une action se déclenche quand j'appui sur la touche alt du clavier
d'avance, merci ! ;)

Réponses

  • Eddy58Eddy58 Membre
    19:34 modifié #2
    Hello Eaglelouk :)

    Et bien il faut que ta classe soit une sous-classe de NSResponder, ensuite il faut surcharger la méthode keyDown (classe NSResponder), et comparer le modifier flag de l'event (méthode modifierFlags de NSEvent). Le code suivant n'est pas testé, mais je vois pas pourquoi ça ne marcherait pas : ;)
    [tt]
    -(void)keyDown:(NSEvent *)event
    {
        if ([event modifierFlags]==NSAlternateKeyMask)
        {
              NSLog(@Touche Alt enfoncée);
        }
    }
    [/tt]
  • 19:34 modifié #3
    Il suffit de surcharger: [tt]- (void)flagsChanged:(NSEvent *)theEvent[/tt] de NSResponder.
  • ChachaChacha Membre
    avril 2005 modifié #4
    dans 1112988742:

    Le code suivant n'est pas testé, mais je vois pas pourquoi ça ne marcherait pas : ;)
    [tt]
    -(void)keyDown:(NSEvent *)event
    {
         if ([event modifierFlags]==NSAlternateKeyMask)
         {
              NSLog(@Touche Alt enfoncée);
         }
    }
    [/tt]

    ça pourrait ne pas marcher si la touche Alt n'est pas le seul modifieur enfoncé; mais ce peut être voulu ou pas.
    Si ce n'est pas voulu, on peut aussi écrire
    <br />if ([event modifierFlags] &amp; NSAlternateKeyMask)<br />
    


    Sinon Renaud a raison, un simple appui sur Alt ne déclenche pas keyDown:. flagsChanged: est donc une bonne méthode.

    +
    Chacha
  • 19:34 modifié #5
    - (void)keyDown:(NSEvent *)event<br />{<br />	unsigned int flags;<br />	NSLog(@&quot;event&quot;);<br />	flags = [event modifierFlags];<br />	if (flags &amp; NSShiftKeyMask) {<br />		NSLog(@&quot;shift enfoncée :p han !&quot;);<br />	}<br />}
    


    Aucune réaction  :'(
    Suis un peu perdu là   :P
  • Eddy58Eddy58 Membre
    19:34 modifié #6
    Utilise plutôt la méthode flagsChanged, qui est en effet bien plus adaptée : :)

    [tt]
    -(void)flagsChanged:(NSEvent *)event
    {
        NSLog(@event);
        if ([event modifierFlags] & NSShiftKeyMask)
        {
              NSLog(@Shift enfoncée);
        }
    }
    [/tt]
  • 19:34 modifié #7
    Rien à  faire, marche po :(
    Z'êtes sûr qui faut pas déclarer un NSEvent d'abord ?  :crackboom:-
  • Eddy58Eddy58 Membre
    19:34 modifié #8
    Il est très rare d'avoir à  générer ses propres NSEvent, le système s'en occupe pour toi, aussi tu n'as plus qu'à  les récupérer et les traiter. Est-ce que la classe dans laquelle tu surcharges flagsChanged est bien sous-classe de NSResponder ? :o
  • 19:34 modifié #9
    Est-ce que tu renvoies bien [tt]YES[/tt] (par défaut [tt]NO[/tt]) au [tt]-acceptsFirstResponder[/tt] de ta vue?
  • 19:34 modifié #10
    Hum en fait je veux implémenter ça ds une sous-classe NSObject  :crackboom:-
  • 19:34 modifié #11
    Ces messages ne sont envoyés qu'au firstResponder (donc au moins un NSResponder) de la fenêtre. Libre à  toi de vouloir faire autrement, mais dans ce cas, je ne peux que te souhaiter bonne chance.
  • Eddy58Eddy58 Membre
    19:34 modifié #12
    Eaglelouk, NSResponder hérite de NSObject, donc le mieux est de sous-classer NSResponder pour en tirer parti non ? :)
  • fouffouf Membre
    19:34 modifié #13
    dans 1113053918:

    Eaglelouk, NSResponder hérite de NSObject, donc le mieux est de sous-classer NSResponder pour en tirer parti non ? :)


    Je dirais meme plus, il faut que cette classe hérite de NSView ou de NSWindow pour que l'on puisse agir dessus, sinon, on ne pourrais pas envoyer de messages à  l'objet.
Connectez-vous ou Inscrivez-vous pour répondre.