IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Turbo Pascal Discussion :

readkey et graph


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Par défaut readkey et graph
    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.

  2. #2
    Membre chevronné Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Par défaut
    il me semble qu il n y a aucain probleme , mais au pire teste si sa marche tant mieu sinon tant pis

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Par défaut
    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.

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    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+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Par défaut
    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 ?

  6. #6
    Membre chevronné Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Par défaut
    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;

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Par défaut
    Si je fait ça il me dit unknown idetifier pour le keypressed.

  8. #8
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    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...
    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;
    Voilà, au passage Charly la boucle infinie, c'est pas terrible non plus
    a+

  9. #9
    Membre Expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Par défaut
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if KeyPressed then ReadKey;
    Alors comment veux-tu récupérer cette touche ? Elle est perdue !

    Il y a donc plusieurs variantes. Par exemple :

    1.
    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;
    2.
    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;
    A+

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Par défaut
    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.

  11. #11
    Membre chevronné Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Par défaut
    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 ? )

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Par défaut
    C'est bon j'arrive à récupérer la touche pressée.
    Je vous tiens au courant pour la suite.
    Merci.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Par défaut
    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 ?

  14. #14
    Membre chevronné Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Par défaut
    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

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Par défaut
    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.

  16. #16
    Membre chevronné Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Par défaut
    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 ... )

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Par défaut
    Ok je vais voir ça.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Par défaut
    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

  19. #19
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    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.
    J'ai pas testé mais ça devrait marcher, en admettant que l'on inscrive des noms corrects dans Items !
    a+

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 36
    Par défaut
    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.
    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.
    Me reste encore(entre autre ) à 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 ).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Classe pour la création d'un graphe xy
    Par Bob dans le forum MFC
    Réponses: 24
    Dernier message: 03/12/2009, 17h20
  2. [Dev-Pascal] Problème avec l'unité Graph (2 fenêtres et ReadKey qui ne fonctionne pas)
    Par Van der Elst dans le forum Autres IDE
    Réponses: 10
    Dernier message: 01/06/2006, 07h49
  3. [Turbo Pascal] [Windows XP] Problème avec l'unité GRAPH
    Par themofleur dans le forum Turbo Pascal
    Réponses: 22
    Dernier message: 29/03/2003, 22h43
  4. [] [Excel] Exporter un graphe MSChart vers Excel
    Par Gonzo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2002, 17h49
  5. Concerne les graphes
    Par mcr dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 12/11/2002, 11h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo