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 :

[TPW][Débutant] Effacer entrée utilisateur et repositionner curseur


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 [TPW][Débutant] Effacer entrée utilisateur et repositionner curseur
    Bonjour,
    Lorsque l'utilisateur tape une espace suivie d'une entrée, mon programme plante. Pour éviter cela, j'essaie de trouver une parade. Voici ce que j'ai trouvé :

    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
     
     x := WhereX;
     y := WhereY;
     
     while entree[1] = ' ' do
     begin
           if (entree[1] = ' ') then
           begin
           entree := '';
           GotoXY(x,y);
           write('                                           ');
           GotoXY(x,y);
           readln(entree);
           end;
     end;
    Ca marche bien, mais je sens bien que c'est du bricolage. Y a-t-il mieux ?

    D'autre part, pour effacer l'éventuelle entrée de l'utilisateur j'ai utilisé
    parce que DelLine; ne fonctionne pas avec WinCRT. Qu'y a-t-il de plus élégant ?

    Merci de vos conseils.

  2. #2
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Commence par nous dire ce que tu veux lire et ce que tu veux que le programme fasse.
    Si tu lis l' entrée comme chaine de caractere, tu peux analyser la chaine apres l' avoir lue. Comme ça tu peux effacer les espaces parasites qui se trouvent devant l' entrée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    while (entree[1]=' ') and (length(entree)>1) do
     delete(entree,1,1);
     
    //on a supprimé tous les espaces mais length(entree) vaut au moins 1
    //si la chaine ne contient que des espaces, le dernier reste dans la chaine

  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 pour votre réponse.
    Mon programme traite la chaîne entrée par la suite et s'il tombe sur une chaîne remplie d'espaces plutôt que sur des caractères alphabétiques, il plante. Il me faut donc annuler une entrée faite uniquement d'espaces.

    Je retiens Delete(...). puis-je faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Delete(entrée,1,length(entree))

  4. #4
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    delete fonctionne comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delete(entree,debut,nombre_car);
    debut est la position à partir de laquelle tu vas commencer à supprimer. Nombre_car est le nombre de caractere à supprimer
    Donc si tu fais :
    Delete(entrée,1,length(entree))
    tu vas supprimer toute la chaine.
    Essaie de comprendre le code que je t' ai donné.

  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
    Ca efface la valeur de la variable "entree" mais ça n'efface pas l'affichage. Et c'est l'affichage que je voudrais effacer pour représenter une ligne vierge à l'utilisateur.

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 966
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 966
    Par défaut
    Fia,
    Citation Envoyé par dimi2 Voir le message
    Ca efface la valeur de la variable "entree" mais ça n'efface pas l'affichage. Et c'est l'affichage que je voudrais effacer pour représenter une ligne vierge à l'utilisateur.
    Ce que tu as fait est une bonne approche, un peu rudimentaire, c'est tout.

    Il faudrait plutôt faire une procédure, disons gomme, qui pourrait être déclarée ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure Gomme(x,y,longueur : Integer);
    et qui pourrait faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    - aller à x, y
    - "effacer" à partir de ce point, en écrivant longueur espaces
    - et pour parfaire, repositionner le curseur à x,y
    on peut également améliorer, par exemple en donnant la couleur du fond à utiliser pour effacer, autoriser le GoToXY au début/fin ou non (en clair, effacer à partir de la position actuelle du curseur)...

    Les possibilités sont nombreuses, mais le tout deviendrait plus facile avec une véritable application fenêtrée pour Windows, avec des éditeurs, etc.

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

Discussions similaires

  1. [TPW][Débutant] Position curseur readln(x)
    Par dimi2 dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 25/04/2008, 20h43
  2. Débutant! Effacer de la matière...
    Par dumbool_82 dans le forum OpenGL
    Réponses: 1
    Dernier message: 04/03/2005, 10h37
  3. Réponses: 2
    Dernier message: 26/01/2005, 21h00
  4. [Débutant] communication entre 2 instances
    Par xiao-long974 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 05/06/2004, 12h07
  5. Réponses: 3
    Dernier message: 06/02/2004, 11h46

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