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 :

numéro de ligne dans un mémo


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut numéro de ligne dans un mémo
    bonjour à tous!
    je voudrai savoir comment obtenir le n° de ligne d'une chaîne de caractère spécefique sur un mémo.

    merci d'avance

  2. #2
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Compte tenu de ma version BCB et s'agissant d'un TMemo...

    Pour la saisie, il existe CaretPos (à exloiter dans la OnKeyUp du Memo).
    Idem si celà concerne la sélection d'un mot à l'aide de la souris (à exploiter dans la OnMouseDown ou OnMouseUp du Memo).

    Si cela concerne une recherche dynamique d'un mot, on peut le faire, à l'aide d'une boucle, donc chaine par chaîne, en utilisant la méthode AnsiString::Pos.
    La ligne est alors donnée par la boucle; le mot est trouvé lorsque Pos renvoie un résultat différent de 0.
    Il faudra ruser un peu s'il faut tenir compte ou non, de la casse (case sensitive).

    A plus !

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut
    merci pour l'aide que vous m'apporter.

  4. #4
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Voici un bout de code pour appliquer ce que j'ai mentionné.
    J'ai donc utilisé un TMemo, un TStatusBar (avec 4 panels), un TSpeedButton et un TFindDialog.

    Le TSpeedButton sert à ouvrir le TFindDialog.
    La recherche d'un mot s'effectue depuis ce TFindDialog.

    Déclarations globales (ou comme propriétés de TForm1 ou autre):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int Start;
    bool MatchCaseOption;
    a) Pour la saisie avec indication de la position du caret :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void __fastcall TForm1::Memo1KeyUp(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
    StatusBar1->Panels->Items[0]->Text = Memo1->CaretPos.x;
    StatusBar1->Panels->Items[1]->Text = Memo1->CaretPos.y;
    }
     
    void __fastcall TForm1::Memo1MouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y)
    {
    StatusBar1->Panels->Items[0]->Text = Memo1->CaretPos.x;
    StatusBar1->Panels->Items[1]->Text = Memo1->CaretPos.y;
    }
    b) Pour la recherche d'un mot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    //Initialisation des paramètres
    Start = 0;
    MatchCaseOption =  FindDialog1->Options.Contains(frMatchCase);
    //Ouverture de la boite de dialogue
    FindDialog1->Execute();
    }
    Cette méthode est celle de l'événement OnFind qui se produit à chaque fois que l'on va cliquer sur Suivant

    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
    28
    void __fastcall TForm1::FindDialog1Find(TObject *Sender)
    {
    AnsiString N;
    //Cette partie ne sert qu'à vérifier si on a modifié l'option MatchCase
    //Si c'est le cas, on reprend la recherche depuis la première ligne
    bool CaseSensitive = FindDialog1->Options.Contains(frMatchCase);
    if(MatchCaseOption != CaseSensitive)
        {
        Start = 0;
        MatchCaseOption = CaseSensitive;
        }
     
    AnsiString F = FindDialog1->FindText;
    //Si on ne tient pas compte de la casse dans ce cas on travaille en UpperCase
    if(CaseSensitive == false) F = F.UpperCase();
     
    for(int j = Start; j < Memo1->Lines->Count; j++)
        {
        N = Memo1->Lines->Strings[j];
        if(CaseSensitive == false) N = N.UpperCase();
        if(N.Pos(F) != 0)
            {
            StatusBar1->Panels->Items[2]->Text = j;
            Start = j+1; //prêt pour la ligne suivante
            return; //fin puisque l'on a trouvé une ligne
            }
        }
    }
    Ce n'est qu'un exemple !
    A noter qu'ici je ne recherche qu'une seule occurence par ligne.

    A plus !

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut
    mon travaille consiste a faire renter un programme sur le memo(après l'exécution du code)et trouver la chaîne que je veut à partir d'un n° de ligne pour ensuite incrémenter ce n° et continuer la procédure.

  6. #6
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Par défaut
    sans mettre les composants StatusBar et un FindDialoque.

Discussions similaires

  1. Numéro de ligne dans MySql ?
    Par VirusChess dans le forum Requêtes
    Réponses: 1
    Dernier message: 18/01/2006, 09h00
  2. Réponses: 2
    Dernier message: 03/11/2005, 11h49
  3. Rajouter les numéros de ligne dans une colone d'une requete
    Par AntiSAL dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 02/11/2005, 19h07
  4. numéros de lignes dans visual c++
    Par heider dans le forum MFC
    Réponses: 7
    Dernier message: 24/08/2005, 14h06
  5. Afficher le numéro de ligne dans une requete SELECT
    Par tilb dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/09/2004, 10h20

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