Touche entrée [Résolu]

Signaler
Messages postés
157
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
14 avril 2009
-
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
-
Bonjour,

Je voudrai connaitre le numéro du caractere qui correspond à la touche <Entrée> (sous la forme $xx) et si possible un moyen de connaitres les caracteres des autres touches spéciales...

Merci

15 réponses

Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
3
Salut,

Enter = 13 
Pour connaître les autres caractères, tu mets sur une form un label, tu crées un évenement Form1.OnKeyDown  : Label1.Caption:= IntToStr(Key);
et tu frappes...
Pour avoir la valeur en hexa tu fais : Label1.Caption:= IntToHex(Key,8).

A +
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
11
ou sinon, plus simple, vas sur ce site (à mettre dans tes favoris, ça peut toujours être utile !) :
http://www.commentcamarche.net/base/ascii.php3

@+
Nico {www.ni69.info}


N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
Messages postés
418
Date d'inscription
mardi 3 janvier 2006
Statut
Membre
Dernière intervention
26 novembre 2013
3
Ctrl+H : dans un composant d'édition (TEdit...) : ça marche.
F1..F2, fin, tab, insert : pas de problèmes pour retrouver leur valeur.
Pour savoir si les touches Ctrl, Shift et Alt ont été enfoncées : dans un événement OnKeyDown c'est très facile : 
      if (ssCtrl in Shift) and (key = VK_F5)  then...  //tu récupères ainsi un Ctrl + F5
sinon, tu dois jongler avec la réception d'un message clavier et employer des fonctions Windows comme GetKeyState...
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
38
Salut,

Essaye ce bout de code:

type
  TForm1 = class (TForm)
    Label1: TLabel;
  private
    { Déclarations privées }
    Procedure WMKey(Var Msg : TWMKeyDown);Message  WM_KEYDown;
  public
    { Déclarations publiques }
  end;



var

  Form1: TForm1;



implementation




{$R *.dfm}





{ TForm1 }




procedure TForm1.WMKey(var Msg: TWMKeyDown);
Var   KeyName: Array[0..255] of char;
begin
   GetKeyNameText(Msg.KeyData , KeyName, SizeOf(KeyName));
   Label1.Caption : = Format('Touche : %s Code : %d', [KeyName, Msg.CharCode]);
end;



end.














@+
Cirec
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
38
Et pour plus d'informations sur les touches pressées il faut utiliser un KeyboardHook en local et la toutes les touches sont détectées avec en plus d'autres données comme :
Touche Standard où Étendue
Alt pressé où non
Touche pressée, relâchée, maintenue
















@+
Cirec
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
petite fonction magique sans hook ... avec detection Caps, Scroll, Pause, Num lock ect...
correction et distinction des rshift, lshift, rctrl, lctrl, ralt, alt-gr, touches de fonctions, bouttons de souris ect...

a utiliser comme suis par exemple  :

procedure TForm1.KeyPress(Sender : TObject; Key : char);
var BSKeys : TByteSet;
begin
  KeyboardState(BSKeys);
  if VK_???in BSKeys then windows.beep(440,5);
     // si BSKeys contient la touche
VK_??? on fait un beep







  if [VK_??,VK_??,VK_??]<= BSKeys then


windows.beep(880,5);





     // si BSKeys contient l'ensemble de touches


[VK_??,VK_??,VK_??] on fait un beep







  if


[VK_??,VK_??,VK_??]
= BSKeys then

windows.beep(1760,5);




     // si BSKeys ne contient que les touches

[VK_??,VK_??,VK_??] on fait un beep




end;

{ ----------------------- }

type
  TByteSet = Set of byte;

procedure KeyboardState(var KeysSet :  TByteSet);
var K : byte;
begin
  // reset Keys set
 
KeysSet
:= [];

  { Get persistent keys }
  // caps lock
  if GetKeyState(144) = 1 then
KeysSet
:=
KeysSet
+ [144];
  // scroll lock
  if GetKeyState(145) = 1 then
KeysSet
:=
KeysSet
+ [145];
  // Num lock
  if GetKeyState(20)  = 1 then
KeysSet
:=
KeysSet
+ [20];
  // pause
  if GetKeyState(19)  = 1 then
KeysSet
:=
KeysSet
+ [19];

  { Get pushed keys }
  for K := 0 to 255 do
      if windows.GetAsyncKeyState(K) < 0 then begin
        
KeysSet
:=
KeysSet
+ [K];
         case K of
           // correction of Ctrl, Alt, Shift
           17,16,18 :
KeysSet
:=
KeysSet
- [K];
           // correction of AltGr
           165      :
KeysSet
:=
KeysSet

- [162];
         end;
      end;
end;
Messages postés
157
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
14 avril 2009

Ok merci...

(13 = $D)
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
windows.VK_*

et tu les aurat toutes.
Messages postés
157
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
14 avril 2009

ma question va peut etre semblé bete, mai c'est quoi


windows.VK_*
??
Messages postés
3825
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 février 2021
38
Salut,
Windows.VK_*  veut dire

Dans l'unité Windows son déclarés sous formes de Constantes :

  {$EXTERNALSYM VK_RETURN}
  VK_RETURN = 13;
  {$EXTERNALSYM VK_SHIFT}
  VK_SHIFT = $10;
  {$EXTERNALSYM VK_CONTROL}
  VK_CONTROL = 17;

etc.

@+
Cirec
Messages postés
157
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
14 avril 2009

justement, coment on fait pour savoir si les touche ctrl,  shift,  alt,  alt gr,  suppr,  F1..F2,  fin,  tab,  insert,  ->,  <-,... ont été appuyés ? parcque j'ai pas réussi a récupéré de caractères pour elles...
Messages postés
157
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
14 avril 2009

et aussi, je voudrai savoir pourquoi quand je fait ctrl+h c'est le meme caractere que retours arrière, mais il n'efface rien,
et ctrl+p donne $10 alors que si 'appuye sur shift il se passe rien...

(désolé de poser autant de question ^^')
Messages postés
157
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
14 avril 2009

Je vien de comprendre d'ou venai mon problème de capture de touche...
Les touches comme F5, Ctrl, .... &co ne son pas capturer avec l'événement on keyPress mais que avec  KeyDown ou KeyUp...

Merci pour tout à tous
Messages postés
157
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
14 avril 2009

Encore une dernière question (et apres c'est fini promis)
j'arriva pas a capturer l'appuie sur la touche "Tabulation"
et je voudrai savoir comment on fait pour diférencier ctrl gauche/droit       alt gauche/droit        entrée pav.num et entrée normal...
Messages postés
157
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
14 avril 2009

et la touche 'imp écr syst"
merci