Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2871 connectés 

  FORUM HardWare.fr
  Programmation
  C

  menu deroulant

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

menu deroulant

n°1356742
kiooik
Posté le 30-04-2006 à 13:40:29  profilanswer
 

Bonjour tout le monde,
 
voila je veux créer un petit jeux en langage c
 
j'ai fait un menu déroulant, des fonctions,...
 
Le programme se compile bien et quand je lance mon programme, le menu déroulant apparait mais rien d'autre ne se fait... vous pouvez voir le code source du programme a cettre adresse: http://home.scarlet.be/kio/

Message cité 1 fois
Message édité par kiooik le 30-04-2006 à 13:42:02
mood
Publicité
Posté le 30-04-2006 à 13:40:29  profilanswer
 

n°1356745
Emmanuel D​elahaye
C is a sharp tool
Posté le 30-04-2006 à 13:45:33  profilanswer
 

kiooik a écrit :

voila je veux créer un petit jeux en langage c
j'ai fait un menu déroulant, des fonctions,...
 
Le programme se compile bien et quand je lance mon programme, le menu déroulant apparait mais rien d'autre ne se fait... vous pouvez voir le code source du programme http://home.scarlet.be/kio/ici


  • main() retourne int. Toujours...
  • Pour le reste, tu utilises des fonctions de la version originale de Borland C qui ne sont pas supportées par le portage de conio pour MinGW. (window(), par exemple) que je ne peux donc pas tester. C'est le problème avec le code non portable...


OK, j'ai vu que l'impact de window() était faible, et je l'ignore.
 
J'ai donc compilé et lancé ton code. (Code::Blocks avec libconio.a et <conio2.h> )
 
Le menu déroulant fonctionne, mais effectivement, on ne peut pas sélectionner...  Le problème semble venir de menuprincipal()...
 
Visiblement, tu ne sais pas lire les données du clavier... Evidemment, ça ne s'invente pas... Il faut lire la doc...  
 
http://www.developpez.net/forums/s [...] p?t=131260
 
Ceci fonctionne :  

Code :
  1. #define CR 0x0D
  2. #define TAB 0x09
  3. <...>
  4. static int menuprincipal(void)
  5. {
  6.    char menu[4][25] =
  7.       {
  8.          "1: Commencer",
  9.          "2: Ajouter des questions",
  10.          "3: Highscore",
  11.          "4: Quitter"
  12.       };
  13.    int level = 1, i;
  14.    int key ;
  15.    gotoxy(12, 6);
  16.    cprintf("<=MENU=>" );
  17.    textcolor(YELLOW);
  18.    do
  19.    {
  20.       for (i = 1; i <= 4; i++)
  21.       {
  22.          if (level == i) //teste si le compteur est = au menu selectionn,
  23.             textbackground(CYAN); //selection
  24.          else
  25.             textbackground(BLUE); //normal
  26.          gotoxy(3, i + 1);
  27.          cprintf("%s", menu[i - 1]);
  28.       }
  29.       key = getch();
  30.       printf("key=%d\n", key);
  31.       if (key == 0 ||key == 224)
  32.       {
  33.          if (kbhit())
  34.          {
  35.             key = getch();
  36.             switch (key)
  37.             {
  38.             case KEY_DOWN:
  39.                level++;
  40.                if (level > 4) //si on depace
  41.                {
  42.                   level = 1; //la tranche de valeur
  43.                }
  44.                break;
  45.             case KEY_UP:
  46.                level--;
  47.                if (level < 1) //autorisee pour le menu
  48.                {
  49.                   level = 4;
  50.                }
  51.                break;
  52.             }
  53.          }
  54.       }
  55.    }
  56.    while (key != CR && key != TAB); ////fin do tant que l'on appuie pas sur ENTER ou TAB
  57.    return level;
  58. }

Message cité 1 fois
Message édité par Emmanuel Delahaye le 30-04-2006 à 14:48:58

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1359563
big_dadi_f​at
Posté le 04-05-2006 à 14:02:09  profilanswer
 

salut ,
mois j'utilise BORLAND C++ (bc 45) , mais je ne comprend pas pourquoi sont code ne marche pas (chez moi),
d’ailleurs ce n'est pas le seul , il y a beaucoup de code qui marche sous gcc (sur linux) , mais ca ne marche pas chez moi , avec Borland !!!
je ne comprend pas pourquoi , alors si quelqu'un peux m'éclaircir le prob ...
 
 

n°1359595
Emmanuel D​elahaye
C is a sharp tool
Posté le 04-05-2006 à 14:19:51  profilanswer
 

big_dadi_fat a écrit :

salut ,
mois j'utilise BORLAND C++ (bc 45) , mais je ne comprend pas pourquoi sont code ne marche pas (chez moi),
d’ailleurs ce n'est pas le seul , il y a beaucoup de code qui marche sous gcc (sur linux) , mais ca ne marche pas chez moi , avec Borland !!!
je ne comprend pas pourquoi , alors si quelqu'un peux m'éclaircir le prob ...


Parce que dès qu'on sort du code standard, tout peut arriver...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1361212
Sve@r
Posté le 07-05-2006 à 12:16:36  profilanswer
 

Emmanuel Delahaye a écrit :

Code :
  1. case KEY_DOWN:
  2.                level++;
  3.                if (level > 4) //si on depace
  4.                {
  5.                   level = 1; //la tranche de valeur
  6.                }
  7.                break;
  8.             case KEY_UP:
  9.                level--;
  10.                if (level < 1) //autorisee pour le menu
  11.                {
  12.                   level = 4;
  13.                }
  14.                break;



Est-il bon d'effectuer un incrément (décrément) qui peut parfois avoir été fait pour rien ?

Code :
  1. case KEY_DOWN:
  2.                if (level < 4)
  3.                   level++;
  4.                else
  5.                   level=1;
  6.                break;
  7.             case KEY_UP:
  8.                if (level > 1)
  9.                    level--;
  10.                else
  11.                   level=4;
  12.                break;


[:aloy]


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1361217
Emmanuel D​elahaye
C is a sharp tool
Posté le 07-05-2006 à 12:23:31  profilanswer
 

Sve@r a écrit :

Est-il bon d'effectuer un incrément (décrément) qui peut parfois avoir été fait pour rien ?

Code :
  1. case KEY_DOWN:
  2.                if (level < 4)
  3.                   level++;
  4.                else
  5.                   level=1;
  6.                break;
  7.             case KEY_UP:
  8.                if (level > 1)
  9.                    level--;
  10.                else
  11.                   level=4;
  12.                break;




Oui, c'est mieux comme çà...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1361231
Sve@r
Posté le 07-05-2006 à 12:57:29  profilanswer
 

Emmanuel Delahaye a écrit :

Oui, c'est mieux comme çà...


Je me demande si on peut faire mieux encore...

Code :
  1. case KEY_DOWN:
  2.     level=(level % 4) + 1;
  3.     break;
  4. case KEY_UP:
  5.     // Là, j'y arrive pas avec les modulo...
  6.     level=level  > 1 ?level - 1 : 4;
  7.     break;

Message cité 1 fois
Message édité par Sve@r le 07-05-2006 à 12:58:20

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1361238
Emmanuel D​elahaye
C is a sharp tool
Posté le 07-05-2006 à 13:11:00  profilanswer
 

Sve@r a écrit :

Je me demande si on peut faire mieux encore...

Code :
  1. case KEY_DOWN:
  2.     level=(level % 4) + 1;
  3.     break;
  4. case KEY_UP:
  5.     // Là, j'y arrive pas avec les modulo...
  6.     level=level  > 1 ?level - 1 : 4;
  7.     break;


Le modulo, c'est intellectuellement satisfaisant, mais ça fait appelle à une division entière. Sur les petites machines genre 8051, c'est très couteux... J'évite.
Dans ma vieille FIFO (un des premier module réutilisable que j'ai fait en 1998)
 
http://mapage.noos.fr/emdel/clib/ed/src/fifo.c
 
j'ai renoncé aux modulo au profit des tests.

Code :
  1. FIFO_get(...)
  2.    ...
  3.          this->Lec++;
  4.          if (this->Lec == this->Max)
  5.          {
  6.             this->Lec = 0;
  7.          }


Message édité par Emmanuel Delahaye le 07-05-2006 à 13:17:26

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  menu deroulant

 

Sujets relatifs
Bouton + Menu déroulant dans une JToolBarIntegrer les valeurs d'un tableau php dans un menu déroulant HTML
Menu déroulant sans bouton de validation.Menu deroulant (Access)
changement de couleur de police par menu déroulant[Résolu][Html/Javascript] Liens dans menu déroulant dynamique
vlookup, menu deroulant sur diffrente ligneEncore un menu deroulant....
Creer un menu deroulantmenu deroulant (garder ouvert sur page actuelle)
Plus de sujets relatifs à : menu deroulant


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR