IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

StringGrid et image


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    D�cembre 2002
    Messages
    45
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2002
    Messages : 45
    Par d�faut StringGrid et image
    Bonjour,

    J'ai un probl�me avec une TStringGrid. Je construit dynamiquement une image dans celle-ci. J'ai besoin de g�rer le clic sur cette image pour la faire disparaitre.
    Plus concretement :
    Je cr�e mon image
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    TImage* CleBox=new TImage(StringGrid1);
    CleBox->Parent=StringGrid1;
    CleBox->Picture->LoadFromFile("images\\ok.bmp");
    StringGrid1->Objects[ACol][ARow]=CleBox;
    StringGrid1DrawCell(Sender, ACol,ARow, StringGrid1->CellRect(ACol,ARow),TGridDrawState());
          CleBox->OnClick = ImageOnClick;
    J'ai ma fonction du traitement du click
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    void __fastcall TForm2::ImageOnClick(TObject *Sender)
    {
      int Col, Row;
      StringGrid1->MouseToCell(((TImage*)Sender)->Left, ((TImage*)Sender)->Top, Col, Row);
      StringGrid1SelectCell(Sender, Col, Row, true);
    }
    Puis dans StringGrid1SelectCell (donc je simule une selection de la case avec un click sur l'image)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     delete StringGrid1->Objects[ACol][ARow];
    StringGrid1->Objects[ACol][ARow]=NULL;
    Puis la je me retrouve avec une violation de m�moire ...

    Quelqu'un sait d'ou cela peut venir ?

    Merci d'avance

  2. #2
    Membre averti
    Inscrit en
    D�cembre 2002
    Messages
    45
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2002
    Messages : 45
    Par d�faut
    Bon ben tan pis ....

    le probleme vient de la :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    CleBox->OnClick = ImageOnClick;
    Le fait que j'associe cette image � une fonction puis que je d�truise l'image provoque une erreur ...
    Je n'ai pas trouv� comment r�soudre le probl�me, si quelqu'un a une id�e ... je suis preneur !

    Merci d'avance !

  3. #3
    JEG
    JEG est d�connect�
    Membre chevronn�
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Par d�faut
    je ne pense pas que ca soit ca.... mais du fait que tu d�truit l'image.

    en effet � la cr�ation de ton TImage, tu sp�cifie que StringGrid1 est responsable de sa lib�ration, (en le passant dasn le constructeur), donc quand tu fais un "delete CleBox", tu supprimes une premi�re fois l'image ok, mais ensuite StringGrid supprimera lui aussi cleBox, et ca ca fait planter l'application

  4. #4
    Membre averti
    Inscrit en
    D�cembre 2002
    Messages
    45
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2002
    Messages : 45
    Par d�faut
    Oui, mais lorsque je vide entierement le StringGrid (bouton effacer de mon appli), je d�truit toutes les images grace � un delete ... et la pas d'erreur ...
    Ou j'ai peu etre mal compris ce que tu voulais dire :

  5. #5
    JEG
    JEG est d�connect�
    Membre chevronn�
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Par d�faut
    disons que ca peut tres bien marcher aujourd'hui et sur ta machine...
    les erreurs m�moires donnent souvent l'impression d'etre al�atoires, de marcher certaines fois et pas d'autres, et il y a tres souvent derri�re un probl�mes de double delete, de pointeur qui est pass� � NULL, etc...

    dans ton cas, ton appli plantera � un moment ou � un autre � cause de cette erreur de double d�sallocation, et il t'indiquera l'erreur � un autre endroit

  6. #6
    Membre averti
    Inscrit en
    D�cembre 2002
    Messages
    45
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2002
    Messages : 45
    Par d�faut
    beh je croise les doigts alors ....
    je vais quand meme tester de faire un delete de la case de ma StringGrid apr�s avoir fait un delete de mon objet image ....
    Je vous tiens au courant ...

  7. #7
    JEG
    JEG est d�connect�
    Membre chevronn�
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Par d�faut
    Je vais t'�crire ce que je pense mieux marcher, (mais bon faudra tester)

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    TImage* CleBox=new TImage(NULL); 
    CleBox->Parent=StringGrid1; 
    CleBox->Picture->LoadFromFile("images\\ok.bmp"); 
    StringGrid1->Objects[ACol][ARow]=CleBox; 
    StringGrid1DrawCell(Sender, ACol,ARow, StringGrid1->CellRect(ACol,ARow),TGridDrawState()); 
    ((TImage *)(StringGrid1->Objects[ACol][ARow]))->OnClick = ImageOnClick;
    le reste ne change pas

  8. #8
    Membre averti
    Inscrit en
    D�cembre 2002
    Messages
    45
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2002
    Messages : 45
    Par d�faut
    YAHOOO .... merci beaucoup

    Ca marche nikel .... encore merci

  9. #9
    Membre averti
    Inscrit en
    D�cembre 2002
    Messages
    45
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2002
    Messages : 45
    Par d�faut
    J'ai parl� un peu vite .... lors du
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    delete StringGrid1->Objects[ACol][ARow]; 
    StringGrid1->Objects[ACol][ARow]=NULL;
    Une "erreur abstraite est lev�e ....

    Une id�e ?

  10. #10
    JEG
    JEG est d�connect�
    Membre chevronn�
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Par d�faut
    erreur abstraite ???
    heu l� je ne vois pas

    mais attention quand tu fais le delete, il faut etre sur que le stringrid n'est pas en train d'etre redessin�.

  11. #11
    Membre averti
    Inscrit en
    D�cembre 2002
    Messages
    45
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2002
    Messages : 45
    Par d�faut
    J'en sait rien pour tout dire .... je pense que non, il n'est pas en train d'etre redessiner ... mais je ne pourrais pas l'affirmer !
    L'erreur lev�e est al�atoire : "erreur abstraite" ou "violation acc�s" ...

    .... jvai devoir rester sur mon ancienne methode je croi ... clicker � cot� de l'image .... tan pis !

    Merci beaucoup a toi JEG en tout cas !

  12. #12
    JEG
    JEG est d�connect�
    Membre chevronn�
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Par d�faut
    essaye avec ceci

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    if (StringGrid1->Objects[ACol][ARow])    delete StringGrid1->Objects[ACol][ARow];
    StringGrid1->Objects[ACol][ARow]=NULL;
    ca permet de ne pas supprimer l'image deux fois de suite

  13. #13
    Membre averti
    Inscrit en
    D�cembre 2002
    Messages
    45
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2002
    Messages : 45
    Par d�faut
    Beh la il ne fait meme plus le delete ..... la condition n'est pas verifi�e :
    j'avais ca avant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    if (StringGrid1->Objects[ACol][ARow] != NULL) {
    delete StringGrid1->Objects[ACol][ARow]; 
    StringGrid1->Objects[ACol][ARow]=NULL;
    }
    ... si j'utilise le debugger ... le delete est bien fait .... puis a un moment ... "erreur abstraite" .... je pige plus la ... enfin ... tan pis
    pourtant dans ma StringGrid(derniere case de la ligne) j'ai une image qui sert a effacer toutes les autres .... j'utilise le code que tu ma donn� ... ca marche nikel ....

    Merci

  14. #14
    JEG
    JEG est d�connect�
    Membre chevronn�
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Par d�faut
    Bon ben je n'ai plus d'id�es, si ca marche et que ca te convient c'es tl princpal :)
    Bon courage pour la suite

  15. #15
    Membre averti
    Inscrit en
    D�cembre 2002
    Messages
    45
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2002
    Messages : 45
    Par d�faut
    En tout cas merci beaucoup pour ton aide !

    Si quelqu'un � une id�e, je suis toujours preneur ...

    Merci JEG, bonne continuation

  16. #16
    Membre averti
    Inscrit en
    D�cembre 2002
    Messages
    45
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2002
    Messages : 45
    Par d�faut
    Je continu a chercher mais rien a faire .... une suggestion ?

    Merci

  17. #17
    Nouveau candidat au Club
    Inscrit en
    Novembre 2003
    Messages
    2
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 2
    Par d�faut
    Excuse moi d'avance, mais je ne suis pas en mesure de t'aider... comme le sujet m'int�resse, je me permets quand m�me de poser une question. J'ai utilis� le code suivant :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    TImage* Image1=new TImage(StringGrid1); 
    Image1->Parent=StringGrid1; 
    Image1->Picture->LoadFromFile("images/rond.bmp");
    Image1->Transparent = true;
    StringGrid1->Objects[1][3]=Image1; 
    StringGrid1DrawCell(Sender, 1,3, StringGrid1->CellRect(1,3),TGridDrawState());
    Le but �tait d'afficher une image dans une cellule de ma grille, mais le r�sultat ne correspond pas vraiment... l'image est bien cr��e, mais elle est affich�e en haut � gauche de la StringGrid.
    Est-ce qu'il est possible d'afficher une image dans une cellule de StringGrid?

    Merci d'avance

    Audrey

  18. #18
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    169
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 169
    Par d�faut
    Bonjour,

    tu as mis koi dans:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    StringGrid1DrawCell(Sender, 1,3, StringGrid1->CellRect(1,3),TGridDrawState());
    ????

  19. #19
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    169
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 169
    Par d�faut
    Moi j'ai mis �a

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if(ARow>=1 && ACol==3)//Colonne Null
           {
               TImage *NullBox;
               NullBox=(TImage * ) strgCol->Objects[ACol][ARow];
               NullBox->Left=Rect.Left+20;
               NullBox->Top=Rect.Top+2;
               NullBox->Width=Rect.Width();
               NullBox->Height=Rect.Height();
               NullBox->Show();
           }

  20. #20
    Membre averti
    Inscrit en
    D�cembre 2002
    Messages
    45
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2002
    Messages : 45
    Par d�faut
    Et en essayant ca :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
    TImage* Image1=new TImage(NULL); 
    Image1->Parent=StringGrid1; 
    Image1->Picture->LoadFromFile("images/rond.bmp");
    Image1->Transparent = true;
    StringGrid1->Objects[1][3]=Image1; 
    StringGrid1DrawCell(Sender, 1,3, StringGrid1->CellRect(1,3),TGridDrawState());
    ??

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

Discussions similaires

  1. ins�rer image dans une ou plusieurs cellules d'une stringgrid
    Par casse-t�te dans le forum Composants VCL
    R�ponses: 2
    Dernier message: 05/05/2014, 18h45
  2. R�ponses: 8
    Dernier message: 14/04/2013, 10h43
  3. R�ponses: 2
    Dernier message: 10/05/2012, 11h14
  4. Image de fond StringGrid
    Par Albat_r dans le forum C++Builder
    R�ponses: 7
    Dernier message: 25/04/2006, 17h28
  5. Differentes images dans cellules d'une StringGrid
    Par gazier20 dans le forum Composants VCL
    R�ponses: 8
    Dernier message: 23/01/2006, 23h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo