Controler le texte taper en aplli console

Kundun2 Messages postés 24 Date d'inscription vendredi 13 septembre 2002 Statut Membre Dernière intervention 9 octobre 2003 - 15 oct. 2002 à 13:14
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 - 21 oct. 2002 à 22:33
Bonjour,
Suite a mon message sans réponse, je reformule differement ma question.
Comment controler ce que l'utilisateur de l'appli console tape avant l'affichage même ?
Merci de me repondre, c'est urgent pour moi !!!
Peut etre s'orirnter vers des procedures OnKeypress, mais je sias pas comment faire !!
AIDEZ mOI !!!

Merci d'avance

Kundun
http://www.kundun-official.com

20 réponses

Bruto Messages postés 214 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 14 mai 2004
15 oct. 2002 à 13:29
Oui c'est avec cet évènement que tu réussiras.
Tu trouveras alors la variable Key ( un de ses paramètres ) qui contient la lettre tapée par l'utilisateur. Puis à toi de faire le traitement.
ex :
if Key = #13 then
Key := #0

En espérant que cela t'aide. Bonne prog.
;) Bruto --- Le p'tit belge --- pour vous servir
0
Bruto Messages postés 214 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 14 mai 2004
15 oct. 2002 à 13:29
Oui c'est avec cet évènement que tu réussiras.
Tu trouveras alors la variable Key ( un de ses paramètres ) qui contient la lettre tapée par l'utilisateur. Puis à toi de faire le traitement.
ex :
if Key = #13 then
Key := #0

En espérant que cela t'aide. Bonne prog.
;) Bruto --- Le p'tit belge --- pour vous servir
0
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
15 oct. 2002 à 13:47
Si je ne me trompe pas, ces évènements ne sont pas disponibles pour les applications console...

Peut être en utilisant un message Windows ??

Mais là, faut que j'y aille !!
Bonne prg' !
Bestiol.
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
15 oct. 2002 à 23:55
Je viens d'essayer avec un OnMessage, mais sans succès. Il semble que la boucle des messages windows ne fonctionne pas pendant les application consoles.

J'ai essayer aussi un Hook clavier mais c'est pareil : pas moyen d'ouvrir le hook...

--- :sleepy) Nono du Moulin :sleepy) ---
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
16 oct. 2002 à 20:54
Pour te mettre sur la voie, regardes la page suivante : How to automatic detect whether any key being pressed ou fais une recherche sur "pascal keypressed".

May Delphi be with you.
site Delphiprog
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
17 oct. 2002 à 23:30
Ben, là je donne ma langue au chat...

Je connais Keypressed, mais Delphi ne le connait plus...

--- :sleepy) Nono du Moulin :sleepy) ---
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 oct. 2002 à 19:40
Bon allez, j'ai retrouvé un de mes vieux codes sources d'une application console qui boucle en affichant l'heure et en attendant la frappe de la touche ESC :

-----------------------------------------------------------
program AppliConsole;
{$AppType Console}

uses SysUtils, Windows, Dialogs;

begin
SetConsoleTitle('Horloge en fenêtre DOS');
writeln('Hello, this is a Delphi console application from a DOS window');
writeln('Appuyer sur une touche...');
Readln;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_Green OR
BACKGROUND_BLUE);

repeat
Write(FormatDateTime('HH:NN:SS', now)+ #13);
(GetAsyncKeyState(VK_ESCAPE))));
Read;
until HiWord(GetAsyncKeyState(VK_ESCAPE)) <> 0;

Writeln('Finished');
end.
-------------------------------------------------------
May Delphi be with you.
site Delphiprog
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
19 oct. 2002 à 22:20
Je n'avais pas pensé à GetAsyncKeyState()...

Mais cette fonctionne retourne l'état des touches actuellement appuyées, comment savoir alors si les touches appuyées sont à destination de l'application console ou d'une autre ? Car avant de faire Read() il faut être sûr qu'il y a des touches à lire, sinon l'exécution est bloquée...

--- :sleepy) Nono du Moulin :sleepy) ---
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
20 oct. 2002 à 09:16
Dans le cas présent, l'application n'est absolument pas bloquée sauf au début (ReadLn attend la frappe de la touche Enter).
Si une autre application est activée, alors la frappe d'une touche sera dirigée vers cette autre application. C'est la règle habituelle.
Si la fenêtre DOS de cette appli est active, alors la touche frappée est dirigée vers cette application.
Essayes le code cette application et tu verras que l'exécution n'est pas bloquée.
Mais, s'il y a de meilleures solutions, je suis preneur.

May Delphi be with you.
site Delphiprog
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
20 oct. 2002 à 21:19
Il y a sans doute quelque-chose de bizarre mais je n'ai pas réussi à arreter l'affichage de l'heure avec ESC. Je ne sais pas si ton programme est complet car il y a des parenthèses en trop.

Quoi qu'il en soit, à force de fouiller dans l'API j'ai trouvé un moyen de lire les évenements ( clavier mais aussi souris et autre ) dans une application console. Je vais donc poser un source permettant de créer les fonctions KeyPressed et ReadKey sous Delphi.

Je pense que la ligne If Keypressed Then... va te rappeler des bons vieux souvernirs du Turbo Pascal.

--- :sleepy) Nono du Moulin :sleepy) ---
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
20 oct. 2002 à 22:56
Bons, je ne sais pas, mais vieux, c'est sûr !
C'est curieux, mais l'appui sur la touche Escape fonctionne chez moi.
Quelle pourrait en être la raison ?

May Delphi be with you.
site Delphiprog
0
Kundun2 Messages postés 24 Date d'inscription vendredi 13 septembre 2002 Statut Membre Dernière intervention 9 octobre 2003
21 oct. 2002 à 01:20
Salut,
merci a tous de repondre a mon post.
Le dernier de Nono40 m'a été utile.
Cependant, comment faire pour ecrire autre chose que ce que tape l'utilisateur ?
Avec les fonctions de Nono, je vois pas comment faire.
Lorsque je fais :
If KeyPressed Then WriteLn('Test');
ca marche pas !! il m'écrit la touche tapée....
Pourrait-on m'éclairer la dessus ?
En tous cas merci de vous etre creuser la tête pour moi !!!!

Kundun
http://www.kundun-official.com
0
Kundun2 Messages postés 24 Date d'inscription vendredi 13 septembre 2002 Statut Membre Dernière intervention 9 octobre 2003
21 oct. 2002 à 01:21
Salut,
merci a tous de repondre a mon post.
Le dernier de Nono40 m'a été utile.
Cependant, comment faire pour ecrire autre chose que ce que tape l'utilisateur ?
Avec les fonctions de Nono, je vois pas comment faire.
Lorsque je fais :
If KeyPressed Then WriteLn('Test');
ca marche pas !! il m'écrit la touche tapée....
Pourrait-on m'éclairer la dessus ?
En tous cas merci de vous etre creuser la tête pour moi !!!!

Kundun
http://www.kundun-official.com
0
Kundun2 Messages postés 24 Date d'inscription vendredi 13 septembre 2002 Statut Membre Dernière intervention 9 octobre 2003
21 oct. 2002 à 01:22
Salut,
merci a tous de repondre a mon post.
Le dernier de Nono40 m'a été utile.
Cependant, comment faire pour ecrire autre chose que ce que tape l'utilisateur ?
Avec les fonctions de Nono, je vois pas comment faire.
Lorsque je fais :
If KeyPressed Then WriteLn('Test');
ca marche pas !! il m'écrit la touche tapée....
Pourrait-on m'éclairer la dessus ?
En tous cas merci de vous etre creuser la tête pour moi !!!!

Kundun
http://www.kundun-official.com
0
Kundun2 Messages postés 24 Date d'inscription vendredi 13 septembre 2002 Statut Membre Dernière intervention 9 octobre 2003
21 oct. 2002 à 01:22
Salut,
merci a tous de repondre a mon post.
Le dernier de Nono40 m'a été utile.
Cependant, comment faire pour ecrire autre chose que ce que tape l'utilisateur ?
Avec les fonctions de Nono, je vois pas comment faire.
Lorsque je fais :
If KeyPressed Then WriteLn('Test');
ca marche pas !! il m'écrit la touche tapée....
Pourrait-on m'éclairer la dessus ?
En tous cas merci de vous etre creuser la tête pour moi !!!!

Kundun
http://www.kundun-official.com
0
Kundun2 Messages postés 24 Date d'inscription vendredi 13 septembre 2002 Statut Membre Dernière intervention 9 octobre 2003
21 oct. 2002 à 01:23
Salut,
merci a tous de repondre a mon post.
Le dernier de Nono40 m'a été utile.
Cependant, comment faire pour ecrire autre chose que ce que tape l'utilisateur ?
Avec les fonctions de Nono, je vois pas comment faire.
Lorsque je fais :
If KeyPressed Then WriteLn('Test');
ca marche pas !! il m'écrit la touche tapée....
Pourrait-on m'éclairer la dessus ?
En tous cas merci de vous etre creuser la tête pour moi !!!!

Kundun
http://www.kundun-official.com
0
Kundun2 Messages postés 24 Date d'inscription vendredi 13 septembre 2002 Statut Membre Dernière intervention 9 octobre 2003
21 oct. 2002 à 01:23
Salut,
merci a tous de repondre a mon post.
Le dernier de Nono40 m'a été utile.
Cependant, comment faire pour ecrire autre chose que ce que tape l'utilisateur ?
Avec les fonctions de Nono, je vois pas comment faire.
Lorsque je fais :
If KeyPressed Then WriteLn('Test');
ca marche pas !! il m'écrit la touche tapée....
Pourrait-on m'éclairer la dessus ?
En tous cas merci de vous etre creuser la tête pour moi !!!!

Kundun
http://www.kundun-official.com
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
21 oct. 2002 à 01:59
Je ne vois pas pourquoi la touche serait affichée...

Utilises-tu ensuite les fonctions Read ou ReadLn ? Car ces fonctions affichent par défaut en echo les touches tappées. Pour lire les touches saisies il faut utilser ReadKey.

--- :sleepy) Nono du Moulin :sleepy) ---
0
Kundun2 Messages postés 24 Date d'inscription vendredi 13 septembre 2002 Statut Membre Dernière intervention 9 octobre 2003
21 oct. 2002 à 03:20
Ca marche mais en fait, voila mon code :

Var S:String;
I:Integer;
Tab:array [1..8] of string;
begin
Tab[1]:='K';
Tab[2]:='U';
Tab[3]:='N';
Tab[4]:='D';
Tab[5]:='U';
Tab[6]:='N';
Tab[7]:='2';
Write('Bonjour : ');
I:=1;
repeat
If KeyPressed Then
begin
Write(Tab);
Inc(I);
end;
until false;
end.
//------------------------------------------------------
Je voudrais que quoi que tape l'utilisateur, ca m'ecrive les elements de mon tableau au fur et a mesure.
Le code ci dessus ecrit tous d'un coup et ferme l'appli. Par contre, quant je met :
If KeyPressed Then
begin
Write(Tab[I],ReadKey);
Inc(I);
....
Ca m'ecrit les elements de mon tableau au fur et a mesure mais avec le caractère taper par l'utilisateur. (ex :KjUhNzDpUqNw)

Comment faire pour que ca marche !!!!!
Merci d'avance

Kundun
http://www.kundun-official.com
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
21 oct. 2002 à 22:33
Ben c'est normal :
- KeyPressed retourne vrai si une touche est appuyée mais : Keuypressed reste vrai tant que la touche n'est pas lue par ReadKey. Donc sans le ReadKey, dès que tu appuyes sur une touche Keypressed reste vrai et tout le message est affiché !
- Dans le deuxième cas : Write(Tab[i],ReadKey), c'est normal que la touche s'affiche car tu lui demandes de s'afficher avec le Write !!!

En fait il faut écrire quelque chose comme :
repeat
If KeyPressed Then
begin
ReadKey;
Write(Tab[I]);
Inc(I);
end;
until false;

--- :sleepy) Nono du Moulin :sleepy) ---
0
Rejoignez-nous