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...
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).
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...
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
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
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...
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...
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...
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...