PDA

Voir la version complète : problems à la saisie clavier


Sirion
04/09/2005, 13h26
bonjour, j'ai quelque problems quand je fais une saisie clavier pour recuperer un texte.

je recupere les caracters comme ceci:

texte[lettre] = Evenement.key.keysym.unicode;

1er: je peut pas recuperer les majuscules, les chiffres ect..., comment faire pour que la touche shift soit pris en compte ?

2em: je verifis une ocndition avant de les choper pour eviter la repetitions:


if ( (texte[lettre-1] != Evenement.key.keysym.sym)
|| (SDL_GetTicks()>TempDeLaDernierToucheAppuyer+200) )



et ben sa marche, mais pas avec les touches du numpad :00000005:

3eme: quand on appuy sur les fleches directionnel sa fais planter, on peut plus continuer de taper:/

deathangel
04/09/2005, 13h36
la touche shit

ca se fume ??
oki je sors...

MrGecko
04/09/2005, 15h42
Je pense que ca pourra t'aider, moi je l'ai mis en favoris, SDLKey- SDL Keysym Definitions :

lien (http://www.fifi.org/cgi-bin/man2html/usr/share/man/man3/SDLKey.3.gz)

Corkus
04/09/2005, 15h55
1er: Va voir ici (http://www.libsdl.org/cgi/docwiki.cgi/SDL_5fGetModState) Ca te montrera comment utiliser les "modifier keys" (CTRL,SHIFT....)

2è : Pourquoi simplement ne pas utiliser SDL_SetKeyRepeat. Tu n'auras pas de prob avec le répétition.

3è : Ca doit être un problème avec ton tableau de touche. Comment le récupère s-tu?

Sirion
05/09/2005, 19h19
1) je vais voir sa en dernier :)

2)j'utilise pas SDL_SetKeyRepeat() car il y a d'autre fonction qui on bession du clavier en meme temsp. mais je vient de voir que les conditions ne rentre jamais en compte oO voila le bout de code:


switch (Evenement.type)
{
case SDL_KEYDOWN:

/*[...]*/


if ( (EnCours) && (lettre < 10) && (texte[lettre-1] != Evenement.key.keysym.sym)
|| (SDL_GetTicks()>TempDeLaDernierToucheAppuyer+200)
/*&& (Evenement.key.keysym.unicode != SDLK_RETURN)*/ )
{
texte[lettre] = Evenement.key.keysym.unicode;


TempDeLaDernierToucheAppuyer = SDL_GetTicks();

lettre++;
}
break;

}


les conditions if(EnCours) et if(letrre<10) sont completement ignorées, j'aimerai bien que sa fonctionne la.

Corkus
05/09/2005, 20h49
Si tu enlevais le OU (||) et un ET (&&) peut-être que la, il seront pris en compte, a moins que tu veuilles les séparer.

Sirion
06/09/2005, 20h25
hien ? je les veut tous moi, je veut pas virer :]

j'ai quand meme tester sans le OU et sa marche, mais il me le faut aussi !!

sinon pour les touches chifres du numkey sa fais pareil (sa se repette) et pariel aussi: sa plante quan don appuy sur les fleches :/

asmanur
07/09/2005, 07h11
Avec key, la touche appuyée
if(key>=SDLK_KP0 && key <= SDL_KP9)
key += SDLK_KP0-'0';

Corkus
07/09/2005, 12h28
Je viens de penser déjà à un problème:

Le problème est que tu récupères les touches au format UNICODE. Il faut alors récupérer l'information avec keysym.sym (Je ne suis pas sur pour ca, mais j'ai pas le temps de vérifier, mais ca m'a tout l'air d'être ca).

asmanur
07/09/2005, 12h39
Verifie aussi que ton tableau est bien un tableau d'int, en effet SDL gère plus de 255 touches différentes ( ex la touche 0 du pavé numérique correspond à 0x100 soit 1 de plus que la limite des char )

Sirion
18/09/2005, 20h42
bon ,j'ai un resultat a peu pres correct, les majuscule marche, les touche du hat avec shift ausii ( 12345 ....) avec alt aussi. le seul problem c'est que lorsqu'on appuis sur é ou è, ou ç, ou ¤ l'anti repetition est annuller. et quand on appuis sur la touche supprimer il reconnais pas (il affiche un rectangle) il fais ca aussi lorsqu'on fai un alt + ctrl + une touche.

enfin pour l'instant sa me suffit. mais si quelqu'un a deja fais sa m'interesse :)