Groovitron Professeur


Nombre de messages: 160 Réputation: 0 Date d'inscription: 20/07/2010
Profil Experience de Programmation:
   (8550/10000)
 | Sujet: Cours N°15 : Les Menus Dim 29 Jan - 12:29 | |
| Dans ce cours je vais vous apprendre à organiser votre programme pour qu'il soit un peu plus beau. Pour demander à l'utilisateur de choisir entre plusieurs options, le plus simple est de faire ceci: | Code: | @ECHO OFF :QUESTION CLS SET CHOIX=0 ECHO. Touche Q : Quitter. ECHO. Touche E : Bonjour. SET /P CHOIX=Votre choix : IF "%CHOIX%"=="q" GOTO :Quitter IF "%CHOIX%"=="e" GOTO :Bonjour GOTO QUESTION :Quitter EXIT GOTO :EOF :Bonjour ECHO.Bonjour ! PAUSE EXIT GOTO :EOF
|
Ici, on utilise un SET /P ,pour communiquer avec l'utilisateur.
Mais ce systeme pose quelque problème, comme par exemple : - L'utilisateur peut entrer n'importe quoi dans le SET /P. - Par conséquent le programme doit être sécurisé. - et en plus c'est pas super beau, comme interface.
C'est pourquoi, je vais vous apprendre à organiser un peu ces menus,
En premier je vais vous demandez de telecharger la commande : KEYX.exe (le lien de telechargement est dans le cours N°14)
Ces menus fonctionnent à l'aide d'un curseur, qui va de haut en bas.
L'affichage des curseurs se fait à l'aide de variables, ayant chacune une position unique.
Par exemple : la variable CURSEURH1, contiendrait le curseur si il est à la position 1. idem la variable CURSEURH2, contiendrait le curseur si il est à la position 2.
Le curseur possède une position unique, stocké dans POSHCURSEUR.
Ainsi on peut facilement afficher l'emplacement du curseur simplement en une seule commande :
| Code: | SET CURSEURH%POSHCURSEUR%=-
|
Exemple d'affichage :
| Code: | @ECHO OFF SET "POSHCURSEUR=2" SET "CURSEURH6= " SET "CURSEURH5= " SET "CURSEURH4= " SET "CURSEURH3= " SET "CURSEURH2= " SET "CURSEURH1= " SET CURSEURH%POSHCURSEUR%=- CLS ECHO. %CURSEURH1% Option 1. ECHO. %CURSEURH2% Option 2. ECHO. %CURSEURH3% Option 3. ECHO. %CURSEURH4% Option 4. ECHO. %CURSEURH5% Option 5. ECHO. %CURSEURH6% Option 6. PAUSE
|
Ceci n'est que l'affichage, pour avoir notre menu il faut bien-sûr pourvoir bouger ce curseur,
Et par conséquent, pouvoir modifier la position du curseur.
C'est ici que l'on va utiliser la commande KEYX.exe
Elle va nous permettre de communiquer avec l'utilisateur.
On l'a met dans une boucle,
| Code: | :BOUCLE ... GOTO BOUCLE
|
Et on ajoute quelque condition pour incrémenter ou décrémenter la position du curseur, de cette façon :
| Code: | KEYX.EXE IF %ERRORLEVEL%==72 ( SET /A POSHCURSEUR-=1 ) IF %ERRORLEVEL%==80 ( SET /A POSHCURSEUR+=1 )
|
On place ceci dans le code précédent en ajoutant également la boucle :
| Code: | @ECHO OFF REM Initialisation de toutes les variables du programme SET "POSHCURSEUR=2" SET "CURSEURH6= " SET "CURSEURH5= " SET "CURSEURH4= " SET "CURSEURH3= " SET "CURSEURH2= " SET "CURSEURH1= "
:BOUCLE SET CURSEURH%POSHCURSEUR%=- CLS ECHO. %CURSEURH1% Option 1. ECHO. %CURSEURH2% Option 2. ECHO. %CURSEURH3% Option 3. ECHO. %CURSEURH4% Option 4. ECHO. %CURSEURH5% Option 5. ECHO. %CURSEURH6% Option 6. KEYX.EXE IF %ERRORLEVEL%==72 ( SET /A POSHCURSEUR-=1 ) IF %ERRORLEVEL%==80 ( SET /A POSHCURSEUR+=1 ) GOTO BOUCLE
|
Tester, on approche du résultat.
Il y a encore des détails, notamment : Le curseur ne s'efface pas (il laisse une trainer).
Il suffit d'effacer sa position avant de la modifier.
| Code: | @ECHO OFF REM Initialisation de toutes les variables du programme SET "POSHCURSEUR=2" SET "CURSEURH6= " SET "CURSEURH5= " SET "CURSEURH4= " SET "CURSEURH3= " SET "CURSEURH2= " SET "CURSEURH1= "
:BOUCLE SET CURSEURH%POSHCURSEUR%=- CLS ECHO. %CURSEURH1% Option 1. ECHO. %CURSEURH2% Option 2. ECHO. %CURSEURH3% Option 3. ECHO. %CURSEURH4% Option 4. ECHO. %CURSEURH5% Option 5. ECHO. %CURSEURH6% Option 6. REM On efface son ancienne position : SET "CURSEURH%POSHCURSEUR%= "
KEYX.EXE IF %ERRORLEVEL%==72 ( SET /A POSHCURSEUR-=1 ) IF %ERRORLEVEL%==80 ( SET /A POSHCURSEUR+=1 ) GOTO BOUCLE
|
Le curseur monte et descend impeccable ! Mais il peut sortir de l'écran !
Sa position est simplement incrémenté ou décrémenté,
Rien ne l’empêche donc de devenir négative ou supérieur à la position maximal.
Pour cela, encore quelque condition à ajouter :
• Si on arrive tout en haut (POSHCURSEUR==1) : Il ne faut pas autoriser le déplacement vers le haut. • Si on est tout en bas (POSHCURSEUR==6) : Il ne faut pas autoriser le déplacement vers le bas il ne faut pas autorisé le déplacement.
| Code: | @ECHO OFF REM Initialisation de toutes les variables du programme SET "POSHCURSEUR=2" SET "CURSEURH6= " SET "CURSEURH5= " SET "CURSEURH4= " SET "CURSEURH3= " SET "CURSEURH2= " SET "CURSEURH1= "
:BOUCLE SET CURSEURH%POSHCURSEUR%=- CLS ECHO. %CURSEURH1% Option 1. ECHO. %CURSEURH2% Option 2. ECHO. %CURSEURH3% Option 3. ECHO. %CURSEURH4% Option 4. ECHO. %CURSEURH5% Option 5. ECHO. %CURSEURH6% Option 6. REM On efface son ancienne position : SET "CURSEURH%POSHCURSEUR%= "
KEYX.EXE
IF %ERRORLEVEL%==72 ( REM Si le curseur est au dessus de 1. IF %POSHCURSEUR% GTR 1 ( SET /A POSHCURSEUR-=1 ) ) IF %ERRORLEVEL%==80 ( REM Si le curseur est en dessous de 6. IF %POSHCURSEUR% LSS 6 ( SET /A POSHCURSEUR+=1 ) ) GOTO BOUCLE
|
Bon, maintenant le curseur fonctionne, on va mettre au point maintenant la touche de validation.
Cette touche, est la touche entrée, on va devoir ajouter quelques conditions :
| Code: | IF %ERRORLEVEL%==13 ( REM Si on appuie sur la touche ENTRER REM On teste toutes les positions possible du curseur IF %POSHCURSEUR%==1 ( GOTO OPTION1 ) IF %POSHCURSEUR%==2 ( GOTO OPTION2 ) IF %POSHCURSEUR%==3 ( GOTO OPTION3 ) ... )
|
Je vous donne un exemple correct (avec de vrai choix)
Voici un programme avec un menu, capable de créer des fichiers et des dossiers,
| Code: | @ECHO OFF REM Initialisation de toutes les variables du programme SET "POSHCURSEUR=1" SET "CURSEURH5= " SET "CURSEURH4= " SET "CURSEURH3= " SET "CURSEURH2= " SET "CURSEURH1= "
SET "PASDECURSEUR= " SET "CURSEUR=-"
:BOUCLE SET CURSEURH%POSHCURSEUR%=%CURSEUR% CLS ECHO. %CURSEURH1% Creer un fichier. ECHO. %CURSEURH2% Creer un dossier. ECHO. %CURSEURH3% Creer un fichier texte (+ son contenu). ECHO. %CURSEURH4% Ouvrir la calculette. ECHO. %CURSEURH5% Quitter ce programme. REM On efface son ancienne position : SET "CURSEURH%POSHCURSEUR%=%PASDECURSEUR%"
KEYX.EXE
IF %ERRORLEVEL%==72 ( REM Si le curseur est au dessus de 1. IF %POSHCURSEUR% GTR 1 ( SET /A POSHCURSEUR-=1 ) ) IF %ERRORLEVEL%==80 ( REM Si le curseur est en dessous de 6. IF %POSHCURSEUR% LSS 5 ( SET /A POSHCURSEUR+=1 ) ) IF %ERRORLEVEL%==13 ( REM Si on appuie sur la touche ENTRER REM On teste toute les positions possible du curseur IF %POSHCURSEUR%==1 ( CALL :CREERFICHIER ) IF %POSHCURSEUR%==2 ( CALL :CREERDOSSIER ) IF %POSHCURSEUR%==3 ( CALL :CREERFICHIERTEXTE ) IF %POSHCURSEUR%==4 ( START CALC ) IF %POSHCURSEUR%==5 ( GOTO QUITTERCEPROGRAMME ) ) GOTO BOUCLE
:CREERFICHIER SET "NOMDUFICHIER=" SET "EXTDUFICHIER=txt" REM On demande le nom du fichier à l'utilisateur : SET /P NOMDUFICHIER= Nom de votre fichier : REM On demande le nom de son extension à l'utilisateur : SET /P EXTDUFICHIER= Extension : REM Création du fichier : ECHO.>%NOMDUFICHIER%.%EXTDUFICHIER% REM On utilise une simple commande ECHO pour créer dans un fichier REM On enregistre le flux de sortie de cette commande dans un fichier (Voir cours N GOTO :EOF
:CREERDOSSIER SET "NOMDUDOSSIER=" REM On demande le nom du nouveau dossier à l'utilisateur : SET /P NOMDUDOSSIER= Nom de votre nouveau dossier : REM Création du dossier : REM MKDIR est une commande qui permet de créer un dossier (simple d'utilisation comme vous pouver le voir): MKDIR %NOMDUDOSSIER% GOTO :EOF
:CREERFICHIERTEXTE SET "NOMDUFICHIER=" SET "CONTENUDUFICHIER=" REM On demande le nom du fichier à l'utilisateur : SET /P NOMDUFICHIER= Nom de votre fichier : REM On demande le contenu de ce fichier à l'utilisateur : SET /P CONTENUDUFICHIER= Contenu de ce fichier : REM Création du fichier : ECHO.%CONTENUDUFICHIER%>>%NOMDUFICHIER%.txt GOTO :EOF
:QUITTERCEPROGRAMME EXIT
|
|
|
Sprider Fondateur


Nombre de messages: 265 Localisation: sur Terre ! Réputation: 3 Date d'inscription: 23/06/2007
Profil Experience de Programmation:
   (500/10000)
 | Sujet: Re: Cours N°15 : Les Menus Ven 3 Fév - 9:30 | |
| Salut Groovitron , j'ai tester tes codes sources pour voir si cela fonctionnais et le curseur ne veut pas bouger o_O , est ce du a une erreur dans tes codes sources ou a la commande KEY ? |
|
Groovitron Professeur


Nombre de messages: 160 Réputation: 0 Date d'inscription: 20/07/2010
Profil Experience de Programmation:
   (8550/10000)
 | Sujet: Re: Cours N°15 : Les Menus Ven 3 Fév - 19:53 | |
| Effectivement, c'est ma faute, c'est la commande KEYX, je corrige le lien.
Edit : C'est fait. |
|