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.