Bonjour,
et bien tout est dans le titre ...
j'ai un composant TStringGrid sur ma Form que je souhaiterai utiliser comme une sorte de journal d'alertes et insérer à l'intérieur d'une cellule une image de type ".ico".
Comment puis je faire ???
Bonjour,
et bien tout est dans le titre ...
j'ai un composant TStringGrid sur ma Form que je souhaiterai utiliser comme une sorte de journal d'alertes et insérer à l'intérieur d'une cellule une image de type ".ico".
Comment puis je faire ???
Salut petitclem
Voici un bout de code qui affiche une image BMP contenue dans un TImage dans chaque cellule d'un STringGrid, a toi de le modifier a ta convenance
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { int i, j, X, Y; TRect R; if(State.Contains(gdFixed)) { // Les cellules fixes sont toujours dessinées en gris StringGrid1->Canvas->Brush->Color = clBtnFace; StringGrid1->Canvas->Brush->Style = bsSolid; StringGrid1->Canvas->FillRect(Rect); } else if(State.Contains(gdSelected)) { // Les cellules sélectionnées sont en bleue StringGrid1->Canvas->Brush->Color = clNavy; StringGrid1->Canvas->Brush->Style = bsSolid; StringGrid1->Canvas->FillRect(Rect); } else { // Recherche de la zone image à copier pour tenir compte des décalages // de la grille en fonction des barres de défilement. X = 0; for(i = StringGrid1->FixedCols + 1; i <= ACol; i++) (X++, StringGrid1->ColWidths [i]); { Y = 0; for(i = StringGrid1->FixedRows + 1; i <= ARow; i++) (Y++, StringGrid1->RowHeights[i]); { R.Left = X; R.Right = X + Rect.Right - Rect.Left; R.Top = Y; R.Bottom = Y + Rect.Bottom - Rect.Top; // Dessin d'une partie de l'image Image1->Visible = false; // D:\\Copie_USB\\Sauvegarde mes documents C\\Mes images\\Massiv10\\Massiv10\\Bitmaps\\Arrow Image1->Picture->Bitmap->LoadFromFile("D:\\Copie_USB\\Sauvegarde mes documents C\\Mes images\\Massiv10\\Massiv10\\Bitmaps\\Arrow\\arcarrow1.bmp"); // "C:\\Documents and Settings\\blondelle\\Mes documents\\Mes images\\Massiv10\\Massiv10\\Bitmaps\\Arrow\\arcarrow1.bmp" StringGrid1->Canvas->CopyRect(Rect, Image1->Picture->Bitmap->Canvas, R); StringGrid1->Canvas->Brush->Style = bsClear; } } } // Sélection de la couleur de texte if(State.Contains(gdSelected)) { SetTextColor(StringGrid1->Canvas->Handle, clWhite); } else { SetTextColor(StringGrid1->Canvas->Handle, clBlack); } // Dessin du texte en utilisant la fonction API DrawText(StringGrid1->Canvas->Handle, (StringGrid1->Cells[ACol][ARow]).c_str(), -1, &Rect, DT_NOPREFIX ); } //---------------------------------------------------------------------------
Merci pour ton aide blondelle !
Ton code fonctionne bien, il remplit mon StringGrid avec l'image mais je n'arrive pas à le modifier pour que ça me mette l'image à l'endroit que je veux (ex: case [1][1]) !!!
Pourrais tu m'expliquer ?
C'est bon, j'ai réussi !!!
Par contre comment centrer l'image ?
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 void __fastcall TFormJournal::StringGridAlertesDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { AnsiString RepertoireApplication = ExtractFilePath(Application->ExeName); AnsiString IconeValider = RepertoireApplication + "IconeValider.bmp"; TImage *Valider = new TImage(0); Valider->Picture->Bitmap->LoadFromFile(IconeValider); StringGridAlertes->Canvas->CopyRect(Rect, Valider->Picture->Bitmap->Canvas, Rect); }
Tu te sert des valeurs de Rect et de ton Image
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 pour recuperer les valeurs xx = Rect.Left; xx = Rect.Right; xx = Rect.Top; xx = Rect.Bottom; pour ecrire les valeurs Rect.Left = ...; Rect.Right = ...; Rect.Top = ...; Rect.Bottom = ...;
OK, merci blondelle.
Je viens de me rendre compte qu'avec le code que j'ai fait, l'image s'affiche toujours sur la case en haut à gauche !!!
Comment puis je définir la case où je veux mettre cette image ???
je reposte le code complet avec la modification, il faudra affiner le testeen fonction de tes besoins, le calcul de la position de l'image est fonction de mes parametres Image Et cellule
Ce qui est modifie est en rouge
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { int i, j, X, Y; TRect R; if(State.Contains(gdFixed)) { // Les cellules fixes sont toujours dessinées en gris StringGrid1->Canvas->Brush->Color = clBtnFace; StringGrid1->Canvas->Brush->Style = bsSolid; StringGrid1->Canvas->FillRect(Rect); } else if(State.Contains(gdSelected)) { // Les cellules sélectionnées sont en bleue StringGrid1->Canvas->Brush->Color = clNavy; StringGrid1->Canvas->Brush->Style = bsSolid; StringGrid1->Canvas->FillRect(Rect); } else { // Recherche de la zone image à copier pour tenir compte des décalages // de la grille en fonction des barres de défilement. //X = 0; //for(i = StringGrid1->FixedCols + 1; i <= ACol; i++) (X++, StringGrid1->ColWidths [i]); //{ //Y = 0; //for(i = StringGrid1->FixedRows + 1; i <= ARow; i++) (Y++, StringGrid1->RowHeights[i]); //{ if( ARow == 2 && ACol == 1) { R.Left = 1; R.Right = 1 + Rect.Right - Rect.Left; R.Top = 1; R.Bottom = 1 + Rect.Bottom - Rect.Top; // Dessin d'une partie de l'image Image1->Visible = false; // D:\\Copie_USB\\Sauvegarde mes documents C\\Mes images\\Massiv10\\Massiv10\\Bitmaps\\Arrow Image1->Picture->Bitmap->LoadFromFile("D:\\Copie_USB\\Sauvegarde mes documents C\\Mes images\\Massiv10\\Massiv10\\Bitmaps\\Arrow\\arcarrow1.bmp"); // "C:\\Documents and Settings\\blondelle\\Mes documents\\Mes images\\Massiv10\\Massiv10\\Bitmaps\\Arrow\\arcarrow1.bmp" StringGrid1->Canvas->CopyRect(Rect, Image1->Picture->Bitmap->Canvas, R); StringGrid1->Canvas->Brush->Style = bsClear; } //} //} } // Sélection de la couleur de texte if(State.Contains(gdSelected)) { SetTextColor(StringGrid1->Canvas->Handle, clWhite); } else { SetTextColor(StringGrid1->Canvas->Handle, clBlack); } // Dessin du texte en utilisant la fonction API DrawText(StringGrid1->Canvas->Handle, (StringGrid1->Cells[ACol][ARow]).c_str(), -1, &Rect, DT_NOPREFIX ); } //---------------------------------------------------------------------------
Merci blondelle pour ton aide car j'ai réussi à insérer une image dans la cellule que je voulais !
Je te sollicite encore pour savoir si tu pouvais m'aider à insérer une checkbox dans une cellule de mon stringgrid.
J'ai essayé en m'inspirant des différents post qui proposaient d'insérer une combobox mais sans succès ...
Alors si quelqu'un pouvait encore me donner un petit coup de pouce !
Peut etre comme ceci pour l'affichage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol, int ARow, bool &CanSelect) { if (ACol == 3 && ARow > 0) { TRect Rect; Rect = StringGrid1->CellRect(3, ARow); CheckBox1->Top = Rect.Top + StringGrid1->Top + CheckBox1->Height; CheckBox1->Left = Rect.Left + StringGrid1->Left + 2; } }
Hello,
En utilisant la même méthode que plus haut, tu peux insérer une image qui représente la checkbox cochée ou décochée suivant le cas...
Si ensuite tu veux gérer le click sur la checkbox, tu vérifies dans l'événement OnClick du TStringGrid la cellule où a eu lieu le clic
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 TCustomGrid* pGrd = (TCustomGrid*)Sender; POINT posSouris = pGrd->ScreenToClient(Mouse->CursorPos); // Ligne/colonne sur laquelle on a cliqué TGridCoord coordGrille = pGrd->MouseCoord(posSouris.x, posSouris.y);
Désolé mais je ne comprend pas du tout comment je dois faire !!!
J'ai essayé l'affichage de blondelle mais sans succès.
Et pour le code de totoche76, je ne le comprend pas ...
Hello,
Tu as réussi à afficher l'icône que tu voulais dans la grille ? Si oui, tu dois assez facilement pouvoir afficher une image qui contiendra soit une case cochée, soit une case décochée.
Dans un deuxième temps, tu pourras gérer le fait de cocher et décocher la case d'un clic de souris.
oui, j'ai réussi à mettre dans la cellule que je voulais la case cochée ou décochée mais je ne sais pas comment gérer le changement d'image avec OnClick lorsque l'on clique dans la cellule de la stringgrid !!!
Hello,
Sur le OnClick de ta grille:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void __fastcall TForm32::vGrd1Click(TObject *Sender) { TCustomGrid* pGrd = (TCustomGrid*)Sender; POINT posSouris = pGrd->ScreenToClient(Mouse->CursorPos); // Ligne/colonne sur laquelle on a cliqué TGridCoord coordGrille = pGrd->MouseCoord(posSouris.x, posSouris.y); // Inverse l'état du Checkbox if (coordGrille.X == XCheckbox && coordGrille.Y == YCheckbox) { etatCheckBox = !etatCheckBox; // Redessine la grille pGrd->Invalidate(); } }
Salut !
Pour récupérer la cellule depuis les coordonnées de la souris, il y a plus simple :
A plus !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { int ACol; int ARow; StringGrid1->MouseToCell(X, Y, ACol, ARow); //StringGrid1->Cells[ACol][ARow] ... }
Merci beaucoup mais je n'y arrive toujours pas ...
Alors voilà, j'ai un stringgrid servant de journal d'alertes avec des lignes qui se rajoutent dynamiquement (la première est fixe et comporte les titres) et 6 colonnes fixes.
je souhaiterai avoir les images checkbox (cochée ou décochée selon le cas) se mettant toujours à la colonne 6.
J'ai fait comme ceci :
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 void __fastcall TFormJournal::StringGridAlertesDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { AnsiString RepertoireApplication = ExtractFilePath(Application->ExeName); AnsiString IconeChecked = RepertoireApplication + "checked.bmp"; AnsiString IconeUnchecked = RepertoireApplication + "unchecked.bmp"; TImage *Checked = new TImage (0); TRect R; if (ARow == 1 && ACol == 5) { R.Left = 0; R.Right = Rect.Right - Rect.Left; R.Top = 0; R.Bottom = Rect.Bottom - Rect.Top; Checked->Picture->Bitmap->LoadFromFile(IconeUnchecked); StringGridAlertes->Canvas->CopyRect(Rect, Checked->Picture->Bitmap->Canvas, R); StringGridAlertes->Canvas->Brush->Style = bsClear; } // Dessin du texte en utilisant la fonction API DrawText(StringGridAlertes->Canvas->Handle, (StringGridAlertes->Cells[ACol][ARow]).c_str(), -1, &Rect, DT_NOPREFIX ); }Au démarrage de ma Form, j'ai mon image checkbox décochée dans la bonne cellule.
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 void __fastcall TFormJournal::StringGridAlertesMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { AnsiString RepertoireApplication = ExtractFilePath(Application->ExeName); AnsiString IconeChecked = RepertoireApplication + "checked.bmp"; AnsiString IconeUnchecked = RepertoireApplication + "unchecked.bmp"; TImage *Checked = new TImage (0); Checked->Picture->Bitmap->LoadFromFile(IconeChecked); int ACol; int ARow; StringGridAlertes->MouseToCell(X, Y, ACol, ARow); StringGridAlertes->Cells[ACol][ARow] = IconeChecked; }
mais lorsque je clique sur cette cellule (et même dans toutes les cellules ... ) ça m'affiche le chemin où se trouve l'image de ma checkbox cochée !!!!!
Je ne vois vraiment pas comment me dépatouiller ... blasé !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int ACol; int ARow; StringGridAlertes->MouseToCell(X, Y, ACol, ARow); StringGridAlertes->Cells[ACol][ARow] = IconeChecked;Normal, non ?? Qu'est-ce que tu en penses ?????mais lorsque je clique sur cette cellule (et même dans toutes les cellules ... ) ça m'affiche le chemin où se trouve l'image de ma checkbox cochée !!!!!
Dans le constructeur de ta fenêtre, initialisation:Dans le DrawCell:
Code : Sélectionner tout - Visualiser dans une fenêtre à part StringGridAlertes->Objects[5][1] = false;Dans le MouseDown:
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 void __fastcall TFormJournal::StringGridAlertesDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { AnsiString RepertoireApplication = ExtractFilePath(Application->ExeName); AnsiString IconeChecked = RepertoireApplication + "checked.bmp"; AnsiString IconeUnchecked = RepertoireApplication + "unchecked.bmp"; TImage *Checked = new TImage (NULL); TRect R; if (ARow == 1 && ACol == 5) { R.Left = 0; R.Right = Rect.Right - Rect.Left; R.Top = 0; R.Bottom = Rect.Bottom - Rect.Top; if (StringGridAlertes->Objects[ACol][ARow] == false) Checked->Picture->Bitmap->LoadFromFile(IconeUnchecked); else Checked->Picture->Bitmap->LoadFromFile(IconeChecked); StringGridAlertes->Canvas->CopyRect(Rect, Checked->Picture->Bitmap->Canvas, R); StringGridAlertes->Canvas->Brush->Style = bsClear; } // Dessin du texte en utilisant la fonction API DrawText(StringGridAlertes->Canvas->Handle, (StringGridAlertes->Cells[ACol][ARow]).c_str(), -1, &Rect, DT_NOPREFIX ); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void __fastcall TFormJournal::StringGridAlertesMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { int ACol; int ARow; StringGridAlertes->MouseToCell(X, Y, ACol, ARow); if (ARow == 1 && ACol == 5) StringGridAlertes->Objects[ACol][ARow] = (TObject*)(!StringGridAlertes->Objects[ACol][ARow]); }
Salut !
Quelque chose de simple qui nécessite que les bitmaps soient stockés dans un TImage (Visible sur false) :
A plus !
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
29
30
31
32
33
34
35
36
37
38
39 Graphics::TBitmap *Images[2]; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Images[0] = Image1->Picture->Bitmap; // OFF Images[1] = Image2->Picture->Bitmap; // ON //Initialisation du StringGrid, ici la colonne 4 for(int j = 1; j < StringGrid1->RowCount; j++) { StringGrid1->Cells[4][j] = "0"; // OFF } } void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int Col, int Row, TRect &Rect, TGridDrawState State) { if( (Col == 4) && (Row > 0) ) { int n = StringGrid1->Cells[Col][Row][1] & 1; StringGrid1->Canvas->Draw(Rect.Left+1,Rect.Top+1, Images[n]); } } void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { int ACol; int ARow; StringGrid1->MouseToCell(X,Y, ACol, ARow); if((ACol == 4) && (ARow > 0)) { AnsiString N = StringGrid1->Cells[ACol][ARow]; N[1] = (Byte)( N[1] ^ 1); // flip-flop StringGrid1->Cells[ACol][ARow] = N; } }
Bonjour et merci à tous !
J'ai essayé la solution de Totoche76 et ça fonctionne !!!
J'ai une dernière question à vous poser : à la création de ma Form, je vais lire une valeur booléenne dans un fichier .ini.
Si cette valeur vaut 1 pour la ligne 1 (correspondant à une section), dans ma cellule [0][1] je mets l'icône "Valider" et dans ma cellule [5][1] je mets l'icône "checked", sinon à [0][1] je mets l'icône "Alerte" et à [5][1] l'icône "unchecked".
Mais j'ai l'impression que dans mon traitement, ça ,e prend en compte que la valeur booléenne de la première section et ça s'applique à tout le StringGrid...
Voilà la création de ma Form :
et dans le drawcell :
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 void __fastcall TFormJournal::FormCreate(TObject *Sender) { FormJournal->JvStringGridAlertes->Objects[5][1] = false; FormJournal->JvStringGridAlertes->Cells[0][0] = " Etat"; FormJournal->JvStringGridAlertes->Cells[1][0] = " Date"; FormJournal->JvStringGridAlertes->Cells[2][0] = " Heure"; FormJournal->JvStringGridAlertes->Cells[3][0] = " Seuil Défini"; FormJournal->JvStringGridAlertes->Cells[4][0] = " Dépassement"; FormJournal->JvStringGridAlertes->Cells[5][0] = " Alerte Lue"; AnsiString RepertoireApplication = ExtractFilePath(Application->ExeName); AnsiString IconeValider = RepertoireApplication + "IconeValider.bmp"; AnsiString IconeAlerte = RepertoireApplication + "IconeAlerte.bmp"; AnsiString IconeChecked = RepertoireApplication + "checked.bmp"; AnsiString IconeUnchecked = RepertoireApplication + "unchecked.bmp"; TImage *Checked = new TImage (NULL); AnsiString Journal = RepertoireApplication+"\\Alertes\\16B041.al"; FichierJournal = new TIniFile(Journal); TStringList *ListeJournal = new TStringList(); struct tm *Time; FichierJournal->ReadSections(ListeJournal); for (int i = 0; i < ListeJournal->Count; i++) { //Lecture date et heure time_t DataHeure = StrToInt(FichierJournal->ReadString(ListeJournal->Strings[i] ,"DateHeure",NULL)); Time = localtime(&DataHeure); AnsiString Heure; //Affichage dans le StringGrid FormJournal->JvStringGridAlertes->Cells[1][i+1] = Heure.sprintf("%02d/%02d/%02d", Time->tm_mday, (Time->tm_mon+1) ,(Time->tm_year+1900)); FormJournal->JvStringGridAlertes->Cells[2][i+1] = Heure.sprintf("%02d:%02d:%02d", Time->tm_hour, Time->tm_min, Time->tm_sec); FormJournal->JvStringGridAlertes->Cells[3][i+1] = "pH max : " + FichierJournal->ReadString(ListeJournal->Strings[i] ,"Seuil PH Max", NULL); FormJournal->JvStringGridAlertes->Cells[4][i+1] = FichierJournal->ReadString(ListeJournal->Strings[i] ,"Dépassement", NULL); Result = FichierJournal->ReadBool(ListeJournal->Strings[i], "Alerte", 1); FormJournal->JvStringGridAlertes->RowCount = ListeJournal->Count+1; } delete (ListeJournal); delete (FichierJournal); }
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 void __fastcall TFormJournal::JvStringGridAlertesDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) { AnsiString RepertoireApplication = ExtractFilePath(Application->ExeName); AnsiString IconeValider = RepertoireApplication + "IconeValider.bmp"; AnsiString IconeAlerte = RepertoireApplication + "IconeAlerte.bmp"; AnsiString IconeChecked = RepertoireApplication + "checked.bmp"; AnsiString IconeUnchecked = RepertoireApplication + "unchecked.bmp"; TImage *Checked = new TImage (NULL); TRect R; if (ARow > 0 && ACol == 0) { R.Left = 0; R.Right = Rect.Right - Rect.Left; R.Top = 0; R.Bottom = Rect.Bottom - Rect.Top; if ((JvStringGridAlertes->Objects[ACol][ARow] == false) ) Checked->Picture->Bitmap->LoadFromFile(IconeValider); else Checked->Picture->Bitmap->LoadFromFile(IconeAlerte); JvStringGridAlertes->Canvas->CopyRect(Rect, Checked->Picture->Bitmap->Canvas, R); JvStringGridAlertes->Canvas->Brush->Style = bsClear; } if (ARow > 0 && ACol == 5) { R.Left = 0; R.Right = Rect.Right - Rect.Left; R.Top = 0; R.Bottom = Rect.Bottom - Rect.Top; if (JvStringGridAlertes->Objects[ACol][ARow] == false) Checked->Picture->Bitmap->LoadFromFile(IconeChecked); else Checked->Picture->Bitmap->LoadFromFile(IconeUnchecked); JvStringGridAlertes->Canvas->CopyRect(Rect, Checked->Picture->Bitmap->Canvas, R); JvStringGridAlertes->Canvas->Brush->Style = bsClear; } // Dessin du texte en utilisant la fonction API DrawText(JvStringGridAlertes->Canvas->Handle, (JvStringGridAlertes->Cells[ACol][ARow]).c_str(), 0, &Rect, DT_NOPREFIX ); }
Question: que fais-tu de ta variable Result dans le constructeur ?? A quel moment affectes-tu la bonne valeur à Objects[][] ??
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