Les langages de programmation
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Les langages de programmation

Venez apprendre les langages de programmation à votre rythme
 
AccueilGalerieRechercherDernières imagesS'enregistrerConnexion
-40%
Le deal à ne pas rater :
-40% sur le Pack Gaming Mario PDP Manette filaire + Casque filaire ...
29.99 € 49.99 €
Voir le deal

 

 Cours N°15 : Les Menus

Aller en bas 
4 participants
AuteurMessage
Groovitron
Professeur
Professeur
Groovitron


Nombre de messages : 201
Réputation : 4
Date d'inscription : 20/07/2010

Cours N°15 : Les Menus Empty
MessageSujet: Cours N°15 : Les Menus   Cours N°15 : Les Menus Icon_minitimeDim 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
Revenir en haut Aller en bas
Sprider
Fondateur
Fondateur
Sprider


Nombre de messages : 285
Localisation : sur Terre !
Réputation : 9
Date d'inscription : 23/06/2007

Cours N°15 : Les Menus Empty
MessageSujet: Re: Cours N°15 : Les Menus   Cours N°15 : Les Menus Icon_minitimeVen 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 ?
Revenir en haut Aller en bas
https://rider.keuf.net
Groovitron
Professeur
Professeur
Groovitron


Nombre de messages : 201
Réputation : 4
Date d'inscription : 20/07/2010

Cours N°15 : Les Menus Empty
MessageSujet: Re: Cours N°15 : Les Menus   Cours N°15 : Les Menus Icon_minitimeVen 3 Fév - 19:53

Effectivement, c'est ma faute, c'est la commande KEYX, je corrige le lien.

Edit : C'est fait.
Revenir en haut Aller en bas
zephir
Jeune Programmeur
Jeune Programmeur
zephir


Nombre de messages : 30
Age : 32
Réputation : 11
Date d'inscription : 19/05/2013

Cours N°15 : Les Menus Empty
MessageSujet: Re: Cours N°15 : Les Menus   Cours N°15 : Les Menus Icon_minitimeLun 20 Mai - 0:32

tous simplement G.E.N.I.A.L et dire que je m'embêter avec mes set /p et mes if nia nia goto pour que au final il faller taper une touche puis appuyer sur entré alor que la un coup de curseur c génial Very Happy juste quelque modif de style color mode con etc et c magnifique Wink
je vais travailler la dessus merci encore pour tes court Wink et pour le "exe" "KEYX" Wink
Revenir en haut Aller en bas
zephir
Jeune Programmeur
Jeune Programmeur
zephir


Nombre de messages : 30
Age : 32
Réputation : 11
Date d'inscription : 19/05/2013

Cours N°15 : Les Menus Empty
MessageSujet: Re: Cours N°15 : Les Menus   Cours N°15 : Les Menus Icon_minitimeLun 20 Mai - 1:02

et encore une question ^^" ..
et t'il possible de faire faire au curseur une boucle lui demander une fois arriver en bas au lieux de stopé ou de quitter l'ecran revenir en haut ? et inversement de haut en bas ?

merci encore pour tous c'est excellent cour Smile
Revenir en haut Aller en bas
Groovitron
Professeur
Professeur
Groovitron


Nombre de messages : 201
Réputation : 4
Date d'inscription : 20/07/2010

Cours N°15 : Les Menus Empty
MessageSujet: Re: Cours N°15 : Les Menus   Cours N°15 : Les Menus Icon_minitimeLun 20 Mai - 14:10

Ta proposition est parfaitement possible il suffit de vérifier si la position du curseur n'est pas à la limite du possible (Ici : 6 et 0)
Revenir en haut Aller en bas
zephir
Jeune Programmeur
Jeune Programmeur
zephir


Nombre de messages : 30
Age : 32
Réputation : 11
Date d'inscription : 19/05/2013

Cours N°15 : Les Menus Empty
MessageSujet: Re: Cours N°15 : Les Menus   Cours N°15 : Les Menus Icon_minitimeLun 20 Mai - 15:44

ok encore merci Smile je vais essayer de bricoler sa alors :p
Revenir en haut Aller en bas
darkoa69
Nouveau Programmeur
Nouveau Programmeur



Nombre de messages : 7
Réputation : 10
Date d'inscription : 27/07/2013

Cours N°15 : Les Menus Empty
MessageSujet: Re: Cours N°15 : Les Menus   Cours N°15 : Les Menus Icon_minitimeSam 27 Juil - 16:12

salut Groovitron, je ne sais pourquoi mais chez moi le curseur ne s'affiche pas meme quand je copie/colle ta commande peut tu m'aider?
Revenir en haut Aller en bas
Groovitron
Professeur
Professeur
Groovitron


Nombre de messages : 201
Réputation : 4
Date d'inscription : 20/07/2010

Cours N°15 : Les Menus Empty
MessageSujet: Re: Cours N°15 : Les Menus   Cours N°15 : Les Menus Icon_minitimeSam 27 Juil - 17:51

Tu pourrai m'exposer un peu mieux ton problème par MP, s'il te plait ?
Revenir en haut Aller en bas
Contenu sponsorisé





Cours N°15 : Les Menus Empty
MessageSujet: Re: Cours N°15 : Les Menus   Cours N°15 : Les Menus Icon_minitime

Revenir en haut Aller en bas
 
Cours N°15 : Les Menus
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Cours n°3 - Les variables
» Cours N°12 : La commande SETLOCAL
» Cours N°11 : Les fonctions
» Cours n°6 - Les booléens
» refonte des cours

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Les langages de programmation :: Les Cours de Programmation :: Cours de BATCH (.bat)-
Sauter vers: