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 :

[Débutant] Touches F1 -> F 10 ; ECHAP,.. [TPW]


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Par défaut [Débutant] Touches F1 -> F 10 ; ECHAP,..
    Bonjour,

    Existe-t-il un code représentant les touches de fonctions (F1 -> F12, Echap, ...) ? Comment s'utilise-t-il ? Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    touche := readkey;
    if (touche = xxx) then donewincrt;
    Merci beaucoup.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Hia,

    De mémoire, sous XP, la console winCrt ne reçoit rien de ces touches.

    J'ai donc refait le test:
    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
    program poubelle;
     
    uses wincrt;
     
    var
      c : char;
    begin
      InitWinCRT;
     
      Repeat
        c := ReadKey;
        if (Ord(c) >= 32) then writeln(c) else writeln('code = ',Ord(c));
      Until c = Chr(13);
     
      WriteLn;
      ReadLn;
      DoneWinCRT;
    end.
    et effectivement, aucun affichage quand on appuie sur toutes les touches spéciales.

    Comme il y a belle lurette que je n'utilise plus ces vieux compilateurs (sauf pour ce genre de test), je ne me suis jamais demandé s'il y avait un moyen de corriger ça.

    ps : prends l'habitude de faire ce genre de petit programme, ça t'évitera souvent de perdre du temps.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Par défaut
    Merci beaucoup. Il y a au moins les touches "Echap" et "Entrée" qui sont reconnues. Je voudrais que l'on puisse sortir du programme à chaque entrée utilisateur si celui-ci le souhaite. J'ai fait ce code :
    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
     
    var
    c : char;
    capitale : string;
    entree : string;
     
    begin
    ...
    c := readkey;
        if (Ord(c) = 27) then  MenuPrincipal;
        if (ord(c) <> 27) then
        capitale := chr(ord(c));
        write(capitale);
        readln(entree);
        entree := capitale + entree;
        capitale := '';
    ...
    Les deux variables (choix et entree) n'étant pas du même type, j'ai dû convertir le Char en String. Y avait-il meilleure manière de faire ? Existe-t-il des fonctions de conversion entre un Char et un String ?
    Merci encore.

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Hia,
    Citation Envoyé par dimi2 Voir le message
    Merci beaucoup. Il y a au moins les touches "Echap" et "Entrée" qui sont reconnues
    Pour moi, les touches "Echap" et "Entrée" ne font pas partie des touches spéciales.

    Citation Envoyé par dimi2 Voir le message
    Je voudrais que l'on puisse sortir du programme à chaque entrée utilisateur si celui-ci le souhaite.
    Il y a je ne sais combien d'exemples dans les différents sujets du forum.

    Citation Envoyé par dimi2 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ...    capitale := chr(ord(c));
    ...
    As-tu réfléchi à ce que fait cette instruction ?

    Citation Envoyé par dimi2 Voir le message
    Les deux variables (choix et entree) n'étant pas du même type, j'ai dû convertir le Char en String. Y avait-il meilleure manière de faire ? Existe-t-il des fonctions de conversion entre un Char et un String ?
    Merci encore.
    Il suffit d'affecter le Char à String.

    Pour le reste, ce que tu cherches à faire, et surtout ce que tu as fait, reste plutôt confus.

    Tu as tendance à écrire des programmes qui utilisent des moyens détournés pour faire des choses qu'on peut faire beaucoup plus simplement, alors on en revient à la base:
    AVANT de te lancer dans le code, écris un algorithme qui résolve le problème, sans te préoccuper de la manière de le coder, mais qui soit le plus direct et clair possible.
    Si tu sautes cette étape, tu te heurteras toujours au même problème, qui te conduit à modifier au coup par coup un programme fait au pif au départ, ce qui à son tour conduit inévitablement à un programme compliqué, dans lequel tu ne t'y retrouves plus, d'où une bonne partie de tes questions.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 143
    Par défaut
    Voici ce que je cherche à faire :

    Mon programme propose une phrase française à l'utilisateur, et ce dernier doit entrer sa traduction dans une langue étrangère. Je voudrais que l'utilisateur puisse mettre fin à l'exercice à l'occasion de chaque question posée s'il ne souhaite pas poursuivre l'exercice. Cela en appuyant sur la touche Echap.

    Le code que j'ai imaginé teste la première touche entrée :

    - si touche Echap alors retour au menu
    - si autre touche, alors considérer la touche enfoncée comme le premier caractère de l'entrée en convertissant le Char en String
    - concaténer ce String à la suite de la réponse.

    Le code marche très bien, tout se passe comme je le veux. Je n'ai plus qu'un souci : en cas de correction de la réponse entrée par l'utilisateur, ce dernier ne peut corriger que la partie entrée après le Char car ce dernier est ineffaçable. Je comprends pourquoi mais je ne sais résoudre la problème.

    J'espérais trouver une solution moins tarabiscotée, j''ai cherché des messages concernant Echap sur le forum, mais je n'ai rien trouvé concernant TPW. Idem dans la FAQ.

    Avec mes remerciements.

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 969
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 969
    Par défaut
    Jie,

    Alors montre-nous toute la hiérarchie des fonctions/procédures qui gère tout cet enchaînement, en ne laissant que le code nécessaire pour ça.

    Du peu que tu nous a montré, je perçois un problème, mais qui ne peut être confirmé qu'en ayant le tout.

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

Discussions similaires

  1. Débutant : Touche reste Préssées
    Par jejeb dans le forum C
    Réponses: 5
    Dernier message: 08/03/2006, 14h43
  2. Jeu en asm et touche echap ?
    Par piff62 dans le forum Assembleur
    Réponses: 1
    Dernier message: 08/12/2005, 09h25
  3. [Débutant] [JTextArea] Désactiver une touche
    Par picomz dans le forum Composants
    Réponses: 2
    Dernier message: 09/06/2005, 16h52
  4. [débutant] Ordre des champs de saisie par la touche tab
    Par almisuifre dans le forum C++Builder
    Réponses: 10
    Dernier message: 03/03/2005, 19h45
  5. Comment gérer la touche echap ?
    Par Adrael dans le forum C
    Réponses: 28
    Dernier message: 11/07/2003, 13h15

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