Pas encore membre?


soucis variable touche
index du forum >> Problemes / Questions >> soucis variable touche

Starker-xp

MP / Email
posté le 20/03/2008 à 22:27 par Starker-xp

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
posté le 21/03/2008 à 13:14 par PierrotLL

Hm, je ne comprend pas très bien. On pourrait voir une partie du code source s'il te plait?
Starker-xp

MP / Email
posté le 21/03/2008 à 16:55 par Starker-xp

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
posté le 21/03/2008 à 20:10 par PierrotLL

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
posté le 21/03/2008 à 20:49 par Starker-xp

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
posté le 21/03/2008 à 22:16 par PierrotLL

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
posté le 21/03/2008 à 22:27 par Starker-xp

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
posté le 28/03/2008 à 23:45 par PierrotLL

Alors, t'as réussi? ça fonctionne comme tu veux? si tu veux tu peux poster ton programme sur le site

Pseudo:
Email:
anti spam:
( plus de smileys )





http://top-progcasio.com V5.0 © par Bebe Vador 2005 - 2008 | il y a 2 personnes connectées | sitemap(txt) | sitemap(html) | sitemap(xml)