Salut.
Est il possible d'utiliser readkey avec graph ou faut il repasser en mode crt.
Car après avoir vérifié la touche sélectionnée j'ai besoin de graph.
Merci d'avance.
Salut.
Est il possible d'utiliser readkey avec graph ou faut il repasser en mode crt.
Car après avoir vérifié la touche sélectionnée j'ai besoin de graph.
Merci d'avance.
il me semble qu il n y a aucain probleme , mais au pire teste si sa marche tant mieu sinon tant pis![]()
En gros je souhaite faire:
lire la touche enfoncée avec readkey
Comparer et agir en conséquence.
Par contre je voudrait savoir si keypressed est a utiliser.
Il n'y a aucun problème pour l'utilisation de readkey et de keypressed avec l'unité graph ! C'est même mieux de les préférer à readln par exemple, qui s'utilise principalement en mode texte
a+
Donc je résume.
Je doit d'abord vérifier qu'une touche a été pressée avec keypressed
Ensuite readkey lit le code de la touche.
Puis je fait mes comparaisons.
Ce qui pourrait donner:
if keypressed then
readkey;
Suite du prog...
Par contre j'ai vu des exemples de code ou readkey est associé à une variable, est ce indispensable ?
bah pour faire sa moi je fais ( dans une boucle )
var key :char ;
begin
repeat
if keypressed then
case readkey of
touche1 :
touche 2 :
#27 : break;
end;
until false ;
end;
Si je fait ça il me dit unknown idetifier pour le keypressed.
Il faut utiliser l'unité CRT, qui contient les fonctions keypressed et readkey. Charly utilise l'instruction break mais personnellement je la trouve ultra stupide ( désolé mon canard ), en effet c'est pas très naturel de stopper un programme dans son exécution...
Voilà, au passage Charly la boucle infinie, c'est pas terrible non plus
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 var key:char ; var fin:boolean; begin fin:=false; repeat if keypressed then case readkey of touche1 : touche 2 : #27 : fin:=true; end; until fin; end;
a+
Normal, Charly a oublié de mentionner l'unité Crt dans une clause uses. C'est pas la mort.
Si tu veux agir en fonction de la touche, il faut bien que tu connaisses la valeur de la touche.
Si tu fais :
Alors comment veux-tu récupérer cette touche ? Elle est perdue !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if KeyPressed then ReadKey;
Il y a donc plusieurs variantes. Par exemple :
1.
2.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 uses Crt, Graph; begin ... if KeyPressed then case UpCase(ReadKey) of 'O': OutTextXY(10, 10, 'Oui'); 'N': OutTextXY(10, 10, 'Non'); end; ... end;
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 uses Crt, Graph; var Ch: Char; begin ... if KeyPressed then begin Ch := UpCase(Readkey); OutTextXy(10, 10, 'Vous avez appuyé sur ' + Ch); end; ... end;
J'ai testé la première méthode et elle ne marche pas chez moi.
J'ai bien l'invite de commande mais le fait de taper o ou n ne donne rien.![]()
mmm sa change pas grand chose ... mon petit ver , un break ou un boolean ... sa quitte la boucle point ! c est pit etre moin propre mais bon , tant que y a pas de poo , sa risque pas grand chose ...
sinon tu peux peut etre nous donnee precisemment le code que tu as entrer , on te dias ce qui va pas ( ps : tu as bien penser a definir la valeur des touches presser ? )
C'est bon j'arrive à récupérer la touche pressée.
Je vous tiens au courant pour la suite.
Merci.![]()
J'arrive à déplacer mon rectangle grace au clavier.
Maintenant je voudrait pouvoir effaver rectangle précédent pour n'en avoir qu'un seul à l'écran.
A part reécrire le rectangle précédent dans la couleur du fond, existe il une autre solution ?
Si non comment affecter une couleur au rectangle ?
ahh , je sens le casse briks , tu peux tous simplement effacer l ecran et tous reaficher , mais sa risque de flashouiller , reecrir le rectangle me semble plus propre : setcolor ou setfillstyle je crois , mais sa remonte a loin![]()
Perdu!!!!!
C'est po un casse brique.
Je me fait un CD bootable avec des utilitaires(ghost,...) et je cherche à me faire un menu de démarrage un peu plus fun q'avec un batch.
Donc pour l'instant j'arrive à afficher le contenu de mon fichier de conf.
Afficher et déplacer mon rectangle de choix.
Me reste le problème d'affichage correct du rectangle et en suite la commande exec.
penches toi du cotes de vbe2 ( presnt dans les contrib du site ) tu pourra faire de tres zoli menu avec des images ( bmp , jpg ect ... )
Bon j'ai téléchargé vbe2 et je verrai si je n'y arrive pas autrement.
Sinon j'ai réussi à déplacer mon rectangle en effaçant le précédent.
Par contre j'utilise un if alors qu'il me faudrait une condition multiple du genre CASE puisque je doit pouvoir faire monter ET descendre mon rectangle.
Mais pas moyen.
Car pour chaque case j'ai plusieurs actions à accomplir.
Genre:
case c of
#72:action1
action2
#80:action1
action2
J'ai pas testé mais ça devrait marcher, en admettant que l'on inscrive des noms corrects dans Items !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 {exemple de menu à 3 éléments, avec mode texte 03h} uses crt; var select:integer; var ch:char; const items:array[1..3] of string[20]=('Salut','Bonjour','Aurevoir'); procedure affiche; var i:integer; begin for i:=1 to 3 do begin if i=select then begin textcolor:=15; textbackground(1); end else begin textcolor:=7; textbackground(0); end; writeln(Items[i]); end; end; begin select:=1; repeat ch:=readkey; case ch of #72 : begin if select>1 then select:=select-1 else select:=1; affiche; end; #80 : begin if select<3 then select:=select+1 else select:=3; affiche; end; #13 : exec(Items[select],''); end; until ch=#27; end.
a+
Voilà ce que donne mon code, je modifirait après le placement graphique de manière plus évoluée.
Pour l'instant je peut:
Afficher les titres liés au fichier texte.
Naviguer avec les touches dans le dit menu.
Me reste encore(entre autre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 s:string; c:char; pilote,mode:integer; x,y,x1,y1,x2,y2:integer; begin x:=100; y:=120; x1:=90; y1:=105; x2:=360; y2:=140; pilote:=detect; initgraph(pilote,mode, 'c:\TP\BGI'); assign(f,'c:\TP\menu.txt'); reset(f); while not eof(f) do begin readln(f,s); outtextxy(x,y,s); y:=y+40; end; close(f); setcolor(2); rectangle(x1,y1,x2,y2); begin repeat c:=readkey; case c of #80: begin setcolor(0); rectangle(x1,y1,x2,y2); setcolor(2); rectangle(x1,y1+40,x2,y2+40); setcolor(0); rectangle(x1,y1-40,x2,y2-40); y1:=y1+40; y2:=y2+40; end; #72: begin setcolor(0); rectangle(x1,y1,x2,y2); setcolor(2); rectangle(x1,y1-40,x2,y2-40); setcolor(0); rectangle(x1,y1+40,x2,y2+40); y1:=y1-40; y2:=y2-40; end; end; until c=#27; readln; end; end.) à compter le nb d'items du menu pour la navigation.
La liaison item -> tâche à éxécuter.
etc...
Je reviens si je bloque (ça risque de pas trainer).
Partager