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...
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.![]()
@ +![]()
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...
@ +![]()
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
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); })J'ai aussi #include mon TForm.h mais c'est toujours pas d�fini.
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
@ +![]()
Iop je me serai bien servi de ton code pour trouver une astuce la mais erf pas moyendans 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 .
@ +![]()
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.
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]); } }![]()
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, @ +
![]()
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]); } }
Partager