Kundun2
Messages postés24Date d'inscriptionvendredi 13 septembre 2002StatutMembreDernière intervention 9 octobre 2003
-
15 oct. 2002 à 13:14
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 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 !!!
Bruto
Messages postés214Date d'inscriptionjeudi 21 mars 2002StatutMembreDernière intervention14 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
Bruto
Messages postés214Date d'inscriptionjeudi 21 mars 2002StatutMembreDernière intervention14 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
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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) ---
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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...
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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.
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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 ?
Kundun2
Messages postés24Date d'inscriptionvendredi 13 septembre 2002StatutMembreDerniè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 !!!!
Kundun2
Messages postés24Date d'inscriptionvendredi 13 septembre 2002StatutMembreDerniè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 !!!!
Kundun2
Messages postés24Date d'inscriptionvendredi 13 septembre 2002StatutMembreDerniè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 !!!!
Kundun2
Messages postés24Date d'inscriptionvendredi 13 septembre 2002StatutMembreDerniè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 !!!!
Kundun2
Messages postés24Date d'inscriptionvendredi 13 septembre 2002StatutMembreDerniè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 !!!!
Kundun2
Messages postés24Date d'inscriptionvendredi 13 septembre 2002StatutMembreDerniè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 !!!!
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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.
Kundun2
Messages postés24Date d'inscriptionvendredi 13 septembre 2002StatutMembreDerniè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
cs_Nono40
Messages postés962Date d'inscriptionmercredi 3 avril 2002StatutMembreDernière intervention12 septembre 20062 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;