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

Lazarus Pascal Discussion :

Effacer le résultat d'un textout ?


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 49
    Points : 20
    Points
    20
    Par défaut Effacer le résultat d'un textout ?
    Bonjour à tous,

    J' affiche une chaîne de caractères sur une TpaintBox d'une Tform par l' instruction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PaintBox2.Canvas.TextOut(xcenter-80,ycenter+50,'Voici un rectangle et une ellipse');
    Comment effacer le résultat de cette instruction ?
    Par exemple pour écrire un texte plus court ?
    Mrci d' avance,
    Cordialement,
    Philippe

  2. #2
    Membre averti

    Profil pro
    dirlo
    Inscrit en
    Février 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : dirlo

    Informations forums :
    Inscription : Février 2008
    Messages : 83
    Points : 404
    Points
    404
    Par défaut
    Bonjour,

    tu dois pouvoir faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PaintBox2.Canvas.pen.mode := PmXOR;
    PaintBox2.Canvas.TextOut(xcenter-80,ycenter+50,'Voici un rectangle et une ellipse');
    sleep(100);
    PaintBox2.Canvas.TextOut(xcenter-80,ycenter+50,'Voici un rectangle et une ellipse');
    PaintBox2.Canvas.pen.mode := PmCopy

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Vie,
    Citation Envoyé par parhelie Voir le message
    Bonjour,

    tu dois pouvoir faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PaintBox2.Canvas.pen.mode := PmXOR;
    PaintBox2.Canvas.TextOut(xcenter-80,ycenter+50,'Voici un rectangle et une ellipse');
    sleep(100);
    PaintBox2.Canvas.TextOut(xcenter-80,ycenter+50,'Voici un rectangle et une ellipse');
    PaintBox2.Canvas.pen.mode := PmCopy
    C'est une solution un peu trop primaire, car le texte ainsi écrit sera multicolore selon l'image de fond.

    Pour que ce soit propre, il faut gérer ça avec un masque. Je te laisse chercher un peu (c'est ce qu'on fait par exemple pour afficher le curseur de la souris ).
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 49
    Points : 20
    Points
    20
    Par défaut Effacer le résultat de TextOut
    Bonjour à tous,
    Merci à Parhelie et Droggo.
    Je suis confus : je n'ai expérimenté que la solution de Pharhelie. Ca ne change rien du tout.
    Si j' ai compris quelque chose, le principe était de réécrire la même chaîne dans la couleur de fond ? En fait ça n'a aucun effet.
    Où peut-on trouver de la doc sur Textout ?
    J'ai trouvé des exemples sous Google, douteux.

    Je reformule ma question :
    Comment supprimer le résultat d' un Textout. Là le problème est:
    Si je fais un premier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextOut(x,y,'Voici un rectangle et une ellipse')
    il s'affiche bien:
    Voici un rectangle et une ellipse
    Si je fais un second :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextOut(x,y,'Effacement')
    il s' affiche :
    Effacementtangle et une ellipse
    Encore merci,
    Cordialement,
    Philippe

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Cao,

    C'est normal, tu ne fais pas ce que parhelie t'a dit de faire.

    Il faut effacer le 1er texte avant de mettre le nouveau.
    Si les cons volaient, il ferait nuit à midi.

  6. #6
    Membre averti

    Profil pro
    dirlo
    Inscrit en
    Février 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : dirlo

    Informations forums :
    Inscription : Février 2008
    Messages : 83
    Points : 404
    Points
    404
    Par défaut
    Salut,
    Tu es sûr que tu ne peux pas utiliser un composant TLabel? Tu n'aurais alors plus rien à gérer, juste à renseigner son "caption". (pour faire plus simple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TonLabel.caption := 'Voici un rectangle et une ellipse';
    sleep(100);
    TonLabel.caption := '';
    sleep(100);
    TonLabel.caption := 'hop!';
    La bonne solution est celle de droggo. si d'ailleurs il voulait nous en dire un peu plus... je suis preneur.

  7. #7
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Une méthode bourrin, mais efficace consiste à écrire une chaine composée de caractères "espace" avant de réécrire autre chose.

    Le nombre de caractères "espace" correspondant à la largeur max que tu as affecté à ton "textout.

    Cordialement.

    Pierre

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Foa,
    Citation Envoyé par ChPr Voir le message
    Une méthode bourrin, mais efficace consiste à écrire une chaine composée de caractères "espace" avant de réécrire autre chose.

    Le nombre de caractères "espace" correspondant à la largeur max que tu as affecté à ton "textout.

    Cordialement.

    Pierre
    Pas si on a écrit sur une image.

    Citation Envoyé par droggo Voir le message
    Vie,
    Pour que ce soit propre, il faut gérer ça avec un masque. Je te laisse chercher un peu (c'est ce qu'on fait par exemple pour afficher le curseur de la souris ).
    Désolé, je pensais à autre chose.

    La bonne solution est :

    1) On veut écrire sur un fond uni :

    - On écrit,

    - Et pour effacer, on trace un rectangle rempli de la couleur du fond, rectangle dont la taille correspond à la zone occupée par le texte.

    2) On veut écrire sur une image :

    - On sauve le rectangle de l'image où le texte va s'écrire.

    - On écrit.

    - Et pour effacer, on recopie la zone d'image sauvegardée.

    Et ATTENTION : ne pas oublier de libérer la mémoire occupée pour la sauvegarde de la zone de l'image une fois qu'on n'en a plus besoin.

    (Avec variante : pour effacer, on peut recharger carrément toute l'image, ce qui dispense de la sauvegarde de la zone concernée, mais peut s'avérer lourd en temps d'exécution).
    Si les cons volaient, il ferait nuit à midi.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 49
    Points : 20
    Points
    20
    Par défaut
    Bonjour,
    Citation Envoyé par droggo Voir le message
    Cao,
    C'est normal, tu ne fais pas ce que parhelie t'a dit de faire.
    Il faut effacer le 1er texte avant de mettre le nouveau.
    J'ai bien fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PaintBox2.Canvas.pen.mode := PmXOR;
    PaintBox2.Canvas.TextOut(xcenter-80,ycenter+50,'Voici un rectangle et une ellipse');
    sleep(100);
    PaintBox2.Canvas.TextOut(xcenter-80,ycenter+50,'Voici un rectangle et une ellipse');
    PaintBox2.Canvas.pen.mode := PmCopy
    Ca n'efface rien du tout.
    Où trouver de la doc sur le fonctionnement de Textout ?

    Pour ChPr :

    Je n' affecte aucune largeur max à Textout.
    Et pour cause : je ne sais pas comment faire.

    Encore merci,
    Cordialement,
    Philippe

  10. #10
    Membre averti

    Profil pro
    dirlo
    Inscrit en
    Février 2008
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : dirlo

    Informations forums :
    Inscription : Février 2008
    Messages : 83
    Points : 404
    Points
    404
    Par défaut
    Ca n'efface rien du tout.
    En effet, je suis désolé et je n'avais pas vérifié! Pen n'a aucun effet sur TextOut!
    Où trouver de la doc sur le fonctionnement de Textout ?
    J'ai bien compris la question mais à part mon vieux guide du developpeur Delphi, qui n'a pas la réponse à ton problème, je n'en sais rien.
    Il te reste à mon avis à suivre Droggo et son CopyRect, ou utiliser un label si tu es un peu paresseux et pas trop exigeant pour l'image de fond.
    Bon courage.

  11. #11
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    droggo a raison, ma méthode n'est valable que si l'on écrit sur un espace réservé à l'écriture. Elle n'est pas valable sur une image.

    Si l'on ne veut pas avoir de problème, d'une manière générale, la méthode qu'il propose est la bonne.

    Ou alors, passer par les objets, mais là, c'est beaucoup plus lourd.

    Cordialement.

    Pierre

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 49
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    Citation Envoyé par droggo Voir le message
    Foa,

    Pas si on a écrit sur une image.


    Désolé, je pensais à autre chose.

    La bonne solution est :

    1) On veut écrire sur un fond uni :

    - On écrit,

    - Et pour effacer, on trace un rectangle rempli de la couleur du fond, rectangle dont la taille correspond à la zone occupée par le texte.

    2) On veut écrire sur une image :

    - On sauve le rectangle de l'image où le texte va s'écrire.

    - On écrit.

    - Et pour effacer, on recopie la zone d'image sauvegardée.

    Et ATTENTION : ne pas oublier de libérer la mémoire occupée pour la sauvegarde de la zone de l'image une fois qu'on n'en a plus besoin.

    (Avec variante : pour effacer, on peut recharger carrément toute l'image, ce qui dispense de la sauvegarde de la zone concernée, mais peut s'avérer lourd en temps d'exécution).
    Finalement j'ai écrit celà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    MyRect := Rect(10,10,100,100);
    PaintBox2.Canvas.Font.Color := clGreen;
    PaintBox2.Canvas.TextRect(MyRect,10,10,'Bonjour Tous!');
    Sleep(2000);
    { PaintBox2.Canvas.Font.Color := clNone; }
    { PaintBox2.Canvas.TextRect(MyRect,10,10,'Bonjour Tous!');  }
    PaintBox2.Canvas.Brush.Color := PaintBox2.Color ;
    PaintBox2.Canvas.Fillrect( MyRect);
     
    Sleep(2000);
    PaintBox2.Canvas.Font.Color := clRed;
    PaintBox2.Canvas.TextRect(MyRect,10,10,'Salut !');
    Les deux solutions fonctionnent.
    Est-ce que ça correspond à la solution 1/ de Droggo ?
    Les autres conseils m' ont appris des choses.
    Textout n' a pas l' air très pratique.
    Merci à tous,
    Cordialement,
    Philippe

Discussions similaires

  1. [AJAX] Effacer un résultat précédent
    Par daffy85 dans le forum jQuery
    Réponses: 6
    Dernier message: 20/04/2015, 11h04
  2. Effacer la fenetre des résultats
    Par herkitz dans le forum SAS Base
    Réponses: 2
    Dernier message: 12/05/2010, 17h01
  3. Effacer les résultats d'une requête
    Par Nutrino dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/11/2006, 21h54
  4. TextOut : comment changer de font
    Par Freakazoid dans le forum DirectX
    Réponses: 2
    Dernier message: 15/07/2002, 20h46
  5. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26

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