Afficher le menu autrement avec des effets (déplacements)
Source / Exemple :
// PROGRAMME EN C SOUS DOS TURBO C++2 BORLAND
// ecrit le 02-04-2002 par cmarsc
// MOVE TEXTE4
#include <stdio.h>
#include <conio.h> // <conio.c> devc++4
#include <stdlib.h>
#include <string.h>
/* mettre 20 pour devc++4 */
#define VITESSE_D_AFFICHAGE 300
// remplace delay si non disponible dans votre bibliotheque
void ralentir(void);
void effacer_ecran(void);
void effet1_droite_gauche(int col_depart, int col_fin,int ligne);
void effet1_gauche_droite(int col_depart, int col_fin,int ligne);
void effet2_droite_gauche(int col_depart, int col_fin,int ligne);
void effet2_gauche_droite(int col_depart, int col_fin,int ligne);
char *menu[] = {
"FILE",
"EDIT",
"SEARCH",
"RUN",
"COMPILE",
"DEBUG",
"PROJECT",
"OPTIONS",
"WINDOW",
"HELP"
};
int main(void) {
char votre_choix;
//textbackground(CYAN); // fond vert
clrscr(); // effacer ecran
_setcursortype(_NOCURSOR); // supprimer le curseur clignotant
gotoxy(15,25);
textcolor(YELLOW);
cprintf("TAPER UN CHIFFRE ENTRE 1 et 4 ESC pour sortir ");
textcolor(12);
while(1) { // TAPER ESC POUR SORTIR
votre_choix = getch();
ralentir(); // temps d'attente
effacer_ecran();
switch (votre_choix) {
case '1' :
// col_depart = 79 col_fin = 5 ligne = 3
effet1_droite_gauche(79,5,3);
break;
case '2' :
// col_depart = 2 col_fin = 70 ligne = 3
effet1_gauche_droite(2,70,3);
break;
case '3' :
// col_depart = 80 col_fin = 2 ligne = 3
effet2_droite_gauche(80,2,3);
break;
case '4' :
// col_depart = 2 col_fin = 74 ligne = 3
effet2_gauche_droite(2,74,13);
break;
case 27: exit(0); // sortir du programme
break;
default:
break;
}
} // fin de while(1)
// return 0;
} // fin de main
void ralentir(void) {
int i0;
for (i0 = 0; i0 < VITESSE_D_AFFICHAGE ; i0++){
gotoxy(1,1);
cprintf("%1c",'\0');
}
return;
}
void effacer_ecran(void) {
int i1;
for (i1 = 0; i1 < 23; i1++){
gotoxy(1,1+i1);
cprintf("%79c",'\0');
}
return;
}
void effet1_droite_gauche(int col_depart, int col_fin,int ligne) {
int i1, i2,long_ligne;
// nbre d'element dans le menu
int max_menu = sizeof(menu) / sizeof(menu[0]);
for (i1 = 0; i1 < max_menu; ++i1) {
// longueur de la ligne
long_ligne = strlen(menu[i1]);
for (i2 = 0; ( col_depart - long_ligne ) - i2 > col_fin ; ++i2) {
gotoxy( ( col_depart - long_ligne) - i2 ,ligne+i1);
cprintf("%s ",menu[i1]);
ralentir(); // ralentir l'effet
}
}
return ;
} // fin de la fonction : effet1_droite_gauche
void effet1_gauche_droite(int col_depart, int col_fin,int ligne) {
int i1, i2,long_ligne;
// nbre d'element dans le menu
int max_menu = sizeof(menu) / sizeof(menu[0]);
for (i1 = 0; i1 < max_menu; ++i1) {
// longueur de la ligne la plus grande ici Nø 4 ou 7
long_ligne = strlen(menu[4]);
for (i2 = 0; col_depart + long_ligne+ i2 < col_fin ; ++i2) {
gotoxy( col_depart + i2 ,ligne+i1);
cprintf(" %s",menu[i1]);
ralentir(); // ralentir l'effet
}
}
return ;
} // fin de la fonction : effet1_gauche_droite
void effet2_droite_gauche(int col_depart, int col_fin,int ligne) {
int i1, i2,long_ligne, long_ligne_pre;
// nbre d'element dans le menu
int max_menu = sizeof(menu) / sizeof(menu[0]);
long_ligne = 0; long_ligne_pre =0;
for (i1 = 0; i1 < max_menu; ++i1) {
// longueur de la ligne
long_ligne = strlen(menu[i1]);
for (i2 = 0; ( col_depart - long_ligne ) - i2 > col_fin +long_ligne_pre ; ++i2) {
gotoxy( ( col_depart - long_ligne ) - i2 ,ligne);
cprintf("%s ",menu[i1]);
ralentir(); // ralentir l'effet
}
// cummuler la longueur des lignes precedentes
long_ligne_pre += long_ligne + 2;
}
return ;
} // fin de la fonction : effet2_droite_gauche
void effet2_gauche_droite(int col_depart, int col_fin,int ligne) {
int i1, i2,long_ligne, long_ligne_pre;
// nbre d'element dans le menu
int max_menu = sizeof(menu) / sizeof(menu[0]);
long_ligne = 0; long_ligne_pre = 0;
for (i1 = 0; i1 < max_menu; ++i1) {
// longueur de la ligne
long_ligne = strlen((menu[(max_menu-1)-i1]));
for (i2 = 0; col_depart + i2 < (col_fin - long_ligne) - long_ligne_pre; ++i2) {
gotoxy(col_depart + i2 ,ligne);
cprintf(" %s",menu[(max_menu-1)-i1]);
ralentir(); // ralentir l'effet
}
// cummuler la longueur des lignes precedentes
long_ligne_pre += long_ligne + 2 ;
}
return ;
} // fin de la fonction : effet2_gauche_droite
Conclusion :
// PROGRAMME EN C SOUS DOS TURBO C++2 DEVC++4
// ecrit le 02-04-2002 par cmarsc
// MOVE TEXTE4
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.