Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Club Emploi Blogs   TV   Dév. Web PHP XML Python Autres 2D-3D-Jeux Sécurité Windows Linux PC Mac
Accueil Conception Java DotNET Visual Basic  C  C++ Delphi MS-Office SQL & SGBD Oracle  4D  Business Intelligence
ACCUEIL PASCAL FORUM PASCAL F.A.Q PASCAL TUTORIELS PASCAL SOURCES COMPILATEURS OUTILS LIVRES

La fonction "ReadLn" et le clavier

 

Fonction ReadLn :

La fonction ReadLn permet de capturer des chaines de caractères par l'utilisateur. Un exemple :

var Nom: String;
begin
  Write ('Entrez votre nom : ');
  ReadLn (Nom);
  Writeln ('Salut ',Nom);
end.
- Télécharger l'exemple ReadLn.pas -

La fonction ReadLn a donc besoin d'une variable où stocker le résultat (ici Nom) de type String et l'utilisateur peut entrer des données à l'aide de toutes les touches de clavier : retour pour effacer du texte et entrée pour valider.

Le clavier :

Le clavier est accessible par les fonctions "KeyPressed;" et "ReadKey;" (fonctions de l'unité "CRT"). Mais je vous conseille vivement d'utiliser mes fonctions de mon l'unité "Clavier.tpu" -> "TouchPresse;" et "LitTouche;". Un exemple :

uses Clavier;
var touche: char;
begin
  Write ('Pressez une touche');
  repeat
    { Ne fait rien en attendant une touche }
  until TouchPresse;
  touche := LitTouche;
  Writeln;
  Writeln ('Vous avez tapé la touche de code ASCII ',ord(touche),' ce qui donne : ',touche);
end.
- Télécharger l'exemple LiTouche.pas -

On voit donc que la fonction "TouchPresse" (ou KeyPressed;) renvoie un type boolean (TRUE, vrai, ou FALSE, faux) informant si une touche a été pressée ou non.

La fonction "LitTouche" lit une touche dans le tampon clavier et renvoie son code ASCII. Le gros avantage sur la fonction "ReadKey;" est que si la touche est étendue (touches fléchées, suppression, fin, ...) le code renvoyé n'est pas 0 (code ascii #0) mais le code ASCII additionné de 128. Par exemple la touche "flèche haut" sera codée 0 puis 72 par la fonction "ReadKey" alors que "LitTouche" renvoie directement 200 (72+128). Veuillez également consulter le code source de l'unité "Clavier.tpu" (fichier Clavier.pas) pour voir les constantes : _HAUT pour la touche haut (vaut #200), _ECHAPE pour la touche echape (vaut #8), _ENTREE pour la touche entrée (vaut #13), ... Pour connaître tous les codes ASCII du clavier, téléchargez le programme ClavAsci.zip (il est situé dans la rubrique Périphérique de TPascal).

Souvent on a besoin de coder une interface permettant de se déplacer. Pour celà, les touches directionnelles sont le mieux adaptées. Je ne vais pas vous donner un exemple complet, mais seulement la structure :

uses Clavier;
var ch: char;   { Touche lue au clavier }

procedure DeplaceListe (Plus: Integer); var TmpL: LongInt; begin
TmpL := IndexListe +Plus;
if TmpL<MINIMUM then TmpL := MINIMUM;
if MAXIMUM<TmpL then TmpL := MAXIMUM;
if IndexListe=TmpL then exit; { Aucun changement, autant quitter }

< efface ancien élément >
IndexListe := TmpL;
< dessine le nouvel élément >
end;

begin
   { code de début }
  repeat
    if TouchPresse then begin
      ch := LitTouche;
      case ch of
      _PAGEHAUT: DeplaceListe (-10);
      _HAUT: DeplaceListe (-1);
      _BAS: DeplaceListe (+1);
      _PAGEBAS: DeplaceListe (+10);
    end;
  end;
{ code exécuté en attendant une touche (animation ?) }
until ch=_ECHAPE;
{ code de fin }
end.

Pour ceux qui veulent aller plus loin, venez sur la page Périphérique et téléchargez le programme "Clav_int.zip". Celui-ci utilise mon autre unité Clavier : SClavier (Super Clavier !). Elle reprogramme la gestion du clavier pour permettre d'accéder à toutes les touches et offre un tableau avec la liste des touches avec leur état : enfoncée ou non. Très pratique pour les jeux, pour le déplacement en digonale par exemple : HAUT+GAUCHE.

Retour aux tutoriels

Par Haypo

Responsable bénévole de la rubrique Pascal : wormful_sickfoot - Contacter par EMail :
Vos questions techniques : forum d'entraide Pascal - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2008 www.developpez.com - Legal informations.