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 :

D�tect� le wordwrap dans un TMemo


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair� Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, C�te d'Or (Bourgogne)

    Informations professionnelles :
    Activit� : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par d�faut D�tect� le wordwrap dans un TMemo
    Bonjour tous

    Je suis entrain de faire une appli o� l'utilisateur pourra entrer ses propres infobulles.

    Le principe est simple : l'op�rateur choisi "entrer un commentaire" gr�ce � un menupopup sur le composant. De la il �crit son message dans un TMemo.
    Le texte du TMemo est alors enregistr� dans un fichier ini.

    Tout les caract�res correspondant � "\r\n" sont remplac� par des ";". Le "\r\n" appara�t quand l'utilisateur frappe sur entr�e ( ). Ainsi dans le fichier ini, le texte sera complet lors de l'affichage de l'infobulle.

    Lorsque l'utilisateur �crit � la suite sans taper "entr�e". le Tmemo fait un retour � la ligne logiciel gr�ce � wordwrap.Quand j'enregistre dans mon fichier ini, cela correspond � une seule ligne.

    Mon probl�me est que lorsque je affiche cette ligne dans une infobulle, cela affiche 1seule et grande ligne. Je trouve cela tr�s moche.

    Et j'aimerai donc pouvoir r�duire cette ligne en un petit paragraphe.
    Y'a t il un moyen de d�tecter le wordwrap?
    Si non, avez vous une id�e de comment faire?

    J'ai une solution pas tr�s satisfaisante :
    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
     
    {
        TIniFile *pIniFile = new TIniFile(IniPath);
        Text =Memo->Text;
        AnsiString tmp,tmp1;
        tmp= Text;
        int i=1;
        int L = Text->Length();
        /*Défini des retours chariots pour les phrases trop longues*/
        for(int j=0;j<L;j++)
        {
     
                //Regarde à chaque espace si la phrase n'est pas trop longue
                if (Tmp.IsDelimiter(" ",j)==true)
                {
                    if (j>(33*i))  //Si trop de caractère
                    {
                        Tmp.Insert("\r\n",j); //Insere le retour chariot
                        i+=1;
                        j+=1;
                    }
                }
        }
        Text = StringReplace(Tmp, "\r\n", ";", TReplaceFlags() << rfReplaceAll);/*Remplace le sauts de ligne par 1 pointvirgule*/
        pIniFile->WriteString(Unit,Name,Text);
        Text= "";
        delete pIniFile;
    Si l'utilisateur �crit tous en ligne et que de temps en temps il tape "entr�e". Le paragraphe n'est pas r�gulier. Je continue � bosser dessus.

    Mais si quelqu'un � une meilleur solution je suis preneur.
    Merci de votre aide
    ++

  2. #2
    Membre �m�rite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par d�faut
    salut,

    Piste1 : D�sactiver le WordWrap de ton Memo, de la sorte l'utilisateur aura une infobulle format�e � sa convenance...

    Piste2 : Ajouter un �v�nement OnChange (double clique sur ton Memo), cet �v�nement doit compter en temps r�el le nombre de caract�re, au-del� d'un multiple de la largeur de ton m�mo ou au-del� d'un multiple d'un nombre A de caract�re (if), la fonction r�cup�re la cha�ne, y ajoute un retour chariot et rafra�chi le Memo avec la cha�ne mise � jour...

    Pour avoir un formatage r�gulier, essaye la police Courier comme Font...


  3. #3
    Membre �clair� Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, C�te d'Or (Bourgogne)

    Informations professionnelles :
    Activit� : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par d�faut
    Hello

    D'abord merci de ton aide.
    Citation Envoy� par maxim_um
    salut,

    Piste1 : D�sactiver le WordWrap de ton Memo, de la sorte l'utilisateur aura une infobulle format�e � sa convenance...
    Hum j'ai essayer mais cette solution ne me plait pas.
    Citation Envoy� par maxim_um
    Piste2 : Ajouter un �v�nement OnChange (double clique sur ton Memo), cet �v�nement doit compter en temps r�el le nombre de caract�re, au-del� d'un multiple de la largeur de ton m�mo ou au-del� d'un multiple d'un nombre A de caract�re (if), la fonction r�cup�re la cha�ne, y ajoute un retour chariot et rafra�chi le Memo avec la cha�ne mise � jour...

    Pour avoir un formatage r�gulier, essaye la police Courier comme Font...

    J'ai essayer cette solution. Au d�but je l'ai trouv� s�duisante mais le probl�me est que lorsque l'on va rafra�chir le texte du TMemo, le programme relance l'�v�nement Onchange. Ce qui va amener � remplir continuellement le text du TMemo et ainsi faire un overflow.
    Par contre je vais essayer un timer ca pourrait peut �tre marcher.

  4. #4
    Membre �clair� Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, C�te d'Or (Bourgogne)

    Informations professionnelles :
    Activit� : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Par d�faut
    Bon je suis parti sur une autre piste qui fonctionne comme je le d�sire.
    J'ai utilis� un TStringList. A chaque ligne faite avec le wordwrap du TMemo, on enregistre la ligne dans la liste et ensuite on met les \r\n pour faire le retour chariot.
    Voici le code :

    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
     
     
        TIniFile *pIniFile = new TIniFile(IniPath);
        TStringList *SL=new TStringList();
        int i;
        Text="";//initialise le text
        //Initialise la StringList
        for(i=0;i<Memo->Lines->Count-1;i+=1)
        {
            SL->Add(Memo->Lines->Strings[i]);
            SL->Strings[i] = SL->Strings[i].Insert("\r\n",SL->Strings[i].Length()+1);
            Text=Text+SL->Strings[i];
        }
        Text = StringReplace(Text, "\r\n", ";", TReplaceFlags() << rfReplaceAll);/*Remplace le sauts de ligne par 1 pointvirgule*/
        pIniFile->WriteString(Unit,Name,Text);
        Text= "";
        delete pIniFile;
        delete SL;

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Positionnement de ligne dans un TMemo
    Par tixu dans le forum Composants VCL
    R�ponses: 4
    Dernier message: 18/12/2004, 11h45
  2. Position du curseur dans un TMemo
    Par yokito dans le forum Composants VCL
    R�ponses: 3
    Dernier message: 28/08/2003, 16h35
  3. Taille des tabulations dans un TMemo ?
    Par dergen dans le forum Composants VCL
    R�ponses: 2
    Dernier message: 07/01/2003, 19h38
  4. Retour chariot dans un TMemo ?
    Par Vincent PETIT dans le forum C++Builder
    R�ponses: 7
    Dernier message: 27/08/2002, 18h55

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