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 :

TMemo C++ Builder 6


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Par d�faut TMemo C++ Builder 6
    Salut � tous.

    Je programme actuellement un petit terminal s�rie mais j'ai un probl�me qui se pose.
    J'affiche les caract�res re�us dans un Memo avec un assenceur, mais voil�, je ne vois pas comment faire pour ajouter des caract�res dans ce Memo sans passer par Memo->Texte+="nouveau text".
    Car dans ce cas pr�cis, c'est tr�s lent, et en plus l'affichage pointe vers le d�but du Memo et donc je dois sans cesse le forcer � afficher la fin du Memo... Ce qui est du plus mauvais effet...

    Il y a bien une m�thode pour ajouter des lignes mais �a ne me convient pas...
    Quelqu'un a-t-il une solution � ce probl�me?[/COLOR]


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    WindowRx->Text += RxBuff;                                        // ajouter du texte au mémo
    WindowRx->SelStart = (WindowRx->Text.Length());   // mettre le pointeur à la fin du mémo
    WindowRx->Perform(EM_SCROLLCARET,0,0);       // mettre le pointeur à la fin du mémo
    Johanboy

  2. #2
    Membre chevronn�

    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    531
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 531
    Par d�faut
    Bonjour, si tu souhaites aller plus vite, il est aussi n�cessaire de purger les lignes "enciennes", celle qui sont en haut du m�mo.

    Ceci dit, je n'ai pas constat� de lenteur particuli�re li�e � cela.

    Si c'est le cas tu peux toujours temponner tes datas dans un tableau ou un AnsiString et les envoyer ensuite compl�tement par bloc � ton m�mo avec un cycle donn� par un timer.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Par d�faut
    Bonjour,

    merci pour ta r�ponse.

    tu peux toujours temponner tes datas dans un tableau ou un AnsiString et les envoyer ensuite compl�tement par bloc � ton m�mo avec un cycle donn� par un timer.
    WindowRx->Text += RxBuff; // ajouter du texte au m�mo
    WindowRx->SelStart = (WindowRx->Text.Length()); // mettre le pointeur � la fin du m�mo
    WindowRx->Perform(EM_SCROLLCARET,0,0); // mettre le pointeur � la fin du m�mo
    cette partie de code est effectivement dans un timer.

    J'ai �galement concat�ner RxBuff pour ensuite l'ajouter.

    WindowRx->Text = RxBuff;
    Mais le r�sultat et identique.

    Ce qui me g�ne, c'est que lors de l'affectation au m�mo par une ou l'autre mani�re, le curseur pointe au d�but du m�mo, je dois donc lui dire � chaque fois de repointer � la fin, et il a un effet de va-et-vient d�sagr�able et qui s'amplifie avec la longueur du m�mo.

    si tu souhaites aller plus vite, il est aussi n�cessaire de purger les lignes "enciennes", celle qui sont en haut du m�mo.
    J'efface bien s�r les lignes pr�cedentes apr�s une certaine longueur et j'en efface 20% histoire de ne pas devoir effacer des ligne � chaque cycle du timer.

    Donc ce que je voudrais, c'est juste ajouter mon AnsiString � la suite sans tout r��crire le Memo et que le curseur pointe toujours � la fin...

  4. #4
    Membre �m�rite
    Avatar de Interruption13h
    Inscrit en
    Ao�t 2005
    Messages
    603
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2005
    Messages : 603
    Par d�faut
    Salut !

    Pour ajouter une ligne dans ton memo :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    
    WindowRx->Lines->Add(RxBuff);
    et pour scroller vers la fin :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    
    void __fastcall TForm1::WindowRxChange(TObject *Sender)
    {
    SendMessage(WindowRx->Handle, WM_VSCROLL, SB_BOTTOM, 0);        
    }
    Esp�rant t'avoir aider.


    Bonne continuation !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Par d�faut
    Salut !

    Pour ajouter une ligne dans ton memo :



    WindowRx->Lines->Add(RxBuff);
    Ben le probl�me, c'est que je veux pas ajouter une ligne, mais bien ajouter du text � la suite...

    Je commence � me demander si je n'aurais pas facile � prendre un API windows pour remplacer le memo(composant builder).

    Quel API me permettrait de remplacer le memo?

  6. #6
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 413
    Par d�faut
    Salut !

    Je ne comprends pas trop ce que tu cherches � obtenir.

    Si par exemple on suppose n'afficher que les 16 derniers codes entr�s en n'utilisant que la premi�re ligne du TMemo :

    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
    int n = 0; //compteur d'entrées
     
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    //pour simuler mes entrées
    AnsiString N = IntToStr(n % 256) + ",";
    if(n < 16)
        {
        Chaine = Chaine + N;
        }
    else
        {
        int pos = Chaine.Pos(",");
        Chaine = Chaine.SubString(pos+1, Chaine.Length()) + N;
        }
    n++;
    Memo1->Lines->Strings[0] = Chaine;
    }
    Autre exemple qui affiche 16 entr�es par lignes en ajoutant une ligne lorsque c'est n�cessaire (c'est sans doute dans ce sens la ... ???)

    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
    //Compteur de lignes
    int y=0;
    //Compteur d'entrées
    int n=0;
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    //Pour simuler une entrée
    AnsiString N = IntToStr(100) + ",";
    if(n > 15)
        {
        n=1;
        Memo1->Lines->Add(N);
        y++;
        }
    else
        {
        n++;
        Memo1->Lines->Strings[y] = Memo1->Lines->Strings[y] + N;
        }
    }
    Comme tu peux le voir, j'ai simul� cette capture � l'aide d'un TSpeedButton...

    Sinon... ???

    A plus !

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    4
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Par d�faut
    Merci pour ta participation henderson.

    Effectivement cette mani�re de proc�der semble �tre int�ressante.

    Mais je ne peux pas travailler caract�re par caract�re, �a va �tre bcp trop lent surtout que j'utilise mon terminal � 115k bauds...

    Et donc, je vais devoir g�rer �galement les passages � la ligne �ventuels qui se trouveraient dans la trame texte... (je filtre d�ja la trame re�u par le port s�rie pour que tout '\r' ou '\n' donne ceci "\r\n" car sinon le memo affiche un caract�re sp�cial (un carr�).

    Je vais travailler cel� et je reviens quand j'ai avanc�.

    Merci � vous.

  8. #8
    Membre �prouv�

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    MonMemo->Text += (AnsiString) "hi !";
    Et �a supporte tr�s bien les \n.

Discussions similaires

  1. c++ builder TMemo
    Par ola-oz dans le forum C++Builder
    R�ponses: 3
    Dernier message: 21/02/2010, 13h02
  2. TMemo C++Builder version2007
    Par 3logy dans le forum C++Builder
    R�ponses: 8
    Dernier message: 29/08/2007, 16h00
  3. le composant TMemo de builder avec une Form
    Par boopix dans le forum C++Builder
    R�ponses: 7
    Dernier message: 15/09/2006, 16h00
  4. Outils, cours et NOUVEAUX tutoriels pour Borland C++Builder
    Par hiko-seijuro dans le forum C++Builder
    R�ponses: 10
    Dernier message: 12/03/2006, 22h33
  5. R�ponses: 2
    Dernier message: 20/03/2002, 23h01

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