var a: integer; arret:boolean; begin arret:=false; while Arret=False do begin If (GetAsyncKeyState(27) And 32768) <> 0 Then arret:=true; // Action kan une touche précise est pressée (ici echape : 27) For a := 0 To 255 do begin //scan les touches de 0 a 255(en général ca fait tou le clavier) If (GetAsyncKeyState(a) And 32768) <> 0 Then begin beep; //Action kan une touche est pressée //a correspond au numéro ASCII de la touche pressé //Button1.caption:=IntToStr(a); end; end; application.ProcessMessages; end; ShowMessage('Fin'); end;
tres interessant comme source
ouiais, vachement interessant, pour faire des jeux par exemple...
je comprend pas a koi sert 32768 svp
oué c pas mal, seré tu faire la meem chose pr avoir le scancode ?pour ski est de l utilisé ac un jeu oui, ms un jeu a 2 joueur sur le clavier ? ac multu touche tu seré modifier ?pr le 32768 moi non plus je comprends pas ^^
Salut à tous, j'ai voulu faire la même chose! Là où j'ai été bloqué, c'est quand j'ai voulu les touches spéciales...Si ça vous branche, allez voir le sujet "Touches de clavier en simultanné". C'est un clavier virtuel, qui marche avec un hook, c'est à dire qu'il est capable de fonctionner en arrière plan, et capture vraiement toutes les touches. J'ai intégré à l'archive, un programme pour déplacer le curseur de la souris avec les touches... à+
quand on appuye sur aucune toucheet quon attends, lutilisation du proc est au maximum à cause de la boucle, non?
Exact! En fait, on doit insérer un sleep et un Application.ProcessMessages pour éviter de saturer le cpu. Plus le delai de Sleep sera court, plus le proc sera solicité, à+
«je comprend pas a koi sert 32768 svp»Un entier est de type INTEGER. Mais souvent il est nécessaire de passer 2 nombres dans la même variable. Pour pouvoir réaliser ceci, il faut ruser. On déclare 3 entiers notés ix, et on définit i3 comme: "i3:=i1 or i2;"On vient donc de combiner 2 entiers dans le 3ème. Pour savoir si i1 ou i2 sont contenus dans i3, on effectue un autre calcul (pas vraiment la réciproque):if i3 and i1 = 0 then ShowMessage('i1 est dans i3')else ShowMessage('i1 n''est pas contenu dans i3');Dans le code de fabiin, la fonction GetAsyncKeyState renvoie une combinaison de nombres. Il effectue un test AND avec le nombre magique 32768 afin de savoir s'il est contenu dedans. Mais ce nombre vaut en réalité 0. Ho ???C'est tout à fait normal. GetAsyncKeyState renvoie un SHORTINT comme résultat, mais version C++. C'est pas le même que Delphi (ce serait sinon -32768). En fait, c'est compliqué car SHORTINT(32768)=0 selon Delphi, mais en même temps, il est dit que SHORTINT=-32768..32767. Il y a une incohérence, mais vous devez bien voir le truc. Ici, 32768 dépasse les limites de sous-étendues de SHORTINT (32768>32767). Du coup, on reboucle un tour. Autre exemple: BYTE va de 0..255. Mais le nombre 256 vaut 0 en byte, 257 vaut 1, 258 vaut 2 ...etc. Une boucle !!Et donc la présence ou non d'un 0 dit si une touche a été pressée ou non. Ou du moins, ça peut donner ce genre d'informations.Sinon, une remarque: fabiin fait une boucle de 0 à 255 en revérifiant à chaque fois l'état du clavier. Mais il me semble qu'il existe une fonction qui renvoit l'état du clavier à un instant T via un tableau de longueur totale 256. Ensuite, il suffit juste de naviguer dedans. Je ne retrouve plus le nom... ou alors ça n'existe pas.
Salut,pour le nombre magique :{$EXTERNALSYM KF_UP} KF_UP = $8000;0+Cirec
Se souvenir du profil
Mot de passe oublié ? / Activation de compteCréer un compte
1 975 378 membres 125 nouveaux aujourd'hui 16 318 membres club