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

Langage Delphi Discussion :

Propriétés Text et Lines d'un TMemo


Sujet :

Langage Delphi

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut Propriétés Text et Lines d'un TMemo
    Bonjour,

    Je rencontre une anomalie et je n'arrive pas à comprendre ce qui peut la causer.

    J'ai un champ TMemo.
    Je valorise la propriété Text de ce champ avec la valeur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TMemo.Text := '14708'#$D#$A'14712'#$D#$A'14714'#$D#$A
    En principe j la propriété Lines du champ devrait être égale à 3 puisqu'il y a 3 valeurs séparées les unes autres par des CRLF
    Hors j'en ai 15 soit autant que de caractères différents de CRLF.

    Si quelqu'un peut m'expliquer merci d'avance

  2. #2
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 509
    Points : 2 780
    Points
    2 780
    Billets dans le blog
    10
    Par défaut de 15 à 3
    Citation Envoyé par Delphi-ne Voir le message
    Bonjour,
    ....
    En principe j la propriété Lines du champ devrait être égale à 3 puisqu'il y a 3 valeurs séparées les unes autres par des CRLF
    Hors j'en ai 15 soit autant que de caractères différents de CRLF.
    Si quelqu'un peut m'expliquer merci d'avance
    Le problème que tu mentionnes ne se situe pas ou tu le penses. Le code suivant retourne bien 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      memo1.lines.text := '14708'#$D#$A'14712'#$D#$A'14714'#$D#$A ;
      showmessage (intToStr(memo1.lines.count)) ;

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Merci.

    Le code est différent.
    Vous saisissez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memo1.lines.text := '14708'#$D#$A'14712'#$D#$A'14714'#$D#$A ;
    Moi j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memo1.text := '14708'#$D#$A'14712'#$D#$A'14714'#$D#$A ;
    Il faut que je vérifie la différence entre les deux au niveau de l'aide de Delphi

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    ton memo aurait-il une largeur de 1 caractère avec un WordWrap à True ?!

  5. #5
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    Testé sous Seattle :

    en VCL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      Memo1.Lines.Text := '14708'#$D#$A'14712'#$D#$A'14714'#$D#$A;
      ShowMessage(IntToStr(Memo1.Lines.Count));
      ShowMessage(IntToStr(Length(Memo1.Text)));
      Memo1.Text := '14708' + sLineBreak + '14712' + sLineBreak + '14714' + sLineBreak;
      ShowMessage(IntToStr(Memo1.Lines.Count));
      ShowMessage(IntToStr(Length(Memo1.Text)));
    Résultat affiché:
    3
    21
    3
    21

    Correct

    en FMX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      Memo1.Text := '14708'#$D#$A'14712'#$D#$A'14714'#$D#$A;
      ShowMessage(IntToStr(Memo1.Lines.Count));
      ShowMessage(IntToStr(Length(Memo1.Text)));
    Affiche 4 puis 21

    Bizarrement, en FMX, le dernier saut de ligne est compté qu'il ne l'est pas en VCL

  6. #6
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 509
    Points : 2 780
    Points
    2 780
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par Delphi-ne Voir le message
    Merci.

    Le code est différent.
    Vous saisissez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memo1.lines.text := '14708'#$D#$A'14712'#$D#$A'14714'#$D#$A ;
    Moi j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memo1.text := '14708'#$D#$A'14712'#$D#$A'14714'#$D#$A ;
    Il faut que je vérifie la différence entre les deux au niveau de l'aide de Delphi
    Memo1.Text accède à l'intégralité du texte en tant que type string donc on peut compter les caractères.
    Memo1.lines.text permet d'avoir une autre vision du même texte sous forme d'un TstringList et on peut compter les lignes

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 710
    Points : 25 593
    Points
    25 593
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Bizarrement, en FMX, le dernier saut de ligne est compté qu'il ne l'est pas en VCL
    Pas tant que cela, le TMemo en VCL c'est en réalité une classe Windows,
    le Lines ne contient pas les données mais les gère via EM_GETLINE et EM_SETLINE

    Alors qu'en FMX, le Lines est un tableau d'indice de position dans une grande chaine

    Donc deux implémentations qui n'ont rien en commun, donc deux comportements différents n'ont rien de surprenant

  8. #8
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 502
    Points : 3 133
    Points
    3 133
    Par défaut
    Je ne sais pas pourquoi mais j'ai toujours cru que seul le TRichEdit était à base de classe Windows.
    Dans ce cas, ceci explique cela.

    Merci de ce rappel

  9. #9
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Finalement je ne m'en suis pas sorti.
    J'ai essayé d'écrire une fonction qui stockait la chaîne de caractères dans une variable et qui ensuite effectuait des Lines.Add à chaque CRLF rencontré. Au final j'obtenais autant de lignes que de caractères.

    Je suis passé par une variable TStringList et là tout est OK.

    Par contre j'ai quand même noté quelque chose d'intéressant : quand la fenêtre est active le fonctionnement est normal.
    C'est quand on clique sur OK et qu'on effectue la validation des données avant de fermer la fenêtre que le problème se produit.

    On ne va pas dire que c'est résolu mais merci à tous d'avoir tenté de m'aider.

  10. #10
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 509
    Points : 2 780
    Points
    2 780
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par Delphi-ne Voir le message
    On ne va pas dire que c'est résolu mais merci à tous d'avoir tenté de m'aider.
    Bonjour Delphi-ne, j'ai l'habitude de travailler Avec les TstringList, TMemo et TListBox. J'ai de nombreux exemples que je pourrai te fournir si tu le souhaites.
    Bon W.E.

Discussions similaires

  1. [TMemo] Problème avec la propriété Text
    Par OutOfRange dans le forum Composants VCL
    Réponses: 2
    Dernier message: 17/11/2007, 14h26
  2. Réponses: 2
    Dernier message: 31/12/2006, 18h26
  3. Réponses: 4
    Dernier message: 16/10/2006, 15h12
  4. [C#] proprités text d'une Combobox
    Par kooljy dans le forum Windows Forms
    Réponses: 3
    Dernier message: 29/06/2006, 10h24
  5. [Delphi 6] Problème avec la propriété Text d'un composant
    Par bionoir dans le forum Composants VCL
    Réponses: 4
    Dernier message: 08/12/2005, 12h23

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