Appuie sur touche plus ou moins long
Ceetix
Membre
Bonjour !
Voilà j'ai un petit souci, en effet j'aimerai qu'en appuyant sur une touche de mon clavier je puisse afficher un message. Exemple : appuie de 1 seconde sur "pomme" affiche : Vous avez appuyé 1 seconde. Et dès que je passe à plus de 5 secondes : Vous avez appuyé plus de 5 secondes. Et si je relâche avant 1 ou 5 seconde on remette à 0 tout ça.
Je pensais utiliser les timers mais j'ai vraiment du mal
Si vous pouviez m'aider ce serait cool.
Merci !
Voilà j'ai un petit souci, en effet j'aimerai qu'en appuyant sur une touche de mon clavier je puisse afficher un message. Exemple : appuie de 1 seconde sur "pomme" affiche : Vous avez appuyé 1 seconde. Et dès que je passe à plus de 5 secondes : Vous avez appuyé plus de 5 secondes. Et si je relâche avant 1 ou 5 seconde on remette à 0 tout ça.
Je pensais utiliser les timers mais j'ai vraiment du mal
Si vous pouviez m'aider ce serait cool.
Merci !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tu peux mémoriser l'heure d'appui sur la touche dans -keyDown:.
Quand -keyUp est appelée, tu peux calculer la différence de temps depuis l'appui de la touche.
Attention, il faudra vérifier qu'il s'agit de la bonne touche en décortiquant l'événement reçu.
Pour connaà®tre le nombre de ticks écoulés depuis le lancement du processus, tu peux utiliser la fonction clock() définie dans time.h (bibliothèque standard du C). Sachant qu'il y a CLK_TCK ticks dans une seconde.
Il y a sûrement une meilleure fonction, mais je n'arrive pas à trouver dans mes docs.
Le plus simple est de sous-classer la fenêtre qui va recevoir les évènement, et redéfinir la méthode sendEvent:.
Cette méthode reçoie un NSEvent en paramètre.
Il suffit alors d'examiner :
- son type (NSKeyDown, NSKeyUp et NSFlagsChanged),
- le code de la touche (keycode, modifierFlags ou characters),
- son timestamp (nombre de secondes écoulées depuis le dernier boot).
La différence entre les 2 timestamp, celui de l'appui de la touche, puis celui de son relachement donnera le temps...
Et il y a déjà une erreur ... J'ai oublié un truc c'est sur mais quoi?
Ca compile pas ? ça link pas ? t'as pas ton log ? ça crash à l'exécution ? T'as ton log mais pas au moment où tu veux ?
"error: syntax error before '(' token "
J'ai oublié le ":" avant "(" .
Bref là ca compile mais quand que je clique down rien ne se passe dans la console.
Donc là jai bien mon message qui s'affiche. C'est déjà bien ^^.
Vais essayer de continuer.
J'arrive donc a identifer la touche pressée, et a afficher l'heure (format assez bizar :"2406642" par ex) quand je la presse et a afficher l'heure quand je la relache. Le soucis c'est quand je reste appuyé sur ma touche mon timestamp s'actualise donc j'aurai appué longtemps, l différence de temps entre keyDown et keyUp sera toujours nulle.
Vous voyez mon soucis ?
(BOOL)isRepeat pour savoir si ma touche etait restée enfoncée. Si c'est pas le cas on prend timestamp sinon on fait rien et hop le tour est joué
NSDate ? Tu as une fonction de classe:
[tt]
+ (NSTimeInterval)timeIntervalSinceReferenceDate
timeIntervalSinceReferenceDate
Returns the interval between the first instant of 1 January 2001, GMT and the current date and time.
[/tt]
Et NSObject (et sa méthode d'instance) performSelector:
[tt]
performSelector:withObject:afterDelay:inModes:
Invokes a method of the receiver on the current thread using the specified modes after a delay.
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes
[/tt]
Enfin, j'essayerais comme ça..