Saisie des touches F1 à F12

Saisie des touches F1 à F12 - Ada - Programmation

Marsh Posté le 30-12-2006 à 07:58:56    

Bonjour,
Je cherche à utiliser les touches telles que F1..F12
 
j'ai essayé avec la procedure Get_Immediate (Item      : out Character;  Available : out Boolean); et la procedure Look_Ahead (Item        : out Character;  End_Of_Line : out Boolean); mais je n'y parviend pas.
 
j'utilise Gnat et suis sur Linux.
 
mon code de test ::=
 

Code :
  1. with Ada.Text_Io;
  2. use Ada.Text_Io;
  3. with Ada.Integer_Text_Io; -- Pour afficher character'pos(Char);
  4. use Ada.Integer_Text_Io;
  5. procedure Main is
  6.   Char : Character;
  7.   Real_String : String(1..4) := (others => Ascii.Nul);
  8.   Last_char : Natural := 1;
  9.   Avaible : Boolean;
  10.  
  11. begin
  12.      Text_Io.Skip_Line;
  13.      Get_Immediate(Char,avaible);
  14.      Put(Integer'Image(Character'Pos(Char)));
  15.      if Avaible then
  16.         Real_String(Last_char) := Char;
  17.         loop
  18.            Last_Char := Last_Char + 1;
  19.            Get_Immediate(Char,avaible);
  20.            Put(Integer'Image(Character'Pos(Char)));
  21.            Real_String(Last_Char) := Char;
  22.            exit when not Avaible;
  23.         end loop;
  24.      end if;
  25. end Main;

Reply

Marsh Posté le 30-12-2006 à 07:58:56   

Reply

Marsh Posté le 30-12-2006 à 11:42:55    

J'aurais aimé utiliser Get_Immediate (Item      : out Character;  Available : out Boolean); dans un algo élégant mais bon, je m'en sort avec une serie de case en cascade et Get_Immediate (Item      : out Character); pour l'utilisation des touche F1 à F6
 

Code :
  1. when Character'Val(27) =>
  2.                     Get_Immediate(Char);
  3.                     case Char is
  4.                        when Character'Val(91) =>
  5.                           Get_Immediate(Char);
  6.                           case Char is
  7.                              when Character'Val(91) =>
  8.                                 Get_Immediate(Char);
  9.                                 case Char is
  10.                                    when Character'Val(65) =>
  11.                                       Mode := Gestion_De_Production;
  12.                                    when Character'Val(66) =>
  13.                                       Mode := Caisse;
  14.                                    when Character'Val(67) =>
  15.                                       Mode := Previsionnel;
  16.                                    when Character'Val(68) =>
  17.                                       Mode := Echeancier;
  18.                                    when Character'Val(69) =>
  19.                                       Mode := Reel;
  20.  
  21.                                    when others =>
  22.                                       Put(Ascii.Bel);
  23.                                 end case;
  24.                              when Character'Val(49) =>
  25.                                 Get_Immediate(Char);
  26.                                 case Char is
  27.                                    when Character'Val(55) =>
  28.                                       Mode := Connection_Reseau;
  29.                                    when others =>
  30.                                       Put(Ascii.Bel);
  31.                                 end case;
  32.                              when others => -- echeppement de 3 caracteres;
  33.                                 Put(Ascii.Bel);
  34.                           end case;
  35.                        when others =>
  36.                           Put(Ascii.Bel);
  37.                     end case;


Message édité par Profil supprimé le 30-12-2006 à 11:44:20
Reply

Marsh Posté le 30-12-2006 à 20:19:30    

Pourquoi tu veux utiliser de telles procedures ?
Les touches F* ne renvoient pas de caractères en général...

Reply

Marsh Posté le 30-12-2006 à 21:08:55    

le "scancode" si je peux m'exprimer ainsi, des touches F1 à F6 est sur plusieurs caracteres
 
Sur ma Gnu/Linux Debian les touches F1 à F5 sont sur 4 caracteres et F6 sur 5
Sur Windows XP les touche F1 à F6 sont sur 2 caracteres
 
 
 
Ce sont en fait, sur Gnu/Linux Debian, des sequences d'échappement

Message cité 1 fois
Message édité par Profil supprimé le 30-12-2006 à 21:27:26
Reply

Marsh Posté le 01-01-2007 à 21:31:26    

Les scancodes ne sont pas des caractères mais les codes des touches.
Tu ne les récupères pas avec les sous-programmes d'entrées-sortie de Ada.Text_io !

Reply

Marsh Posté le 02-01-2007 à 07:47:25    

Comment faire alors ?

Reply

Marsh Posté le 04-01-2007 à 10:31:26    

donc "geter" des char ça marche.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed