bonjour
je voulais savoir est-ce qu'il et possible de verifier si le contenu d'un edit1->text existe dans une stringgrid...
bonjour
je voulais savoir est-ce qu'il et possible de verifier si le contenu d'un edit1->text existe dans une stringgrid...
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.
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.???
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 !"); }
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 ....!!!
ça dans le .h :
dans le code OnDrawCell de StringGrid1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2int ligne;
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
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]));
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
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
Bonsoir,
Il faut rajouter :
dans le OnDrawCell
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 OnClick :
normalement ça devrait le faire .....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ligne = ARow; StringGrid1->Repaint();
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).
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; }
[C++ Error] Unit10.cpp(347): E2451 Undefined symbol 'ARow'
lorsque je fais
ligne = ARow;
StringGrid1->Repaint();
ces bon j'ai la solution merci a tous pour votre aide vous assurez
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();
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 ????
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:
fais défiler la grille tout a fait en bas de page.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 PostMessage(TaGrille->Handle,WM_VSCROLL, SB_PAGEDOWN, NULL);
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,
@ +
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) ?????
Heu ... ben c'est ce que fait le code ...Envoyé par boopix
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 ?
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.
moi j'aurais plutôt utiliserpour afficher la ligne qui a été trouvée, enfin bon si ça fonctionne ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part StringGrid1->TopRow = ligne - 2;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager