0/5 (7 avis)
Vue 14 690 fois - Téléchargée 509 fois
// Fonction donnant TRUE si une touche est en attente // elle ne prend en compte que les touches donnant un caractère, donc // elle ne fonctionne pas avec les touches de fonctions Function KeyPressed:Boolean; Const TailleBuf =20; Var Zone :Array[1..TailleBuf] Of TInputRecord; EnAttente :Cardinal; i :Cardinal; Begin // Demande de la liste des évènements en attente PeekConsoleInput(STD_INPUT_HANDLE,Zone[1],TailleBuf,EnAttente); Result:=False; i:=1; While Not Result And (i<=EnAttente) And( i<=TailleBuf ) Do Begin Result:= (Zone[i].EventType=1) // C'est un évènement clavier And (Zone[i].Event.KeyEvent.bKeyDown) // C'est une touche appuyée And (Zone[i].Event.KeyEvent.AsciiChar<>#0); // ce n'est pas une touche de controle Inc(i); End; // Si il n'y a pas de touche, le buffer est vidé car windows // à une limite très basse d'évènements en attente If (EnAttente<>0) And Not Result Then ReadConsoleInput(STD_INPUT_HANDLE,Zone[1],EnAttente,i); End; // Fonction qui retourne lit un caractère émit par le clavier. // si aucun caractère n'est en attente, cette fonction est bloquante // et attend qu'un caractère soit saisi. Function ReadKey:Char; Var Zone : TInputRecord; Lus : Cardinal; Begin Result:=#0; Repeat // Lecture du buffer des évènement ReadConsoleInput(STD_INPUT_HANDLE,Zone,1,Lus); If (Lus=1) // Un évènement est lu And (Zone.EventType=1) // C'est un évènement clavier And (Zone.Event.KeyEvent.bKeyDown) // C'est un appui And (Zone.Event.KeyEvent.AsciiChar<>#0) // C'est bien un caractère Then Result:=Zone.Event.KeyEvent.AsciiChar; // => mémorisation du code Until Result<>#0; End;
28 déc. 2003 à 21:40
Le fichier tel que ne fonctionne pas avec Delphi 6 personnel et Windows XP. Le programme attend indéfiniment et n'a pas l'air de détecter une frappe au clavier.
Est ce normal ?
Merci
2 janv. 2004 à 15:02
30 mars 2004 à 11:51
7 avril 2004 à 09:45
il détecte pas quand j'appuie sur une touche : En attente est toujours à zero.
pour info: Delphi 6 avec Windows 2000
7 avril 2004 à 09:56
il détecte pas quand j'appuie sur une touche : En attente est toujours à zero.
pour info: Delphi 6 avec Windows 2000
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.