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 :

Problème ListBox


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut Problème ListBox
    J 'ai converti mon AnsiString rn tableau de caractère
    et je stock ma chaine dans une ListBox

    Comment faire en sorte que les login ne soit pas tous sur la meme ligne ? (voir screeshot)

    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
     
    AnsiString Buffer=Socket->ReceiveText();
    int longueur = Buffer.Length();
    char c = Buffer[longueur];
     
        for(i=2;i<sizeof(Buffer);i++)
                {
                     if((c =='\r') || (c=='\x04'))
                     {
     
                     ListBox1->Items->Add(Buffer);
     
     
                     }
                     Buffer ="";
                }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Elle est étrange, ta boucle...

    Si tu veux juste écrire le buffer dans la ListBox, tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1->Items->Add(Buffer);
    Ici, tu

    1- mets dans c le dernier caractère du Buffer
    char c = Buffer[longueur];
    2- parcours une boucle
    for(i=2;i<sizeof(Buffer);i++)
    mais pourquoi sizeof(Buffer)? (la taille en octets de l'AnsiString????)

    3- lors du premier passage dans la boucle, tu n'ajoutes la chaine Buffer que si elle finit par \r ou 0x04 (pourquoi?)
    if((c =='\r') || (c=='\x04')) ListBox1->Items->Add(Buffer);

    4- et après tu mets ton Buffer à zéro
    Buffer ="";
    (rien ne s'imprimera lors des itérations suivantes)

    Donc, sauf si Buffer finit par \r ou 0x04, tu te retrouves avec un ListBox vide.

    Le résultat me parait normal, mais je ne vois pas du tout ce que tu cherches à faire...

    Francois

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut
    2) pour le sizeof c'est une erreur de ma part ^^
    3) pour ce qui est de '\r ' et '\x04' cela provient de la trame du serveur que je recois
    Cette trame renvoi les Login des utilisateurs connectés au serveur que je traite dans mon Client
    trame:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '*'+"LOGIN1" + '\r' + "LOGIN2"+'\r'+...+'\x04'
    je doit les affichés dans ma ListBox.
    J'ai réussi :
    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
    AnsiString Buffer=Socket->ReceiveText();
    int longueur = Buffer.Length();
    char c = Buffer[longueur];
     
    //Traitement ....
     
           Memo1->Lines->Add(Buffer);
     
               if(Buffer==Connect || Buffer==OK || Buffer == CLoginOk)
               {
               Memo1->Lines->Add("vidage1");
     
               }
                    else if((c =='\r') || (c=='\x04'))
                     {
                     ListBox1->Items->Add(Buffer);
                     Buffer ="";
                     }
    Pour visualiser:
    Comment faire en sorte que les login ne soit pas tous sur la meme ligne ?

  4. #4
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Donc on récupère l'ensemble dans un tableau de char.

    Tu as un problème d'implémentation d'algorithme qu'on résoud ici à l'aide de pointeurs !

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    // se placer au début du tableau
    char *p = &Tab[0]; // ou p = Tab // selon ...
    // le premier item
    char *item = p;
    // calculer la fin du tableau
    char *fin = p + buffer_size;
    // tant qu'on n'a pas atteint la fin du tableau
    while(p < fin)
        {
        // si séparateur ...
        if(*p == ...)
            {
            //alors on termine par un NUL
            *p = 0;
            // on engrange l'item
            ListBox->Items->Add(item);
            // l'item suivant commence après le séparateur
            p++;
            // à ce stade l'item suivant commence en p[0] 
            // mais dont ne connait pas encore la fin ... 
            item = p; 
            }
        else
            {
            // tant qu'on n'a pas rencontré le séparateur
            p++;
            }
     
        }
    A toi d'améliorer en particulier si la séparation se fait avec plusieurs caractères.

    A plus !

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 162
    Par défaut
    J 'ai résolu le problème très simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListBox1->Items->Text=Buffer ;// à la place de ListBox1->Add(Buffer)
    les '\r' permettent directement le saut de ligne

    PS : le premier caractere pour unAnsiString c'est 1

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/10/2008, 09h36
  2. Problème listbox vba
    Par fabrice2205 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/06/2008, 19h39
  3. Problème ListBox et colonnes
    Par Fishes83 dans le forum IHM
    Réponses: 1
    Dernier message: 08/05/2007, 08h25
  4. [VBA-E]Problème Listbox et path
    Par captaine93 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 10/11/2006, 11h00
  5. Problème ListBox 'Erreur 2176'
    Par emeraudes dans le forum IHM
    Réponses: 5
    Dernier message: 19/05/2006, 17h04

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