le_duche
Messages postés
159
Date d'inscription
lundi 13 juin 2005
Statut
Membre
Dernière intervention
26 février 2009
13 déc. 2005 à 15:40
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.