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 :

Un Sender peut-il s'auto-détruire lors d'un onClick? [FAQ]


Sujet :

C++Builder

  1. #1
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut Un Sender peut-il s'auto-détruire lors d'un onClick?
    Bonjour, j'ai fait un tableau de TImage alloué dynamiquement (new) qui appartiennent à un tableau de TPanel alloué de la même façon (dans le style acdsee).

    J'ai mis pour les TImages dans le onClick une fonction qui est sensé détruire (delete) toutes les images du tableau ainsi que tous les panels.

    Or en fait, j'ai l'impression que je n'ai pas le droit de détruire le Sender qui appelle ma fonction par le onClick. Je n'ai pas le droit de détruire l'image sur laquelle j'ai cliqué (ou à partir de laquelle j'ai appelé l'évenement onClick). Il en est de même pour le panel. Tous mes panels sont détruits sauf celui auquel appartient l'image.

    Et j'ai droit à un gros message d'erreur.

    Ma question est: A-t-on le droit de détruire le sender d'un évenement onClick par cet évênement ? Sinon comment contourné le pb ? Comment détruire l'image Sender par le onClick ?

    Merci. Flo.

  2. #2
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Vous ne pouvez effectivement pas détruire l'objet par le sender, c'est une erreur dite abstraite. Une méthode de classe ne peut pas détuire la classe dont elle est méthode, la destruction doit toujours s'opérer à l'extérieur de la classe. C'est pourquoi, quand vous fermez une fenêtre créée dynamiquement, l'événement OnClose se programme ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm1::Close(TObject *Sender, TCloseAction &Action)
    {
    Action=caFree;
    }
    On libère ainsi la mémoire mais cela ne se passe pas dans la méthode elle-même.

    Pour résoudre votre problème vous pouvez mettre vos panels et images dans une fenêtre enfant, la fenêtre sera alors propriétaire de tous ces élements et au moment du click pour tout détruire, vous vous branchez au OnClose de la fenêtre enfant, ce qui aura pour effet de tout libérer car la fenêtre détruira elle-même les composants dont elle est propriétaire.

    En général, on ne détruit pas les éléments pour cette raison à savoir que l'autodestruction est impossible mais on joue simplement sur leur visibilité, on les efface simplement de l'écran en les rendant invisibles mais ils restent en mémoire. Ils seront alors détruits à la fin de l'application.

    À bientôt
    Gilles

  3. #3
    Membre averti Avatar de Flo.
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2002
    Messages : 379
    Points : 404
    Points
    404
    Par défaut
    Excellent, merci beaucoup, l'idée est vraiment excellente. Je parle de la fenetre enfant : ça va vraiment resoudre mon probleme.

    Merci encore. Flo.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] auto-incrément lors de la création d'une table
    Par _MattU_ dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/11/2008, 23h37
  2. Réponses: 6
    Dernier message: 10/06/2008, 16h55
  3. Réponses: 13
    Dernier message: 14/05/2008, 16h22
  4. Un contrôle visuel peut-il s'auto-détruire
    Par jcs2 dans le forum Delphi
    Réponses: 3
    Dernier message: 07/05/2007, 14h37
  5. [MySQL] Obtenir la valeur de l'auto-increment lors d'une insertion
    Par yazerty dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 08/01/2006, 15h18

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