locked
Obtenir le text de la ligne active dans un contrôle RichTextBox RRS feed

  • Question

  • Bonjour à tous,

    Mon souci est le suivant :

    aprés avoir inséré un fichier au moyen de la fonction LoadFile() dans un RichTextBox (propriété .Wordwrap = true), la propriété .Lines() me retourne 254 lignes. En revanche si je positionne le curseur sur la dernière ligne du texte la fonction GetLineFromCharIndex() me retourne 280 (du fait que le contrôle a sa propriété WordWrap à True le problème disparait si la propriété WordWrap est à False). N'ayant pas le bon numéro je ne peux donc pas créer de sélection.

    Existe t-il un moyen d'obtenir des numéros de lignes identiques si la propriété WordWrap est à true ?

    Existe t-il un moyen d'obtenir le texte ou la longueur de la ligne courante (au même titre qu'il existe

    GetFirstCharIndexOfCurrentLine()) ?

    Merci.

    mardi 21 août 2007 09:04

Toutes les réponses

  • bonjour,

     

    en fait, ce n'est pas parce que la ligne est coupée en 2 à l'affichage qu'elle est vraiment coupée --> il n'y a pas de \r\n à la fin.

     

     

     

     

    mardi 28 août 2007 12:05
  • Bonjour,

     

    C'est bien ce que j'avais cru comprendre, vu que la propriété SelectionStart, me renvoie bien le bon index de charactère et ce, que la propriété WordWrap du contrôle soit ou non à True. Mais alors quelle est l'astuce pour obtenir un numero de ligne cohérent entre la fonction GetLineFromCharIndex et la propriété Lines du RichtextBox, car si le point d'insertion se situe au beau milieu du texte je ne peut en aucun cas être sûr qu'il s'agit bien de la même ligne.

     

    Prenons un exemple pour être plus clair. J'aimerais pouvoir permettre aux utilisateurs de mettre la ligne (entière), ou se situe le point d'insertion en gras, grâce à un simple click sur un bouton (j'ai bien dit qu'il s'agissait d'un exemple...).

     

    Voici le texte tel que vu par la propriété Lines du contrôle

     

    Au clair de la lune mon ami pierrot

    préte moi ta plume pour écrire un mot

     

    Le même texte à l'affichage après "Wrappage"

     

    Au clair de la lune

    mon ami pierrot

    préte moi ta plume

    pour écrire un mot

     

    Pour l'exemple, je veux mettre en gras la ligne 1 (à l'affichage) 

    j'ai besoin dans un premier temps d'obtenir le numéro de la ligne courante donc :

    GetLineFomCharIndex(RichtextBox1.SelectionStart)  (me renvoie 1 : correct) 

     

    ensuite L'index du premier charactère de la ligne

    GetFirstCharIndexFromLine(1) ou la fonction GetFirstCharIndexOfCurrentLine() (me renvoient  21 : correct)

     

    Pour sélectionner la ligne entiérement il me faut sa longueur.

    RichtextBox1.Lines(1).Length (me renvoie 37) correct toujours mais plus cohérent avec la valeur rééllement attendue.

    15. Voila donc mon soucis, Il doit bien exister une astuce pour contourner ce problème car ce serait dommage de se passer de la propriété WordWrap 

     

      

    jeudi 30 août 2007 03:14
  • Bah... le problème c'est que le RichTextBox ne gère "que l'affichage" du texte... de plus, la largeur du RichTextBox peut changer d'un ordinateur à un autre, d'un utilisateur à un autre...

    jeudi 30 août 2007 09:42
  • Re bonjour,

    Ok et merci pour avoir eu l'amabilité de répondre, Je reprendrais donc mes vielles API déclarées dans Tom.h

    De plus pour ce que je voulais faire je viens de m'apercevoir que ce n'etait possible qu'en ayant des plages de sélection (ITextRange) et non pas la fonction select du richtextbox et je ne peux pas me permettre de perdre le bénéfice de la propriété WordWrap. Dommage pour un contrôle .Net...

    Merci

    jeudi 30 août 2007 18:09