Majuscules sous SDL

Signaler
Messages postés
11
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
16 décembre 2005
-
cs_niglo
Messages postés
3
Date d'inscription
mercredi 21 décembre 2005
Statut
Membre
Dernière intervention
9 janvier 2006
-
Comment fais t'on pour vérifier que les majuscule ssont activée sous SDL ?

courjete

12 réponses

Messages postés
159
Date d'inscription
lundi 13 juin 2005
Statut
Membre
Dernière intervention
26 février 2009

Moi j'ai une variable glogale "etat", qui peut prendre les valeurs:



#define IN_MAJ_ALTGR_NUM 7


#define IN_MAJ_ALTGR 6


#define IN_MAJ_NUM 5


#define IN_MAJ 4


#define IN_ALTGR_NUM 3


#define IN_ALTGR 2


#define IN_NUM 1


#define IN_VOID 0



je définis aussi:



#define TCH_ESC 27


#define TCH_F1 282


#define TCH_F2 283


#define TCH_F3 284


#define TCH_F4 285


#define TCH_F5 286


#define TCH_F6 287


#define TCH_F7 288


#define TCH_F8 289


#define TCH_F9 290


#define TCH_F10 291


#define TCH_F11 292


#define TCH_F12 293


#define TCH_PRT_SCR 317


#define TCH_SCROLL_LOCK 302


#define TCH_PAUSE 19


#define TCH_EXP2 96


#define TCH_1 49


#define TCH_2 50


#define TCH_3 51


#define TCH_4 52


#define TCH_5 53


#define TCH_6 54


#define TCH_7 55


#define TCH_8 56


#define TCH_9 57


#define TCH_0 48


#define TCH_DEG 45


#define TCH_UND 61


#define TCH_BACK 8


#define TCH_INS 277


#define TCH_HOME 278


#define TCH_PAGE_UP 280


#define TCH_NUM_LOCK 300


#define TCH_NUM_SLASH 267


#define TCH_NUM_STAR 268


#define TCH_NUM_MIN 269


#define TCH_TAB 9


#define TCH_A 113


#define TCH_Z 119


#define TCH_E 101


#define TCH_R 114


#define TCH_T 116


#define TCH_Y 121


#define TCH_U 117


#define TCH_I 105


#define TCH_O 111


#define TCH_P 112


#define TCH_CIRC 91


#define TCH_DOL 93


#define TCH_ENTER 13


#define TCH_DEL 127


#define TCH_END 279


#define TCH_PAGE_DOWN 281


#define TCH_NUM_7 263


#define TCH_NUM_8 264


#define TCH_NUM_9 265


#define TCH_NUM_PLUS 270


#define TCH_CAPS_LOCK 301


#define TCH_Q 97


#define TCH_S 115


#define TCH_D 100


#define TCH_F 102


#define TCH_G 103


#define TCH_H 104


#define TCH_J 106


#define TCH_K 107


#define TCH_L 108


#define TCH_M 59


#define TCH_P100 39


#define TCH_MU 92


#define TCH_NUM_4 260


#define TCH_NUM_5 261


#define TCH_NUM_6 262


#define TCH_MAJ_L 304


#define TCH_W 122


#define TCH_X 120


#define TCH_C 99


#define TCH_V 118


#define TCH_B 98


#define TCH_N 110


#define TCH_VIRG 109


#define TCH_PTVIRG 44


#define TCH_2PT 46


#define TCH_EGAL 47


#define TCH_MAJ_R 303


#define TCH_UP 273


#define TCH_NUM_1 257


#define TCH_NUM_2 258


#define TCH_NUM_3 259


#define TCH_NUM_ENTER 271


#define TCH_CTRL_L 306


#define TCH_START_L 310


#define TCH_ALT 308


#define TCH_SPACE 32


#define TCH_ALT_GR 307


#define TCH_START_R 309


#define TCH_FICH 319


#define TCH_CTRL_R 305


#define TCH_LEFT 276


#define TCH_DOWN 274


#define TCH_RIGHT 275


#define TCH_NUM_0 256


#define TCH_NUM_PT 266



et



#define ACCENT_NONE 0


#define ACCENT_AIGU 1


#define ACCENT_GRAVE 2


#define ACCENT_CIRC 3


#define ACCENT_TREMA 4


#define ACCENT_TILDE 5



Et puis j'ai les deux fonctions suivantes: (elles sont peut etre buggées, je les ai codé mais pas encore compilé...)



void UserWriteAjoute(char norm,char maj,char altgr)


{ //Fonction utilisée exclusivement par UserWrite(char*,int&,int&,int)


if(mem != ACCENT_NONE)


return;


if(taille_texte >= taille_texte_max)


return;


char a;


if((etat IN_MAJ) || (etat IN_MAJ_NUM))


a = maj;


else if((etat IN_ALTGR) || (etat IN_ALTGR_NUM))


a = altgr;


else


a = norm;


if(a == NO_CHAR)


return;


if(insert)


{


for(int j=taille_texte;j>curseur;j--)


tableau[j] = tableau[j-1];


tableau[curseur] = a;


taille_texte++;


curseur++;


}


else


{


tableau[curseur] = a;


if(curseur == taille_texte)


taille_texte++;


curseur++;


}


}



/////////////////////////////////////////////////



int UserWrite(char* tab,int& dim,int& i,int max)


{


tableau = tab;


taille_texte = dim;


taille_texte_max = max;


curseur = i;


int tch = WaitKey();


etat = IN_VOID;


if((key[TCH_MAJ_L] || key[TCH_MAJ_R]) ||
(key[TCH_CAPS_LOCK] && !(key[TCH_MAJ_L] || key[TCH_MAJ_R])))


etat += IN_MAJ;


if(((key[TCH_CTRL_L] || key[TCH_CTRL_R]) && key[TCH_ALT]) || key[TCH_ALT_GR])


etat += IN_ALTGR;


if(key[TCH_NUM_LOCK])


etat += IN_NUM;


if((etat IN_MAJ_ALTGR) || (etat IN_MAJ_ALTGR_NUM)) //Si maj et altgr sont en meme temps


return tch;


switch(tch)


{


case TCH_EXP2 : UserWriteAjoute('²','³',NO_CHAR); break;


case TCH_1 : UserWriteAjoute('&','1','|'); break;


case TCH_2 : UserWriteAjoute('é','2','@'); break;


case TCH_3 : UserWriteAjoute('"','3','#'); break;


case TCH_4 : UserWriteAjoute('&'+1,'4',NO_CHAR); break;


case TCH_5 : UserWriteAjoute('(','5',NO_CHAR); break;


case TCH_6 : UserWriteAjoute('§','6','^'); break;


case TCH_7 : UserWriteAjoute('è','7',NO_CHAR); break;


case TCH_8 : UserWriteAjoute('!','8',NO_CHAR); break;


case TCH_9 : UserWriteAjoute('ç','9','{'); break;


case TCH_0 : UserWriteAjoute('à','0','}'); break;


case TCH_DEG : UserWriteAjoute(')','°',NO_CHAR); break;


case TCH_UND : UserWriteAjoute('-','_',NO_CHAR); break;


case TCH_BACK :


if(curseur > 0)


{


for(int j=curseur;j<taille_texte;j++)


tableau[j-1] = tableau[j];


tableau[taille_texte-1] = 0;


taille_texte--;


curseur--;


}


break;


case TCH_INS : insert = !insert; break;


case TCH_NUM_SLASH : UserWriteAjoute('/','/',NO_CHAR); break;


case TCH_NUM_STAR : UserWriteAjoute('*','*',NO_CHAR); break;


case TCH_NUM_MIN : UserWriteAjoute('-','-',NO_CHAR); break;


case TCH_A :


switch(mem)


{



case ACCENT_NONE : UserWriteAjoute('a','A',NO_CHAR);
break;



case ACCENT_AIGU : mem = ACCENT_NONE;
UserWriteAjoute('á','Á',NO_CHAR); break;



case ACCENT_GRAVE : mem = ACCENT_NONE;
UserWriteAjoute('à','À',NO_CHAR); break;



case ACCENT_CIRC : mem = ACCENT_NONE;
UserWriteAjoute('â','Â',NO_CHAR); break;



case ACCENT_TREMA : mem = ACCENT_NONE;
UserWriteAjoute('ä','Ä',NO_CHAR); break;



case ACCENT_TILDE : mem = ACCENT_NONE;
UserWriteAjoute('ã','Ã',NO_CHAR); break;


}


break;


case TCH_Z : UserWriteAjoute('z','Z',NO_CHAR); break;


case TCH_E :


switch(mem)


{



case ACCENT_NONE : UserWriteAjoute('e','E','€');
break;



case ACCENT_AIGU : mem = ACCENT_NONE;
UserWriteAjoute('é','É',NO_CHAR); break;



case ACCENT_GRAVE : mem = ACCENT_NONE;
UserWriteAjoute('è','È',NO_CHAR); break;



case ACCENT_CIRC : mem = ACCENT_NONE;
UserWriteAjoute('ê','Ê',NO_CHAR); break;



case ACCENT_TREMA : mem = ACCENT_NONE;
UserWriteAjoute('ë','Ë',NO_CHAR); break;


}


break;


case TCH_R : UserWriteAjoute('r','R',NO_CHAR); break;


case TCH_T : UserWriteAjoute('t','T',NO_CHAR); break;


case TCH_Y :


switch(mem)


{



case ACCENT_NONE : UserWriteAjoute('y','Y',NO_CHAR);
break;



case ACCENT_AIGU : mem = ACCENT_NONE;
UserWriteAjoute('ý','Ý',NO_CHAR); break;



case ACCENT_TREMA : mem = ACCENT_NONE;
UserWriteAjoute('ÿ',NO_CHAR,NO_CHAR); break;


}


break;


case TCH_U :


switch(mem)


{



case ACCENT_NONE : UserWriteAjoute('u','U',NO_CHAR);
break;



case ACCENT_AIGU : mem = ACCENT_NONE;
UserWriteAjoute('ú','Ú',NO_CHAR); break;



case ACCENT_GRAVE : mem = ACCENT_NONE;
UserWriteAjoute('ù','Ù',NO_CHAR); break;



case ACCENT_CIRC : mem = ACCENT_NONE;
UserWriteAjoute('û','Û',NO_CHAR); break;



case ACCENT_TREMA : mem = ACCENT_NONE;
UserWriteAjoute('ü','Ü',NO_CHAR); break;


}


break;


case TCH_I :


switch(mem)


{



case ACCENT_NONE : UserWriteAjoute('i','I',NO_CHAR);
break;



case ACCENT_AIGU : mem = ACCENT_NONE;
UserWriteAjoute('í','Í',NO_CHAR); break;



case ACCENT_GRAVE : mem = ACCENT_NONE;
UserWriteAjoute('ì','Ì',NO_CHAR); break;



case ACCENT_CIRC : mem = ACCENT_NONE;
UserWriteAjoute('î','Î',NO_CHAR); break;



case ACCENT_TREMA : mem = ACCENT_NONE;
UserWriteAjoute('ï','Ï',NO_CHAR); break;


}


break;


case TCH_O :


switch(mem)


{



case ACCENT_NONE : UserWriteAjoute('o','O',NO_CHAR);
break;



case ACCENT_AIGU : mem = ACCENT_NONE;
UserWriteAjoute('ó','Ó',NO_CHAR); break;



case ACCENT_GRAVE : mem = ACCENT_NONE;
UserWriteAjoute('ò','Ò',NO_CHAR); break;



case ACCENT_CIRC : mem = ACCENT_NONE;
UserWriteAjoute('ô','Ô',NO_CHAR); break;



case ACCENT_TREMA : mem = ACCENT_NONE;
UserWriteAjoute('ö','Ö',NO_CHAR); break;



case ACCENT_TILDE : mem = ACCENT_NONE;
UserWriteAjoute('õ','Õ',NO_CHAR); break;


}


break;


case TCH_P : UserWriteAjoute('p','P',NO_CHAR); break;


case TCH_CIRC :


if((etat IN_MAJ) || (etat IN_MAJ_NUM))


if(mem == ACCENT_TREMA)


{


mem = ACCENT_NONE;


UserWriteAjoute(NO_CHAR,'š',NO_CHAR);


}


else


mem = ACCENT_TREMA;


else if((etat IN_ALTGR) || (etat IN_ALTGR_NUM))


UserWriteAjoute(NO_CHAR,NO_CHAR,'[');


else


if(mem == ACCENT_CIRC)


{


mem = ACCENT_NONE;


UserWriteAjoute('^',NO_CHAR,NO_CHAR);


}


else


mem = ACCENT_CIRC;


break;


case TCH_DOL : UserWriteAjoute('$','*',']'); break;


case TCH_DEL :


if(curseur < taille_texte)


{


for(int j=curseur+1;j<taille_texte;j++)


tableau[j-1] = tableau[j];


tableau[taille_texte-1] = 0;


taille_texte--;


}


case TCH_NUM_7 : if(etat == IN_NUM) UserWriteAjoute('7',NO_CHAR,NO_CHAR); break;


case TCH_NUM_8 : if(etat == IN_NUM) UserWriteAjoute('8',NO_CHAR,NO_CHAR); break;


case TCH_NUM_9 : if(etat == IN_NUM) UserWriteAjoute('9',NO_CHAR,NO_CHAR); break;


case TCH_NUM_PLUS : UserWriteAjoute('+','+',NO_CHAR); break;


case TCH_Q : UserWriteAjoute('q','Q',NO_CHAR); break;


case TCH_S : UserWriteAjoute('s','S',NO_CHAR); break;


case TCH_D : UserWriteAjoute('d','D',NO_CHAR); break;


case TCH_F : UserWriteAjoute('f','F',NO_CHAR); break;


case TCH_G : UserWriteAjoute('g','G',NO_CHAR); break;


case TCH_H : UserWriteAjoute('h','H',NO_CHAR); break;


case TCH_J : UserWriteAjoute('j','J',NO_CHAR); break;


case TCH_K : UserWriteAjoute('k','K',NO_CHAR); break;


case TCH_L : UserWriteAjoute('l','L',NO_CHAR); break;


case TCH_M : UserWriteAjoute('m','M',NO_CHAR); break;


case TCH_P100 :


if((etat IN_ALTGR) || (etat IN_ALTGR_NUM))


if(mem == ACCENT_AIGU)


{


mem = ACCENT_NONE;


UserWriteAjoute(NO_CHAR,NO_CHAR,'Ž');


}


else


mem = ACCENT_AIGU;


else


UserWriteAjoute('ù','%',NO_CHAR);


break;


case TCH_MU :


if((etat IN_ALTGR) || (etat IN_ALTGR_NUM))


if(mem = ACCENT_GRAVE)


{


mem = ACCENT_NONE;


UserWriteAjoute(NO_CHAR,NO_CHAR,'`');


}


else


mem = ACCENT_GRAVE;


else


UserWriteAjoute('µ','£',NO_CHAR);


break;


case TCH_NUM_4 : if(etat == IN_NUM) UserWriteAjoute('4',NO_CHAR,NO_CHAR); break;


case TCH_NUM_5 : if(etat == IN_NUM) UserWriteAjoute('5',NO_CHAR,NO_CHAR); break;


case TCH_NUM_6 : if(etat == IN_NUM) UserWriteAjoute('6',NO_CHAR,NO_CHAR); break;


case TCH_W : UserWriteAjoute('w','W',NO_CHAR); break;


case TCH_X : UserWriteAjoute('x','X',NO_CHAR); break;


case TCH_C : UserWriteAjoute('c','C',NO_CHAR); break;


case TCH_V : UserWriteAjoute('v','V',NO_CHAR); break;


case TCH_B : UserWriteAjoute('b','B',NO_CHAR); break;


case TCH_N :


switch(mem)


{



case ACCENT_NONE : UserWriteAjoute('n','N',NO_CHAR);
break;



case ACCENT_TILDE : mem = ACCENT_NONE;
UserWriteAjoute('ñ','Ñ',NO_CHAR); break;


}


break;


case TCH_VIRG : UserWriteAjoute(',','?',NO_CHAR); break;


case TCH_PTVIRG : UserWriteAjoute(';','.',NO_CHAR); break;


case TCH_2PT : UserWriteAjoute(':','/',NO_CHAR); break;


case TCH_EGAL :


if((etat IN_ALTGR) || (etat IN_ALTGR_NUM))


if(mem = ACCENT_TILDE)


{


mem = ACCENT_NONE;




UserWriteAjoute(NO_CHAR,NO_CHAR,'~');


}


else


mem = ACCENT_TILDE;


else


UserWriteAjoute('=','+',NO_CHAR);


break;


case TCH_NUM_1 : if(etat == IN_NUM) UserWriteAjoute('1',NO_CHAR,NO_CHAR); break;


case TCH_NUM_2 : if(etat == IN_NUM) UserWriteAjoute('2',NO_CHAR,NO_CHAR); break;


case TCH_NUM_3 : if(etat == IN_NUM) UserWriteAjoute('3',NO_CHAR,NO_CHAR); break;


case TCH_SPACE :


switch(mem)


{



case ACCENT_NONE : UserWriteAjoute(' ',' ',NO_CHAR);
break;



case ACCENT_AIGU : mem = ACCENT_NONE;
UserWriteAjoute('Ž','Ž',NO_CHAR); break;



case ACCENT_GRAVE : mem = ACCENT_NONE;
UserWriteAjoute('`','`',NO_CHAR); break;



case ACCENT_CIRC : mem = ACCENT_NONE;
UserWriteAjoute('^','^',NO_CHAR); break;



case ACCENT_TREMA : mem = ACCENT_NONE;
UserWriteAjoute('š','š',NO_CHAR); break;



case ACCENT_TILDE : mem = ACCENT_NONE;
UserWriteAjoute('~','~',NO_CHAR); break;


}


break;


case TCH_LEFT : if(curseur > 0) curseur--; break;


case TCH_RIGHT : if(curseur < taille_texte) curseur++; break;


case TCH_NUM_0 :


if(etat == IN_NUM)


UserWriteAjoute('0',NO_CHAR,NO_CHAR);


else


insert = !insert;


break;


case TCH_NUM_PT :


if(etat == IN_NUM)


UserWriteAjoute('.',NO_CHAR,NO_CHAR);


else


if(curseur < taille_texte)


{



for(int
j=curseur+1;j<taille_texte;j++)



tableau[j-1] =
tableau[j];


tableau[taille_texte-1] = 0;


taille_texte--;


}


}


dim = taille_texte;


i = curseur;


return tch;


}











Mais je pense que cette version est buggée, je pense bien que j'en ai
fait une autre depuis, mais la je ne suis pas chez moi (j'ai juste ma
clef usb... ).

Je vais regarder pour demain, mais normalement j'ai quelque chose de solide.
Duchon.
Messages postés
11
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
16 décembre 2005

Wah !

Maboule ta fonction ;-)

moi pour l'instant j'avais ça :



void touches () {

if(l==30)y+=10;

if (l==49)l=0;

l++;

while (1) {

while (SDL_PollEvent(&event)) {


if (event.type == SDL_KEYDOWN) {


switch (event.key.keysym.sym) {


case SDLK_ESCAPE:quit();


break;


case SDLK_q:p[l-1]='a';


affichelettres(x,y,p);


break;


case SDLK_b:p[l-1]='b';


affichelettres(x,y,p);


break;


case SDLK_c:p[l-1]='c';


affichelettres(x,y,p);


break;


case SDLK_d:p[l-1]='d';


affichelettres(x,y,p);


break;


case SDLK_e:p[l-1]='e';


affichelettres(x,y,p);


break;


case SDLK_f:p[l-1]='f';


affichelettres(x,y,p);


break;


case SDLK_g:p[l-1]='g';


affichelettres(x,y,p);


break;


case SDLK_h:p[l-1]='h';


affichelettres(x,y,p);


break;


case SDLK_i:p[l-1]='i';


affichelettres(x,y,p);


break;


case SDLK_j:p[l-1]='j';


affichelettres(x,y,p);


break;


case SDLK_k:p[l-1]='k';


affichelettres(x,y,p);


break;


case SDLK_l:p[l-1]='l';


affichelettres(x,y,p);


break;


case SDLK_SEMICOLON:p[l-1]='m';


affichelettres(x,y,p);


break;


case SDLK_n:p[l-1]='n';


affichelettres(x,y,p);


break;


case SDLK_o:p[l-1]='o';


affichelettres(x,y,p);


break;


case SDLK_p:p[l-1]='p';


affichelettres(x,y,p);


break;


case SDLK_a:p[l-1]='q';


affichelettres(x,y,p);


break;


case SDLK_r:p[l-1]='r';


affichelettres(x,y,p);


break;


case SDLK_s:p[l-1]='s';


affichelettres(x,y,p);


break;


case SDLK_t:p[l-1]='t';


affichelettres(x,y,p);


break;


case SDLK_u:p[l-1]='u';


affichelettres(x,y,p);


break;


case SDLK_v:p[l-1]='v';


affichelettres(x,y,p);


break;


case SDLK_z:p[l-1]='w';


affichelettres(x,y,p);


break;


case SDLK_x:p[l-1]='x';


affichelettres(x,y,p);


break;


case SDLK_y:p[l-1]='y';


affichelettres(x,y,p);


break;


case SDLK_w:p[l-1]='z';


affichelettres(x,y,p);


break;


}


}

}

}

}



avec affichelettres (int x, int y, char*lettre) une fonction qui me
permet d'afficher les lettres tapées à l'écran et de les enregistrer
dans une variable.

Donc ce qu'il me faudrait c'est juste un moyen de tester si les
majuscules sont activées ou pas. Ce qui me donnerait une fonction du
genre :



ecrire () {

if (majuscules) {

blablabla}

else {blablabla}

}



donc si quelqu'un pouvait me donner un tuyau ;-)


courjete
Messages postés
159
Date d'inscription
lundi 13 juin 2005
Statut
Membre
Dernière intervention
26 février 2009

ben il y a des codes pour les touches maj et pour caps lock, regarde dans mes constantes définies au début:



#define TCH_MAJ_L 304

#define TCH_MAJ_R 303

#define TCH_CAPS_LOCK 301


Duchon.
Messages postés
159
Date d'inscription
lundi 13 juin 2005
Statut
Membre
Dernière intervention
26 février 2009

Mais moi je gère tout le clavier (attention, j'ai défini mes
variables pour la version clavier-Belgique), mais les SDLK_... sont
pour le qwerty...
Duchon.
Messages postés
11
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
16 décembre 2005

Ok,ok, c'est bien cool ça. J'ai remarqué que les SDL_K sont pour le
qwerty, ce qui m'a légérement posé problème au début mais je l'ai
résolut et ça marche nikel.

Merci pour les define, je testerai dès que j'aurai le temps. Merci bien

courjete
Messages postés
159
Date d'inscription
lundi 13 juin 2005
Statut
Membre
Dernière intervention
26 février 2009

mais le plus simple est de te faire une petite application SDL qui
renvoie le numéro de la touche enfoncée, comme ca tu peux gérer ca sans
trop se casser la tete...

J'ai le code pour ca, je peux le poster demain...
Duchon.
Messages postés
11
Date d'inscription
jeudi 10 avril 2003
Statut
Membre
Dernière intervention
16 décembre 2005

Bah pas de problèmes, je regarderai ça avec intérêt, de toute façon, je
doute que je ferai quoi que ce soit en progra ce soir ;-)

bah merci beaucoup

courjete
Messages postés
3
Date d'inscription
mercredi 21 décembre 2005
Statut
Membre
Dernière intervention
9 janvier 2006

Mais vous êtes fous !
Vous faites comme vous voulez, m'enfin voilà comment je récupère les touches avec la SDL (arpès initialisation avec SDL_Init et tout bien-sûr):

int main(int argc, char **argv) {
int touche;

SDL_Init et tout ça ici...

// pour avoir tous les caractères, majuscules et accentués et tout
SDL_EnableUNICODE(1);
// pour la répétition auto
SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);

// boucle d'evt:
while (SDL_PollEvent(&event))
switch (event.type) {
case SDL_QUIT: exit(0);
case SDL_KEYDOWN:
touche = event.key.keysym.unicode;
if (touche == 0) {
// si le caractere est pas imprimable (ctrl,shift...)
touche = event.key.keysym.sym;
}
affichelettreoucquetuveuxmonpote(x,y,touche);
default: break;
}
}
Messages postés
3
Date d'inscription
mercredi 21 décembre 2005
Statut
Membre
Dernière intervention
9 janvier 2006

Au fait, pour répondre vraiment à ta question, pour savoir si shift ou caps_lock sont enfoncé, on fait comme ça:

( de la doc ici: http://www.libsdl.org/cgi/docwiki.cgi/SDL_5fGetModState )

if (SDL_GetModState() & (KMOD_SHIFT|KMOD_CAPS)) {
majuscules
} else {
minuscules
}
Messages postés
159
Date d'inscription
lundi 13 juin 2005
Statut
Membre
Dernière intervention
26 février 2009

Et comment tu gère les flèches, le "delete", le "back", les caractères
qui dépendent de ton type de clavier (comme le @, le !, ...), les
accents (ma fonction permet à l'utilisateur d'écrire des trucs du
genre: Ä, ñ, ú,...) ???

Duchon.
Messages postés
159
Date d'inscription
lundi 13 juin 2005
Statut
Membre
Dernière intervention
26 février 2009

Note: quand j'aurai amélioré ma fonction à tous les types de claviers, elle sera encore trois fois plus longue ^^

Duchon.
Messages postés
3
Date d'inscription
mercredi 21 décembre 2005
Statut
Membre
Dernière intervention
9 janvier 2006

Normalement, SDL gère tout seul le mappage du clavier en utilisant les fonctions du système d'exploitation, donc pas besoin de se tracasser pour les différents claviers, enfin presque (y'a quelques comportements bizarres, mais enfin c'est facile à corrgier et moins fastidieux qu'écrire un "case" pour chaque touche).

Pour gérer les caractères non-imprimable, faut utiliser le champs event.key.keysym.sym (comme dit plus haut), qui correspond aux macros décrites ici: http://www.libsdl.org/cgi/docwiki.cgi/SDLKey

Ceci dit lire une doc ça peut servir parfois...

En changeant mon code plus haut, ça donne par exemple:

while (SDL_PollEvent(&event))
switch (event.type) {
case SDL_QUIT: exit(0);
case SDL_KEYDOWN:
touche = event.key.keysym.sym;
if (event.key.keysym.unicode != 0) {
// si le caractere est imprimable
affichelettreoucquetuveuxmonpote(x,y,event.key.keysym.unicode);
} else if (touche == SDL_BACKSPACE) {
effacerlettre(x,y);
} else if (touche == SDL_LEFT) { // fleche gauche
bouge(-1);
} etc..................
default: break;
}
}