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 :

R�cuperer le numero de ligne dans un RichEdit [FAQ]


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 39
    Par d�faut R�cuperer le numero de ligne dans un RichEdit
    Bonjour,
    Dans un RichEdit je rep�re la position d'un texte donn� par
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    RichEdit->Lines->Text.Pos("ma recherche")
    Maintenant que je l'ai trouv� je voudrais savoir sur quelle ligne du RichEdit je suis. Comment faire pour r�cup�rer le num�ro d'index de la ligne?

    Merci d'avance.

  2. #2
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    Bonsoir,
    J'ai test� un petit truc (peut etre un peu 'archaique') :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (int i = 0; i < Form1->TestRichEdit1->Lines->Count; i ++)
    {
    if (Form1->TestRichEdit1->Lines->Strings[i].AnsiPos("LeTexteCherché") > 0)
    {
    ShowMessage(i);
    }
    }
    En esp�rant que cela te soit utile...
    @ +

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    39
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 39
    Par d�faut
    Cette solution n'est pas exactement ce que je cherchais mais elle pourra le remplacer efficacement. Je crains juste que ce soit un peu long car mon texte est gros, mais la rapidit� n'est pas primordiale dans ce cas.

    Merci beaucoup

    J'esp�re toujours qu'il exsterait un truc comme
    int i= RichEdit->Lines->StringsIndex
    mais je ne trouve rien de ce genre l�!

  4. #4
    Membre Expert
    Avatar de Gilles Lou�se
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Par d�faut
    Citation Envoy� par nbutin
    Cette solution n'est pas exactement ce que je cherchais
    Je crois que ce que vous cherchiez n'existe pas, il n'existe pas de fonction pr�programm�e qui vous donnerait directement la solution, la proposition qui vous a �t� faite est tr�s bonne, elle proc�de logiquement ligne par ligne.

    Cela dit, une autre solution consisterait � cr�er un tableau d'entiers contenant pour chaque indice le nombre de caract�res de la ligne. Ainsi, par additions successives, il est tr�s facile de d�duire le num�ro de ligne � partir du num�ro de caract�re du RichEdit. Ce n'est pas tr�s difficile � programmer, ce ne serait qu'un tout petit peu plus rapide.

    � bient�t
    Gilles

  5. #5
    Membre �prouv�
    Homme Profil pro
    VP of Research and Innovation
    Inscrit en
    Mai 2002
    Messages
    84
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : Canada

    Informations professionnelles :
    Activit� : VP of Research and Innovation

    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Par d�faut
    Ceci existe :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    int iiLineNum= RichEdit1->Perform(EM_LINEFROMCHAR, RichEdit1->SelStart, 0);
    Le num�ro de ligne est en base 0 (ligne 1 = 0)

  6. #6
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut

    Oui, c'est chouette ca ...!
    Alors on peut proposer :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    String S = "LeTexteCherché";
    int BasePos = Form1->TestRichEdit1->Text.AnsiPos(S);
    int PosFound = Form1->TestRichEdit1->Perform(EM_LINEFROMCHAR, Form1->TestRichEdit1->Text.AnsiPos(S), 0);
    ShowMessage(PosFound);
    Form1->TestRichEdit1->Perform(EM_SETSEL, BasePos - 1, BasePos + S.Length());
    Form1->TestRichEdit1->SetFocus();
    Moi, j'aimerai bien savoir utiliser tous ces 'TMessages' correctement... mais je ne sais pas trop comment m'y prendre.
    @ +

  7. #7
    Membre �prouv�
    Homme Profil pro
    VP of Research and Innovation
    Inscrit en
    Mai 2002
    Messages
    84
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : Canada

    Informations professionnelles :
    Activit� : VP of Research and Innovation

    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Par d�faut
    Oui (why not en fait ??? )
    Ce qui faut retenir c'est que la valeur renvoy�e est en base 0.

    Donc peut �tre :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    ShowMessage(PosFound + 1);
    Pour l'op�rateur c'est plus lisible ...

  8. #8
    Membre �prouv�
    Homme Profil pro
    VP of Research and Innovation
    Inscrit en
    Mai 2002
    Messages
    84
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : Canada

    Informations professionnelles :
    Activit� : VP of Research and Innovation

    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Par d�faut
    Pour ce qui est des "TMessage", ils constituent le coeur de Windows et se trouvent dans les API Windows.

    Regarde dans l'aide C++ Builder, tu as un fichier Win32 Programmer Guide.

  9. #9
    Membre Expert

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

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

    Sinon il existe aussi cette astuce, au cas o� il y aurait plusieurs occurrences :

    Pour rechercher la premi�re occurence
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    ... Search()
    {
    Start = 0;
    RichEdit1->SelectAll();
    End = RichEdit1->SelLength;
    SearchNext()
    }
    Pour rechercher les occurrences suivantes du texte , ici, d'un TEdit :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ... SearchNext()
    {
    int n = RichEdit1->FindText(Edit1->Text, Start, End, TSearchTypes()<< stWholeWord);
    if(n != -1)
        {
        Start = n + Edit1->Text.Length(); //prêt pour l'occurrence suivante
        //pour calculer la position du mot dans le text
        RichEdit1->SelStart = n;
        RichEdit1->SelLength = 0;
        //RichEdit1->SetFocus();
        Label1->Caption = IntToStr(RichEdit1->CaretPos.y);
        }
    }
    La premi�re ligne � pour valeur d'index 0, ainsi que le premier caract�re d'une ligne.
    CaretPos.x renvoie la position du Caret en termes de nombre de caract�res dans la ligne.

    A plus !

  10. #10
    Membre �prouv�
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifi�)
    Inscrit en
    D�cembre 2004
    Messages
    2 059
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activit� : OPNI (Objet Programmant Non Identifi�)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 2 059
    Par d�faut
    Citation Envoy� par ChMerlier
    Pour ce qui est des "TMessage", ils constituent le coeur de Windows et se trouvent dans les API Windows.

    Regarde dans l'aide C++ Builder, tu as un fichier Win32 Programmer Guide.
    Merci, il faut que je m'y mette si je veux etre s�rieux...mais si y a quelqu'un qui donne des cours perso je suis preneur .
    Je cherche mon 'Maitre'....

Discussions similaires

  1. Espacement des lignes dans un RichEdit
    Par tsp dans le forum Langage
    R�ponses: 2
    Dernier message: 04/09/2009, 16h02
  2. R�ponses: 1
    Dernier message: 23/08/2008, 16h54
  3. r�cuperation donn�es d'une ligne dans un DBgrid
    Par swissland dans le forum C++Builder
    R�ponses: 3
    Dernier message: 02/04/2008, 13h16
  4. Obtenir la hauteur d'une ligne dans un RichEdit
    Par Juicebox dans le forum Windows
    R�ponses: 1
    Dernier message: 10/10/2006, 23h35
  5. Delphi6: numero de ligne dans la goutti�re?
    Par Inoceram dans le forum EDI
    R�ponses: 5
    Dernier message: 20/10/2005, 23h02

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