Section courante

A propos

Section administrative du site

READKEY

Lecture d'une touche
Turbo Pascal 3+ Crt

Syntaxe

Function ReadKey:Char;

Description

Cette fonction permet d'effectuer la lecture d'une touche enfoncé au clavier.

Remarques

Exemples

Voici un exemple typique de l'utilisation de cette fonction :

Essayer maintenant !
  1. Program ReadKeySamples;
  2.  
  3. Uses Crt;
  4.  
  5. BEGIN
  6.  WriteLn('Presse une touche pour continuer...');
  7.  ReadKey;
  8. END.

on obtiendra le résultat suivant :

Presse une touche pour continuer...

Il attend ensuite qu'on presse n'importe quel touche.

L'exemple suivant une est une petite application navigant dans un fichier ASCII en utilisant les touches spéciales PgUp et PgDn :

  1. Program VIEWASC;
  2.  
  3. Uses Crt;
  4.  
  5. Var
  6.  Finish:Boolean;
  7.  FileView:File;
  8.  ByteReaded:Word;
  9.  I,CurrLinePos:Integer;
  10.  FileName:String;
  11.  Buffer:Array[0..2048]of Byte;
  12.  LastPos,CurrPos,LenBuf:LongInt;
  13.  
  14. Function PadRight(S:String;Space:Byte):String;
  15. Var
  16.  I:Byte;
  17. Begin
  18.  If Length(S)<Space Then For I:=Length(S)+1 to Space do S:=S+' ';
  19.  PadRight:=S;
  20. End;
  21.  
  22. Function GetLastPagePos(Var F:File):LongInt;
  23. Var
  24.  CurrLinePos:Integer;
  25.  LastPos,CurrPos,LenBuf:LongInt;
  26.  ByteReaded:Word;
  27. Begin
  28.  CurrPos:=FileSize(FileView);
  29.  FillChar(Buffer,SizeOf(Buffer),0);
  30.  LenBuf:=2048;
  31.  CurrLinePos:=0;
  32.  LastPos:=CurrPos-LenBuf;
  33.  If LastPos<0Then Begin
  34.   LenBuf:=2048+LastPos;
  35.   LastPos:=0;
  36.  End;
  37.  Seek(fileView,LastPos);
  38.  BlockRead(FileView,Buffer,LenBuf,ByteReaded);
  39.  For I:=ByteReaded-1 downto 0do Begin
  40.   Case Buffer[I]of
  41.    13:Begin
  42.     Inc(CurrLinePos);
  43.     If CurrLinePos>=22Then Begin
  44.      Break;
  45.     End;
  46.    End;
  47.    10:;
  48.   End;
  49.  End;
  50.  GetLastPagePos:=LastPos+I+1;
  51. End;
  52.  
  53. Procedure ViewFrameASCII;
  54. Const
  55.  FunctionKeyValue:Array[0..9]of String[7]=(
  56.   '','','','','','','','','','Sortir'
  57.  );
  58. Var
  59.   I:Byte;
  60.   Pour:Byte;
  61. Begin
  62.  If FileSize(FileView)=0Then Pour:=0
  63.                         Else Pour:=Trunc((CurrPos / FileSize(FileView))*100);
  64.  GotoXY(1,1);
  65.  TextBackground(Cyan);
  66.  TextColor(Black);
  67.  Write(FileName);
  68.  ClrEol;
  69.  GotoXY(Lo(WindMax)-3,1);
  70.  Write(Pour:3,'%');
  71.  For I:=0 to 8 do Begin
  72.   GotoXY(I*7+1+2,25);
  73.   Write(PadRight(FunctionKeyValue[I],6));
  74.  End;
  75.  GotoXY(67,25);
  76.  Write(FunctionKeyValue[9]);
  77.  ClrEol;
  78.  TextBackground(Black);
  79.  TextColor(LightGray);
  80.  For I:=0 to 9 do Begin
  81.   GotoXY(I*7+1,25);
  82.   Write('F',I+1);
  83.  End;
  84. End;
  85.  
  86. Function ViewASCII:Integer;
  87. Var
  88.  Pour,X,I,J:Byte;
  89.  PosInBuffer:Word;
  90. Begin
  91.  If FileSize(FileView)=0Then Pour:=0
  92.                         Else Pour:=Trunc((CurrPos / FileSize(FileView))*100);
  93.  If Pour>=99Then Pour:=100;
  94.  GotoXY(Lo(WindMax)-3,1);
  95.  TextBackground(Cyan);
  96.  TextColor(Black);
  97.  Write(Pour:3,'%');
  98.  TextBackground(Black);
  99.  TextColor(LightGray);
  100.  GotoXY(1,2);
  101.  X:=1;
  102.  J:=0;
  103.  PosInBuffer:=0;
  104.  While(J<23)and(PosInBuffer<2048)do Begin
  105.   Case(Buffer[PosInBuffer])of
  106.    13:Begin
  107.     ClrEol;
  108.     WriteLn;
  109.     X:=1;
  110.     Inc(J);
  111.     If Buffer[PosInBuffer+1]=10Then Inc(PosInBuffer);
  112.     If J=23Then Break;
  113.    End;
  114.    0..12,14..31:Begin
  115.     Write(' ');
  116.     Inc(X);
  117.    End;
  118.    Else Begin
  119.     Inc(X);
  120.     Write(Chr(Buffer[PosInBuffer]));
  121.    End;
  122.   End;
  123.   If X=80Then Begin
  124.    X:=1;
  125.    Inc(J);
  126.    If J=23Then Break;
  127.   End;
  128.   Inc(PosInBuffer);
  129.  End;
  130.  If J<23Then Begin
  131.   Window(1,1+J,80,22);
  132.   ClrScr;
  133.   Window(1,1,80,25);
  134.  End;
  135.  ViewASCII:=PosInBuffer;
  136. End;
  137.  
  138. BEGIN
  139. If ParamStr(1)='/?'Then Begin
  140.   WriteLn('VIEWASC - Cette commande permet de visualiser un fichier ASCII');
  141.   WriteLn;
  142.   WriteLn('Syntaxe : VIEWASC nomdufichier');
  143.  End
  144.   Else
  145.  Begin
  146.   FileName:=ParamStr(1);
  147.   Assign(FileView,FileName);
  148.   Reset(FileView,1);
  149.   CurrPos:=0;
  150.   ClrScr;
  151.   ViewFrameASCII;
  152.   Finish:=False;
  153.   Repeat
  154.    FillChar(Buffer,SizeOf(Buffer),0);
  155.    Seek(fileView,CurrPos);
  156.    BlockRead(FileView,Buffer,2048,ByteReaded);
  157.    ByteReaded:=ViewASCII;
  158.    Case ReadKey Of
  159.     #0:Case ReadKey of
  160.      #1:Finish:=True;
  161.      #68:Finish:=True; { F10 }
  162.      #71:CurrPos:=0; { Touche Home }
  163.      #73:Begin {PageUp}
  164.       FillChar(Buffer,SizeOf(Buffer),0);
  165.       LenBuf:=2048;
  166.       CurrLinePos:=0;
  167.       LastPos:=CurrPos-LenBuf;
  168.       If LastPos<0Then Begin
  169.        LenBuf:=2048+LastPos;
  170.        LastPos:=0;
  171.       End;
  172.       Seek(fileView,LastPos);
  173.       BlockRead(FileView,Buffer,LenBuf,ByteReaded);
  174.       For I:=ByteReaded-1 downto 0do Begin
  175.        Case Buffer[I]of
  176.         13:Begin
  177.          Inc(CurrLinePos);
  178.          If CurrLinePos>=24Then Begin
  179.           Break;
  180.          End;
  181.         End;
  182.         10:;
  183.        End;
  184.       End;
  185.       CurrPos:=LastPos+I;
  186.       If I>1Then Inc(CurrPos);
  187.      End;
  188.      #79:CurrPos:=GetLastPagePos(FileView); { Touche End }
  189.      #81:Begin {PageDown}
  190.       If CurrPos+ByteReaded<=FileSize(FileView)Then Inc(CurrPos,ByteReaded);
  191.      End;
  192.     End;
  193.     #27:Finish:=True;
  194.    End;
  195.   Until Finish;
  196.   Close(FileView);
  197.   ClrScr;
  198.  End;
  199. END.

on obtiendra un résultat ressemblant à ceci :

Code source

Lien Langage de programmation Projet
https://github.com/gladir/corail/blob/master/VIEWASC.PAS Free Pascal Corail

Référence

Aide-mémoire de Turbo Pascal versions de 3 à 6, Edition Marabout, De Groote, Virga, 1992, ISBN: 2-501-01833-8, page 342.

Dernière mise à jour : Dimanche, le 25 janvier 2015