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

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 39
    Points : 48
    Points
    48
    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 expert
    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 : 53
    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
    Points : 3 204
    Points
    3 204
    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 du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 39
    Points : 48
    Points
    48
    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 chevronné
    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
    Points : 1 911
    Points
    1 911
    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 régulier
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Points : 109
    Points
    109
    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 expert
    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 : 53
    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
    Points : 3 204
    Points
    3 204
    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 régulier
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Points : 109
    Points
    109
    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 régulier
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations forums :
    Inscription : Mai 2002
    Messages : 84
    Points : 109
    Points
    109
    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 chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    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 expert
    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 : 53
    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
    Points : 3 204
    Points
    3 204
    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