Bonsoir,
je voudrais savoir s'il possible de mettre un bouton dans une case d'un tdrawgrid. Et quel est le code si c'est le cas. Merci d'avance.
Bonsoir,
je voudrais savoir s'il possible de mettre un bouton dans une case d'un tdrawgrid. Et quel est le code si c'est le cas. Merci d'avance.
Bonsoir,
Je te laisse un bout de code, qui m'a servi de test pour qqchose de similaire...
C'est donc dans l'évènement OnDrawCell du DrawGrid, et ca marche aussi pour le StringGrid d'ailleurs...
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 void __fastcall TForm2::DrawGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { // if (ACol == 0) { DrawGrid1->Canvas->Brush->Color = clInfoBk; DrawGrid1->Canvas->FillRect(Rect); Form1->ImageList1->Draw(DrawGrid1->Canvas,Rect.Left + 9,Rect.Top + 9,7); DrawGrid1->Canvas->Font->Color = clRed; DrawGrid1->Canvas->TextOutA(Rect.Left + 4, Rect.Top + 1, AnsiString("Supprimer") + ARow); } else { if (ARow == 2) { DrawGrid1->Canvas->FillRect(Rect); Form1->ImageList1->Draw(DrawGrid1->Canvas,Rect.Left + 9,Rect.Top + 9,8); } } }
Donc passe ca au mixer, assaisonne a ton gout, en espérant que cela te serve.
@ +
PS : j'avais donc stocké les images 'boutons enfoncé'/'boutons relevé' dans une TImageList, d'ou leur apparition dans ce code...
Current StatusAux persévérants aucune route n'est interdite.
Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
Faîtes quelque chose de bien avec vos petits sous: Enfants du MekongAvec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
Merci bien je vais essayer de m'en sortir avec ça et pis si j'arrive pas je ferai un appel
Bonsoir,
Donc voila je vais expliquer plus en détail ce que je voudrais faire. J'affiche les résultats de requête sur une base de donées dans un TDrawGrid. Et comme il s'agit d'une CDthèque, cela m'affiche le titre de l'album, la durée, etc... Ce que je voudrais faire c'est pouvoir faire un bouton ou une action me permettant d'ajouter à un panier l'album se trouvant sur la ligne de mon Grid.(Il peut y avoir plusieurs album différents pour une meme groupe d'où la nécessité d'avoir pour chaque ligne la possibilité de mettre le CD au panier.)
Voilà j'espère que je me suis à peu près exprimé clairement de façon à ce que vous compreniez.
Merci à tous.
PS: J'ai lu ton code Cantrelle mais je ne vois pas trop, d'où ce nouveau post et merci à toi.
Salut,
Mais pourquoi n'utilises-tu pas un DBGrid pour afficher le résultat d'une requete ?J'affiche les résultats de requête sur une base de donées dans un TDrawGrid.
@ +
Current StatusAux persévérants aucune route n'est interdite.
Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
Faîtes quelque chose de bien avec vos petits sous: Enfants du MekongAvec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
lol
Parce que je suis pas bon et que je me suis fait aidé par slylafone et que ça marche nikel et que j'ai ce que je veux. Une autre question?? lol. J'ai tout fait à l'ancienne à la main sans utiliser le module de BD de BCB.
Je comprends mieux comme ça. Bref maintenant c'est fait je vais pas me retaper les 3/4 de la programmation que j'ai faite sinon je pete un cable( j'ai déjà précisé que j'étais mauvais )
Voilà c'est tout.
PS: j'utilise sqlite c'est aussi pour ça
Bonsoir,
Tu peut éventuellement essayer ceci :
avec dans le .H:
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 void __fastcall TForm2::Button13Click(TObject *Sender) { Form2->DrawGrid1->ControlStyle << csAcceptsControls; TButton *pBtton = new TButton(Form2->DrawGrid1); pBtton->Parent = Form2->DrawGrid1; pBtton->Caption = "Essai"; pBtton->OnClick = pBttonClick; } //--------------------------------------------------------------------------- void __fastcall TForm2::pBttonClick(TObject* Sender) { ShowMessage(((TButton *)Sender)->Name); } //---------------------------------------------------------------------------
Cela place un TButton dans un TDrawGrid mais.....l'évènement Onclick() ainsi désigné ne réagis pas et - je suis peut etre passé a côté de qqchose - je n'ai toujours pas trouvé pourquoi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void __fastcall pBttonClick(TObject* Sender);
Ne m'oublies pas si jamais tu obtiens la solution
C'est pour cela que je t'avais posté un code qui dessine des boutons soit enfoncés soit relevés (images stockées dans un TImageList), et qu'avec cela en gérant l'évènement OnSelectCell tu aurais pu essayer de redessiner le bon bouton et d'appliquer les actions nécéssaires pour garnir ton panier...
@ +
Current StatusAux persévérants aucune route n'est interdite.
Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
Faîtes quelque chose de bien avec vos petits sous: Enfants du MekongAvec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
Je voulais essayer de faire quelquechose dans ce style:Mais il me sort que Button1 n'est pas défini, je l'ai quand meme mis dans mon TForm alors je comprends pas.(je suis naif )J'ai aussi #include mon TForm.h mais c'est toujours pas défini.
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 while (result == SQLITE_ROW) { AnsiString *pA = new AnsiString[mFieldCount]; for (i=0; i<mFieldCount-1; i++) { pA[i] = AnsiString((char *) sqlite3_column_text(pStmt, i)); } //result = sqlite3_step(pStmt); for(i=mFieldCount-1;i<mFieldCount;i++) { TButton *pA; pA[i]=*Button1; } mpResults->Add(pA); result = sqlite3_step(pStmt); }
Sinon merci pour ta recherche sur mon bouton. Si ta une idée sur ce que j'ai mis et comment la corrigée je suis preneur. Et pis je vais quand meme regarder ce que tu m'as mis.
Iop,
j'ai essayé ta méthode et je ne comprends pas non plus pourquoi sur le onclick rien ne se passe.tout semble pourtant bon. Je m'interesse donc à ta méthode de près. Faut juste que je trouve ensuite comment mettre le bouton qui apparait à la bonne place dans mon TDrawGrid et que je puisse effectuer quelquechose dessus ensuite.
Voila bonne nuit ami programmeur.(je suppute que tu n'est pas une fille :p d'où pas de "e" à "ami").
Bonsoir Meno,
(codeur nocturne, lol)
Ben déja tu déclares dans la même portée (si j'ai bien compris) :
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2AnsiString *pA //etc, etc
Je ne pense pas que ce soit une bonne idée....Pour créer un nouvel objet, tu dois utiliser l'opérateur new (comme j'ai fais au dessus).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TButton *pA;
Sinon de toutes façons, j'aurais séparé l'écriture des données dans le TDrawGrid de la création des boutons. J'aurais plutôt crée les boutons dans l'évènement OnDrawCell (déclenché par l'ecriture dans les cellules du TDrawGrid), ce qui permet de récupérer par ex les indices ACol et ARow qui permettent de désigner dans quelle cellule dessinner telle ou telle chose (par ex).
Reste le 'petit souci' de l'évènement OnClick suggéré plus haut...
Pour le OnSelectCell, un bout de code bricolé pour un test précédent (en partant du principe que les images-boutons etaient déssinées dans la première colonne) :
A revoir et améliorer surement
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 void __fastcall TForm2::StringGrid1SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect) { if (ACol == 0) { TRect pRect = Form2->StringGrid1->CellRect(ACol, ARow); String S = Form2->StringGrid1->Cells[ACol][ARow]; TGridDrawState State; Form1->ImageList1->Draw(Form2->StringGrid1->Canvas,pRect.Left + 9,pRect.Top + 9,8); if (MessageDlg(Ansistring("Inclure ") + S + (" a la liste ?"), mtWarning, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes) { //LA TU FAIS CE QUE TU VEUX } else { State.Clear(); Form2->StringGrid1DrawCell(Form2->StringGrid1, ACol, ARow, pRect, State); } } }
Je n'avais pas vu ton dernier message : bonne nuitée de même Meno
@ +
Current StatusAux persévérants aucune route n'est interdite.
Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
Faîtes quelque chose de bien avec vos petits sous: Enfants du MekongAvec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
Iop je me serai bien servi de ton code pour trouver une astuce la mais erf pas moyen dans les TDrawGrid, il n'y a apparament pas de Cells. ce qui ne me permet pas de selcetionner une cellule en particulier. J'ai essayé de trouver quelquechose qui ressemblait a Cells mais je n'ai rien trouver.
C'est la loose :p
Salut,
Effectivement, j'aurais pas du changer de marque de bière, ca m'éparpille la cervelle...Et puis, c'est vrai d'abord, t'aurais pu choisir un DBGrid (ou un truc comme ca) comme tout le monde pour afficher le résultat d'une requête, tu le fais expres ou quoi ? (lol, je plaisante bien sur ).
Bon et bien de ce fait on ne peut pas récupérer a priori le texte affiché dans la 'Cells'....Mais au moment ou tu renseignes le TDrawGrid, puisque chaque ligne semble correspondre a un CD différent, tu peut stocker au fur et a mesure le nom de chaque CD dans une TStringList.
Comme on peut savoir grace a l'évènement OnSelectCell l'indice de la ligne selectionnée, cet indice peut te servir a désigner un élément de la TStringList et donc récupérer le nom du CD choisi ...et continuer a travailler .
@ +
Current StatusAux persévérants aucune route n'est interdite.
Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
Faîtes quelque chose de bien avec vos petits sous: Enfants du MekongAvec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
Euh tu as pris quoi comme marque de bière?? Parce que ouaouh elle a l'air puissante c'est de la belzébuth??
Bon sinon je peux toujours essayer(je dis bien essayer d'utiliser un DBGRID). Ca me simplifiera peut etre la tache enfin sinon je tiens comte de toutes tes jolies remarques et j'essaie à chaque fois un nouveau truc. La j'ai essayé d'utilisé un TstringGrid mais avec ma liste le résultat est affiché dans mon Grid mais hihi si je cherche à faire un ShowMessage d'une case particuliere et bien ya rien youpi..La je commence vraiment à me perdre dans les méandres du fin fond du c++et de la VCL.
Montres un bout de code au sujet de ce TStringGrid, ca pourra toujours aider...merci.
Current StatusAux persévérants aucune route n'est interdite.
Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
Faîtes quelque chose de bien avec vos petits sous: Enfants du MekongAvec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
Voici Voila aussitot dit aussitot fait.
bref voici un bout de code:et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void __fastcall TForm1::GridDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { AnsiString text; if (ARow > Rechercher.Count()) return; if (ARow == 0) text = Rechercher.GetFieldName(ACol+1); else text = Rechercher.GetField(ARow, ACol+1); Grid->Canvas->TextRect(Rect, Rect.left+4 , Rect.top+4 , text); }
La pour le ShowMessage(S); ben ya rien niet que neni. Et le CanSelect(trouvé grace à laide borland) ne fonctionne pas non plus, ce qui parait logique puisque S="" quelquesoit les valeurs de cellules spécifiées, donc mes cellules sont vide or c'est pas possible vu que j'ai à l'affichage les résultats de ma requête.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void __fastcall TForm1::GridSelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect) { CanSelect=(Grid->Cells[ACol][ARow]=="test"); AnsiString S="hello"; S=Form1->Grid->Cells[ACol][ARow]; ShowMessage(S); }
PS: dsl j'ai mis du temps je cherchais à insérer l'image de ce que j'avais mais j'ai pas trouvé comment faire.
(re)Salut,
Bon, déja toutes mes excuses, je ne comprends pas d'ailleurs mais j'ai le même phénomène...Bon si on reste sur le TDrawGrid et le coup de la TStringList :
Avec dans le .H:
et avant le chargement de la grille :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TStringList *pList;
Puis :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 pList = new TStringList();
et
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 void __fastcall TForm2::DrawGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { // if (ACol == 1 && ARow > 0) { DrawGrid1->Canvas->Brush->Color = clInfoBk; DrawGrid1->Canvas->FillRect(Rect); Form1->ImageList1->Draw(DrawGrid1->Canvas,Rect.Left + 9,Rect.Top + 9,7); DrawGrid1->Canvas->Font->Color = clRed; DrawGrid1->Canvas->TextOutA(Rect.Left + 4, Rect.Top + 1, AnsiString("Disque ") + ARow); pList->Add(AnsiString("Disque ") + ARow); } }
@ +
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void __fastcall TForm2::DrawGrid1SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect) { if (ACol == 1 && ARow > 0 ) { ShowMessage(pList->Strings[ARow - 1]); } }
Current StatusAux persévérants aucune route n'est interdite.
Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
Faîtes quelque chose de bien avec vos petits sous: Enfants du MekongAvec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
Re iop,
Alors soit je suis fou soit tu viens de poster. lol je dis ca parce que je voyais pas qu'on était déjà à la deuxieme page et que j'actualisais la première depuis que j'ai posté. Je vais essayer le coup de la TList.. Cela me semble etre une bonne alternative.En tout cas merci.
Euh, si je suis bien ton code làtu utilises toujours ta liste d'image dans la première colonne c'est cela non?Bon je vais aller manger après j'essaie. à toute et encore comme toujours merci
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 TForm2::DrawGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { // if (ACol == 1 && ARow > 0) { DrawGrid1->Canvas->Brush->Color = clInfoBk; DrawGrid1->Canvas->FillRect(Rect); [u]Form1->ImageList1->Draw(DrawGrid1->Canvas,Rect.Left + 9,Rect.Top + 9,7); [/u] DrawGrid1->Canvas->Font->Color = clRed; DrawGrid1->Canvas->TextOutA(Rect.Left + 4, Rect.Top + 1, AnsiString("Disque ") + ARow); pList->Add(AnsiString("Disque ") + ARow); } }
Ben c'est juste une proposition pour le test comme ca...après tu fais ce que tu veut bien entendu.
tu utilises toujours ta liste d'image dans la première colonne c'est cela non?
Bon app, @ +
Current StatusAux persévérants aucune route n'est interdite.
Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
Faîtes quelque chose de bien avec vos petits sous: Enfants du MekongAvec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
Iop,
Je crois ta pas besoin de rechercher un cerveau de programmeur mon Gars. Ton truc c'est parfait. J'ai modifié quelques petites choses pour que ça marche comme je voulais mais la je te remercie énormément du fond du coeur. J'aurai passé3jours dessus avec toi mais ça valait le coup. Bref maintenant juste une petite fonction à faire et hop.(Petite fonction qui va bien me prendre la tete je pense).
Bref quand mon projet sera fini je te l'enverrai comme ça tu pourras regarder en quoi tu m'as aidé (enfin si ça t'intéresse) . Et puis voilà je te montre un peu ce que j'ai mis mais merci merci merci. Et pis le noctambule c'est pas que moi . Je te proposerai bien de venir boire une biere chez moi mais je suis pas sur que ça le fasse pour toi, tu dois pas etre bien à coté. Ta le choix, Le Mans ou Cluny
Bon ben bonne soirée. Pour ce soir ça m'ira demain je me tente la fonction qui permet de rajouter l'article au panier.
Encore Merci,
Et surtout Bonne nuitée AMI programmeur (je pense que je suis nul en C++ mais ce projet va me faire bien avancer dans mon niveau).et
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 void __fastcall TForm1::GridDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { AnsiString text; pList=new TStringList(); if (ARow > Rechercher.Count()) return; if (ARow == 0) text = Rechercher.GetFieldName(ACol+1); else text = Rechercher.GetField(ARow, ACol+1); Grid->Canvas->TextRect(Rect, Rect.left+4 , Rect.top+4 , text); if(ACol==3&&ARow>0) { Grid->Canvas->Brush->Color = clInfoBk; Grid->Canvas->FillRect(Rect); Grid->Canvas->Font->Color = clRed; Grid->Canvas->TextOutA(Rect.Left + 4, Rect.Top + 1, AnsiString("ajouter")); for(int i=0;i<ARow;i++) { pList->Add(AnsiString("Disque ") + (i+1)); } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void __fastcall TForm1::GridSelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect) { if (ACol == 3 && ARow > 0 ) { ShowMessage(pList->Strings[ARow - 1]); } }
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