Starker-xp
MP / Email
Bonjour à tous et à toutes,
Je parle ici du logiciel sdk
Je me retrouve confronter à un problème,
Je créer mon menu et un sous menu.
Quand je lance avec l'émulateur je sélectionne la touche 1 de mon menu. Mon sous-menu apparait. Si je sélectionne la touche 2 le sous menu marche.
Mais si je ré-appuie sur la touche 1 il me remet le sous menu.
Comment puis je pallier a se soucis ? merci d'avance
PierrotLL
MP / Email
Hm, je ne comprend pas très bien. On pourrait voir une partie du code source s'il te plait?
Starker-xp
MP / Email
Je débute tous juste avec ce logiciel et ce type de programmation
voila
Code: while(1)
{
GetKey(&key );
if (key == KEY_CHAR_1)
{
Bdisp_AllClr_DDVRAM();
PrintMini (40,1,"Energetique",0);
PrintMini (1,14,"[1].Travail",0);
PrintMini (1,21,"[2].Energie potentielle",0);
PrintMini (1,28,"[3].Energie cinetique",0);
PrintMini (1,35,"[4].Puissance",0);
PrintMini (1,42,"[5].Rendement",0);
PrintMini (1,49,"[6].Theoreme de",0);
PrintMini (1,55,"l energie cinetique",0);
Bdisp_PutDisp_DD();
key = 0;
}
while (key==KEY_CHAR_1 && key==KEY_CHAR_2 && key==KEY_CHAR_3 && key==KEY_CHAR_4 && key==KEY_CHAR_5 && key==KEY_CHAR_6)
{
GetKey(&key);
}
// le problème apparait ici:
//Si j'appuie sur 1 le menu va rester tel quel
//Si jappuie sur 2 il va afficher bibi
//Si je rappuie sur 1 le meu reapparait et
//toutou ne s'affiche pas a lécran
if( key==KEY_CHAR_1)
{
Bdisp_AllClr_DDVRAM();
PrintMini (1,1,"toutou",0);
Bdisp_PutDisp_DD();
}
if( key==KEY_CHAR_2)
{
key = 0;
Bdisp_AllClr_DDVRAM();
PrintMini (1,1,"bibi",0);
Bdisp_PutDisp_DD();
}
PierrotLL
MP / Email
Bon, déja, dans la condition du while, il y a un problème. While veut dire "tant que", et la boucle tourne tant que la condition est vraie. Ici, ta condition est forcément fausse, car key ne peut pas être égal à KEY_CHAR_1 et à KEY_CHAR_2 en même temps.
Je pense que tu voulais qu'on quitte la boucle si on appuie sur une des 6 touches. Dans ce cas, il faut écrire :Code: while(key!=KEY_CHAR_1 && key!=KEY_CHAR_2 && ...) Ca devrait résoudre ton problème.
Et pour information, la fonction GetKey appelle Bdisp_PutDisp_DD, tu n'as donc pas besoin de l'appeler avant d'appeler GetKey
Starker-xp
MP / Email
ok merci Ben pour avouer j'ai trouver ce type de code dans un fichier source car ya pas de tutoriel pour créer un menu ^^.
Bah ben merci je vais tenter.
En se qui concerne GetKey quand je me serait améliorer je penserai a ce conseil la o moins sa me perturbera pas
Ben non je pense que l'on ne peut pas faire de sous menu sa quitte l'application des que je sélectionne le sous menu :/
PierrotLL
MP / Email
Ah, ça ce n'est pas normal.
Tu peux faire un truc comme ça, sa fonctionnera :Code: while(1)
{
Bdisp_AllClr_VRAM();
PrintMini(1, 0, "Menu principal");
PrintMini(1, 10, "[1]truc");
PrintMini(1, 20, "[2]machin");
PrintMini(1, 30, "[3]bidule");
do
{
GetKey(&key);
}while(key<KEY_CHAR_1 || key>KEY_CHAR_3); /*on continu tant que la touche appuyée n'est pas entre 1 et 3*/
Bdisp_AllClr_VRAM();
switch(key)
{
case KEY_CHAR_1:
PrintMini(1, 0, "Menu truc");
PrintMini(1, 10, "[1]premier truc");
PrintMini(1, 20, "[2]second truc");
do
{
GetKey(&key);
}while(key<KEY_CHAR_1 || key>KEY_CHAR_2);
switch(key)
{
case KEY_CHAR_1:
PrintMini(1, 0, "Menu premier truc");
break;
case KEY_CHAR_2:
PrintMini(1, 0, "Menu second truc");
break;
}
break;
case KEY_CHAR_2:
PrintMini(1, 0, "Menu machin");
break;
case KEY_CHAR_3:
PrintMini(1, 0, "Menu bidule");
break;
}
GetKey(&key);
}
J'ai utilisé une boucle do-while et un switch, je ne sais pas si tu connais ces structures. Tu peux aller voir sur le site du zero dans les chapitres sur les boucles et les conditions, tout y est expliqué
Si tu as d'autres questions, n'hésite pas
Starker-xp
MP / Email
ouias je connais obligé mdr ^^ fait du c en cour.
J'avais pensé au switch mais savais pas trop comment faire.^^
Merci tu viens de me donner la structure ^^
je savais pas quoi mettre après case ^^.
Sinon c'est bon j'ai reussit a faire mon sous menu ^^
Vais pouvoir entrer tous mes cours dans la calto maintenant ^^
:P
PierrotLL
MP / Email
Alors, t'as réussi? ça fonctionne comme tu veux? si tu veux tu peux poster ton programme sur le site