Bonjour,
J’utilise actuellement C++ Builder version 5.
Suite à différentes recherches et différents tests je me permets de venir vous poser mes questions ici.

J’effectue actuellement une application nécessitant un StringGrid.
Au sein de celui-ci j’affiche des images à l’aide de Canvas et d’image enregistré en bitmap sur chacune des cellules.

Mon problème est que le chargement de mon image se fait au sein de mon StringGrid1DrawCell. Ce qui fait qu’au bout d’un moment j’ai un problème avec la taille mémoire.
(Je peux effectuer un zoom sur ma StringGrid et j'ai alors accès à la ScrollBar mais celle-ci actualise à chaque fois les images).

J'ai donc essayé:
- De fixer les colonnes et les lignes, solution qui semble fonctionner mais si je zoom je n'ai plus l'accès à ma scrollbar.
- De définir mes images à d'autres endroits mais on me dit qu'elles ne sont pas définis si je fais ainsi.
- De delete complètement la stringgrid mais cela ne libère pas de la mémoire.
- Mettre une condition dans mon DrawCell pour passer une fois dans la déclaration et ne plus y passer par la suite mais sans succès.
- De définir mes images dans un autre .h

J'ai l'impression que mes images ne sont pas supprimés à chaque fois et s'accumule. Si mes lignes et colonne ne sont pas fixé et si je clique par exemple sur ma cellule [40][40] Je recharge toutes les cellules jusqu'à [40][40].

Voilà le code de mon 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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int Col,
      int Row, TRect &Rect, TGridDrawState State)
{
        Graphics::TBitmap *GreenLightBmp = new Graphics::TBitmap;
        GreenLightBmp->LoadFromFile("GreenLight.bmp" );
        //Image par défault du bouton vert
 
        Graphics::TBitmap *GreenLightBmpX2 = new Graphics::TBitmap;
        GreenLightBmpX2->LoadFromFile("GreenLightBmpX2.bmp" );
        //Image par défault du bouton vert en zoom 2
 
        Graphics::TBitmap *GreenLightBmpdiv2 = new Graphics::TBitmap;
        GreenLightBmpdiv2->LoadFromFile("GreenLightBmpdiv2.bmp" );
        //Image par défault du bouton vert en zoom 4
 
        Graphics::TBitmap *GreenLightBmpdiv4 = new Graphics::TBitmap;
        GreenLightBmpdiv4->LoadFromFile("GreenLightBmpdiv4.bmp" );
        //Image par défault du bouton vert en zoom 5
 
 
        Graphics::TBitmap *BlankBmp = new Graphics::TBitmap;
        BlankBmp->LoadFromFile("Blank.bmp");
        //Image par défault du bouton gris
 
        Graphics::TBitmap *BlankX2 = new Graphics::TBitmap;
        BlankX2->LoadFromFile("BlankX2.bmp");
        //Image par défault du bouton gris  X2
 
        drawtest++;
        Label3->Caption=drawtest;  //Compteur et affichage de ce dernier
 
 
 
    if ( Col == 0 || Row == 0 ) return;  //On ne veut pas toucher à la première colonne ou à la première ligne.
 
    if ( StringGrid1->Cells[Col][Row]!=0)//.ToInt() != 0 )
    //Si on est pas = 0 en dehors de col=0 et row=0 on draw un bouton vert.
    {
        if (Col<=maxcolonne)
        {
            if (origine==3)
            {
                StringGrid1->Canvas->Draw(Rect.Left, Rect.Top,GreenLightBmp);
            }
            else
            {
                if(origine>3)
                {
                    StringGrid1->Canvas->Draw(Rect.Left, Rect.Top,GreenLightBmpX2);
                }
                else
                {
                    if(origine==2)
                    {
                        StringGrid1->Canvas->Draw(Rect.Left, Rect.Top,GreenLightBmpdiv2);
                    }
                    else
                    {
                        StringGrid1->Canvas->Draw(Rect.Left, Rect.Top,GreenLightBmpdiv4);
                    }
                }
            }
        }
    }
    else
    {
        if(origine>3)
        {
            StringGrid1->Canvas->Draw(Rect.Left, Rect.Top, BlankX2 );
        }
        else
        {
            StringGrid1->Canvas->Draw(Rect.Left, Rect.Top, BlankBmp );
        }
    }
 
delete BlankBmp;
delete BlankX2;
delete GreenLightBmpdiv4;
delete GreenLightBmpdiv2;
delete GreenLightBmpX2;
delete GreenLightBmp;
}


Je vous remercie d'avoir lu. Si vous avez besoin d'informations complémentaires il n y a pas de problème.