Détruire une TFrame [delphi] - Delphi/Pascal - Programmation
Marsh Posté le 03-08-2004 à 15:17:24
déjà la récupération de l'AccessViolation en douce c'est un signe de code crado
t'en fais quoi de ce a_detruire ?
Marsh Posté le 03-08-2004 à 15:20:10
Puis c'est normal que ça plante, tu ne peux pas détruire un objet dans le code d'un de ses objets (ici le clic d'un bouton de la frame).
C'est la form qui doit détruire la frame, la frame ne peut pas se détruire elle-même (seules les forms peuvent faire ça, grâce à leur méthode Release).
Que ça plante ou pas selon que tu mettes cette ligne en commentaire ou non ça ressemble plus à un coup de bol et au hasard des optimisations du compilateur.
Marsh Posté le 03-08-2004 à 23:17:02
Le coup du a_detruie c'est un pur hasard. J'avais tenté un truc du genre quand on appuie sur le bouton annuler on met dans a_detruire le nunero de composant de la frame.
Puis dans un un certain evenements de la fiche principale on regarde si la string est vide, si non on enleve les composants qui vont bien.
Et oui à ce moment là j'étais vraiment désespéré...
Je suis tout à fait conscient que là c'est pas du code joli, joli.
Je vais me repencher sur le probleme et tacher de trouver une autre solution
Marsh Posté le 03-08-2004 à 14:57:35
Salut,
J'ai une application avec une fiche principale et je rentre dynamiquement des TFrame qu'en bon me chante et où je veux.
Viens le moment de détruire la TFrame et là j'ai tourné en rond un bon moment puis ô miracle ca marche.
Mais la raison est plus que magique.
J'ai donc fait une autre petite application pour illustrer le problème:
D'abord je plante le décor avec la fiche principale
Puis ma TFrame:
C'est ici que s'opère la magie:
procedure TFrame1.Button1Click(Sender: TObject);
begin
form_pricipale.a_detruire := inttostr(self.ComponentIndex);
try
free
except
on EAccessViolation do begin end;
end;
form_pricipale.update_memo;
exit;
end;
Il suffit que je passe cette ligne "form_pricipale.a_detruire := inttostr(self.ComponentIndex);" en commentaire et hop une jolie erreur pointe le bout de son nez.
Si quelqu'un peut m'expliquer le pourquoi du comment ou peut me proposer une autre méthode pour détruire mes TFrame...
Merci
Message édité par tropicano le 03-08-2004 à 15:00:08