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 :

chercher le contenu d'un EDIT dans la colone d'un STRINGGRID


Sujet :

C++Builder

  1. #1
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 43
    Points
    43
    Par défaut chercher le contenu d'un EDIT dans la colone d'un STRINGGRID
    bonjour


    je voulais savoir est-ce qu'il et possible de verifier si le contenu d'un edit1->text existe dans une stringgrid...

  2. #2
    Membre expérimenté
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Points : 1 427
    Points
    1 427
    Par défaut
    Il te suffit de faire un double boucle sur ton TStringGrid (sur les colonnes et les lignes) et tu compares le contenu de la case trouvée avec le contenu de ton Edit.

  3. #3
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    bin se que je veut faire ses la choses suivante, entrez une valeur dans un edit1->text, et vérifier s'il existe dans la premiere colone du tableau, si l'enregistrement existe, il l'affiche....


    please, help, me, ....


    quelqu'un aurez t'il un source.???

  4. #4
    Membre habitué Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Points : 197
    Points
    197
    Par défaut
    voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(int i = 0; i < StringGrid1->RowCount; i++)
    {
        if(Edit1->Text == StringGrid1->Cells[0][i]) ShowMessage("Element trouve !");
    }

  5. #5
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    j'ai deja fais se test et sa fonctionne, moi se que je veux, ses que s'il et existant dans la StringGrid1, et bien qu'il le surligne... ??? et sa j'y arrive pas ....!!!

  6. #6
    Membre habitué Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Points : 197
    Points
    197
    Par défaut
    ça dans le .h :
    dans le code OnDrawCell de StringGrid1 :

    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
     
    TColor bgColor; // Couleur de fond
    TColor fontColor; // Couleur du texte
     
    if(ARow == ligne) // Ligne a colorier
    {
        bgColor = TColor(0x003f40d4);
        fontColor = clWhite;
    }
    else // Couleur des autres lignes
    {
        bgColor = clWhite;
        fontColor = clBlack;
    }
     
    // Creons la couleur de fond + la couleur du texte
    // Il faut s'assurer que la cellule n'appartient pas a la 1ere ligne
    if (ARow != 0)
    {
         StringGrid1->Canvas->Brush->Color = bgColor;
         StringGrid1->Canvas->FillRect(Rect); // Colore le fond de la cellule
         StringGrid1->Canvas->Font->Color = fontColor; // Couleur du texte a afficher
    }
     
    // Ecrivons maintenant le texte
    StringGrid1->Canvas->TextOut(Rect.Left + 2, Rect.Top + 3, AnsiString(StringGrid1->Cells[ACol][ARow]));
    sur un boutton ou autre :

    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
     
    int i;  // Pour parcours de la boucle for
    bool element_trouve = false; // reste a false si pas d'element de trouve
     
    for(i = 1; i < StringGrid1->RowCount; i++)
    {
            if(Edit1->Text == StringGrid1->Cells[0][i])
            {
                ligne = i; // la ligne a colorier
                element_trouve = true;  // l'element est trouve
            }
    }
     
    if(!element_trouve) ligne = -1; // si l'element n'est pas trouve, on ne colore aucune ligne
    StringGrid1->Repaint();  // Actualisation du tableau

  7. #7
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    merci ac/dc, mais maintenant le soucie et que dans ma propriété OnClick du stringgrid1 mon code ne fonctionne plus...

    ton code et nickel mais il faut que si je clique directement sur une ligne dans le stringgrid, il me la surligne.... ???


    merci d'avance

  8. #8
    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,
    Il faut rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (State.Contains(gdSelected))
    {
    //on souligne le texte
    }
    dans le OnDrawCell

    @ +

  9. #9
    Membre habitué Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Points : 197
    Points
    197
    Par défaut
    dans le OnClick :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ligne = ARow;
    StringGrid1->Repaint();
    normalement ça devrait le faire .....

  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
    Et pis :

    Autre truc, tu peut imaginer enregistrer le contenu de la colonne dans un TStringList au moment du chargement de la StringGrid.
    De cette manière tu peut utiliser la méthode IndexOf(...) afin de récuperer un int, qui te servira dans OnDrawCell (comme te le proposes ac/dc) afin de connaitre a quelle ligne il faut souligner le texte (paramètre ARow).

  11. #11
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    non, sa passe pas, j'ai ajouter dans Drawcell la condition suivante:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    if (State.Contains(gdSelected))
    {
        bgColor = TColor(0x003f40d4);
    	fontColor = clWhite;
    }
    else // Couleur des autres lignes
    {
    	bgColor = clWhite;
    	fontColor = clBlack;
    }

  12. #12
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    [C++ Error] Unit10.cpp(347): E2451 Undefined symbol 'ARow'

    lorsque je fais


    ligne = ARow;
    StringGrid1->Repaint();

  13. #13
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    ces bon j'ai la solution merci a tous pour votre aide vous assurez

  14. #14
    Membre habitué Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Points : 197
    Points
    197
    Par défaut
    autant pour moi ....
    y'a pas moyen que tu utilise OnSelectCell plutot que OnClick ? (et là tu mets) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ligne = ARow;
    StringGrid1->Repaint();

  15. #15
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    je lais mis dans onselectcell, sa ma l'air identique, mais je viens de me rendre compte que i ma stringgrid et remplie , une scrollbar verticale appairait jusque là pas de soucie, sauf que si je veu la derniere ligne il me la séléctionne mais je suit obligé de descendre la scrollbar manuellement jusqu'a la ligne, existe t'il une moyen que la scrollbars se positionne toutes seul ????

  16. #16
    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,

    Tout seul, non pas vraiment.
    Mais en fonction de la position ou se situe le texte souligné, tu peut envoyer un message a la StringGrid avec PostMessage(...) afin de faire défiler le contenu.
    Par ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PostMessage(TaGrille->Handle,WM_VSCROLL, SB_PAGEDOWN, NULL);
    fais défiler la grille tout a fait en bas de page.

    Regarde dans l'aide 'SDK' Window accessible dans Builder au sujet du message
    WM_VSCROLL, il y a moyen d'affiler tout ça.

    En espérant t'aider,
    @ +

  17. #17
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    bof, j'essaye, mais sa me parait bizard, tu pense que ses se type de fonction qui m'est necessaire, se que je souhaite ses sa :

    je réalise une saisie dans un edit1->text

    et si le résultat et tous en bas de mon stringgrid, la scrollbars se positionne toutes seul pas besoin de rechercher a la mano, la ligne,..... (utile lorsque l'on as 100 ligne dans un stringgrid) ?????

  18. #18
    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 boopix
    et si le résultat et tous en bas de mon stringgrid, la scrollbars se positionne toutes seul
    Heu ... ben c'est ce que fait le code ...

    Testes la valeur de la ligne ou se situe le texte dans la StringGrid et compare le au nombre de ligne total de la grille, et donc tu sais si il est tout en bas et que tu peut lancer le PostMessage(...).

    Non ?

  19. #19
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 43
    Points
    43
    Par défaut
    non, il suffit simplement de faire,


    StringGrid1->Row = ligne;


    et la scrollbars se reposition au niveau de la cellule qui contient le champs, ces bon nickel, enfin j'espere je vais tester maintenant mon code , merci encore.

  20. #20
    Membre habitué Avatar de ac/dc
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2006
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 369
    Points : 197
    Points
    197
    Par défaut
    moi j'aurais plutôt utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringGrid1->TopRow = ligne - 2;
    pour afficher la ligne qui a été trouvée, enfin bon si ça fonctionne ....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment copier le contenu d'un Edit dans un autre Edit ?
    Par petitclem dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/04/2009, 16h12
  2. enregistrer le contenu d'un Edit dans un fichier texte
    Par tapouni dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/05/2008, 23h02
  3. Réponses: 3
    Dernier message: 29/02/2008, 12h41
  4. Copier le contenu d'un Edit dans une nouvelle Form
    Par breizh44 dans le forum Débuter
    Réponses: 16
    Dernier message: 20/02/2008, 22h54
  5. Enregistret le contenu d'un edit dans un fichier text
    Par prison_break dans le forum C++Builder
    Réponses: 19
    Dernier message: 02/01/2007, 13h55

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