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

C++Builder Discussion :

Retour chariot dans un TMemo ? [FAQ]


Sujet :

C++Builder

  1. #1
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    avril 2002
    Messages
    3 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2002
    Messages : 3 097
    Points : 11 203
    Points
    11 203
    Par défaut Retour chariot dans un TMemo ?
    Voilà mon problème:
    J'ai dans mon Mémo des caractères Hexa sous 2 digits, provenant d'un logue, séparés par un espace, comme cela: 5A 27 1F
    Et j'aimerai faire des retours à la ligne à des endroits précis.
    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
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
    int InsQR,InsATR;
    AnsiString MefQR=Memo6->Text;
    for&#40;int Stop=0;Stop<MefQR.Length&#40;&#41;+1;Stop++&#41;
     &#123;
      if&#40;&#40;MefQR.IsDelimiter&#40;"3",Stop&#41;&#41;&&&#40;MefQR.IsDelimiter&#40;"H",Stop+1&#41;&#41;==true&#41;
       &#123;
        InsATR=Stop;
       &#125;
      if&#40;&#40;MefQR.IsDelimiter&#40;"B",Stop&#41;&#41;&&&#40;MefQR.IsDelimiter&#40;"H",Stop+1&#41;&#41;&&&#40;MefQR.IsDelimiter&#40;"H",Stop+3&#41;&#41;&&&#40;MefQR.IsDelimiter&#40;"0",Stop+4&#41;&#41;&#41;
       &#123;
        InsQR=Stop;
       &#125;
     &#125;
    &#125;
    Avec se code je sais par exemple à quelles caractères commence la question, BH H0 etc..., la réponse puis la 2 eme question etc...
    Bon code fonctionne bien j'ai fais plusieur essai.

    Mais je voudrais faire des retours chariots, pour une mise en forme, au commencement de chaque question et pour cela j'ai les variables InsATR et InsQR qui représente la place des caractères ou je dois faire des retours chariots dans mon Memo.
    Merci de votre aide.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    mars 2002
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : mars 2002
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Tu as essayé avec '\n' ou les caractères 10 et 13 ?
    A++

    Si ce n'est pas une réponse, j'espère que c'est une bonne piste.
    Mettez le tag [RESOLU] devant le sujet de votre question une fois que la réponse vous a été donnée.

  3. #3
    Rédacteur
    Avatar de Greybird
    Inscrit en
    juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 673
    Points : 1 251
    Points
    1 251
    Par défaut
    Pour rajouter ton retour chariot, fait :
    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
     
    void __fastcall TForm1&#58;&#58;Button5Click&#40;TObject *Sender&#41; 
    &#123; 
      AnsiString MefQR=Memo6->Text; 
      for&#40;int Stop=0;Stop<MefQR.Length&#40;&#41;+1;Stop++&#41; 
      &#123; 
        if&#40;&#40;MefQR.IsDelimiter&#40;"3",Stop&#41;&#41;&&&#40;MefQR.IsDelimiter&#40;"H",Stop+1&#41;&#41;&#41; 
        &#123;
          MefQR.Insert&#40;"\r\n",Stop+1&#41;;
          Stop+=3;
        &#125;
        else 
        &#123;
          if&#40;&#40;MefQR.IsDelimiter&#40;"B",Stop&#41;&#41;&&&#40;MefQR.IsDelimiter&#40;"H",Stop+1&#41;&#41;&&&#40;MefQR.IsDelimiter&#40;"H",Stop+3&#41;&#41;&&&#40;MefQR.IsDelimiter&#40;"0",Stop+4&#41;&#41;&#41; 
          &#123; 
            MefQR.Insert&#40;"\r\n",Stop+1&#41;;
            Stop+=6; 
          &#125;
        &#125; 
      &#125; 
    &#125;
    Cordialement,
    Arnaud

  4. #4
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    avril 2002
    Messages
    3 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2002
    Messages : 3 097
    Points : 11 203
    Points
    11 203
    Par défaut
    Merci beaucoup, j'avais essayé avec "\n" mais ça ne fonctionné pas, alors je vais essayer ta proposition GreyBird avec "\r\n".
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  5. #5
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    avril 2002
    Messages
    3 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2002
    Messages : 3 097
    Points : 11 203
    Points
    11 203
    Par défaut
    Ca fonctionne très bien, merci.
    J'ai modifié 1 chose, car je voulais faire un retour chariot en début du caractère trouvé donc de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MefQR.Insert&#40;"\r\n",Stop+1&#41;;
    je passe à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MefQR.Insert("\r\n",Stop);
    . Je dois avoué que je n'aurai jamais pensé à mettre "\r\n"
    Mais j'aimerai une explication:
    Pourquoi et ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  6. #6
    Rédacteur
    Avatar de Greybird
    Inscrit en
    juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 673
    Points : 1 251
    Points
    1 251
    Par défaut
    En fait, cela vient de la description de ton affichage que tu as donné
    Tu as dit que ton Memo contenait des valeur sous la forme xx xx xx xx.
    Une fois que tu as trouvé ton code question (ou l'autre), tu as ajouté des caractères avant la position où tu es. Il faut donc avancer ton Stop du nombre de caractères que tu as insérés. Ici 2 (\r\n).
    Cependant, en faisant ceci, tu te replace directement sur le code que tu as déjà detecté. Il faut donc avancer. Tant qu'à faire, autant passer au bloc de deux caractères suivant : Cela revient à avancer de 3.
    Il faut donc que Stop+=4 (le Stop++ du for va agir ensuite) (et non pas Stop+=3, comme fait dans le code que je t'ai envoyé ; il marchait mais n'était pas super optimisé, car il se placait sur le deuxième caractère du bloc que tu avait détecté. )
    Pour la deuxième détection, c pareil : +2 pour sauter les caractères que tu as insérés, +6 pour sauter les 4 chiffres qui composent le code détecté.
    Donc Stop+=7, à la place de Stop+=6 (qui était foireux lui aussi)

    Voilà. J'espère que toutes ces explications te seront utiles.

    Cordialement,
    Arnaud

  7. #7
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    avril 2002
    Messages
    3 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2002
    Messages : 3 097
    Points : 11 203
    Points
    11 203
    Par défaut
    ok, en faite c'était le "\r\n" qui me chiffonné. je te remerci encore pour ton explication. Elle était très claire.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  8. #8
    Rédacteur
    Avatar de Greybird
    Inscrit en
    juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : juin 2002
    Messages : 673
    Points : 1 251
    Points
    1 251
    Par défaut
    En fait /r/n : /r c retour en début de ligne et /n c retour à la ligne.
    Avec cette syntaxe tu es sûr à 100% du passage à la ligne alors qu'avec /n c plus, disons, aléatoire

    Cordialement,
    Arnaud

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

Discussions similaires

  1. [MFC] retour chariot dans CEdit
    Par ricky78 dans le forum MFC
    Réponses: 4
    Dernier message: 13/07/2005, 10h30
  2. [VB.NET]Retour chariot dans un champ texte
    Par San Soussy dans le forum ASP.NET
    Réponses: 10
    Dernier message: 23/06/2005, 12h36
  3. Retour chariot dans l'inspecteur d'objet
    Par All Jinx dans le forum Composants VCL
    Réponses: 3
    Dernier message: 20/10/2004, 01h28
  4. Comment effectuer un retour chariot dans 1 JTextarea
    Par elitost dans le forum Composants
    Réponses: 2
    Dernier message: 21/06/2004, 17h18
  5. retour chariot dans un string
    Par bono dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/12/2003, 12h17

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