1 pièce(s) jointe(s)
[2.2.4] Besoin d'explication et d'aide à propos du TComponent et de sa destruction
Bonjour,
dans l'aide à propos de cette chose, je peux lire
Citation:
Envoyé par aide Lazarus
TComponent introduces a form of automatic memory management: When a component is destroyed, all its child components will be destroyed first.
Bien.
En plus on peut le demander gentiment :
MonComposant.DestroyComponents;
Citation:
Envoyé par aide Lazarus
Destroy child components.
Et moi pour assurer le coup, j'utilise les deux :
Code:
1 2
| MonComposant.DestroyComponents;
MonComposant.Free; |
Mais quand je recrée MonComposant, je me fais envoyer sur les roses parce que les sous-composants existent déjà et ça me parle de duplicate name et moi je ne comprends pas que je puisse avoir quelque part en mémoire le nom de sous-composants dont le parent a été détruit et ses enfants avec lui.
Ou alors c'est que le boulot est mal fait ?, ce que je pense de + en +, regardez, dans une boucle, je fais
Code:
1 2 3 4
| showmessage('thisobject + i + cc '+thisobject.Name +' '+inttostr(i)+' '+inttostr(ComponentCount));
thisobject.DestroyComponents;
Application.ProcessMessages;
showmessage('thisobject + i + cc '+thisobject.Name +' '+inttostr(i)+' '+inttostr(ComponentCount)); |
et comme il n'y a qu'un composant, i est à 0, et les components, euh, mais je vous laisse regarder les résultats :
Code:
1 2 3 4
| retour de SM : 'thisobject i + cc pnlhosting0 0 40'
thisobject.DestroyComponents;
Application.ProcessMessages;
retour de SM : 'thisobject i + cc pnlhosting0 0 40' <-- et toujours 40 ! |
40 c'est 12 sub-composants par panel + les 3 panels eux-mêmes + 1 sur-panel pour emballer tout ça, soit 12x3 + 3 + 1 = 40
Et donc si 40 est renvoyé, c'est ça signifie que rien n'est détruit !
J'ai même essayé avec
Code:
1 2 3
| (pnlCentre.Controls[i] as TPanelex).DestroyComponents;
Application.ProcessMessages;
retour de showmessage : 'thisobject i + cc pnlhosting0 0 40' <-- et toujours 40 ! |
Alors leur DestroyComponents, je ris...
Mais jaune puisqu'après je me prends une erreur "A component named "pnlinfos0" already exists" et le programme se vautre...
Et aussi, on ne nous dit pas dans l'aide certains comportements qui se rencontrent IRL, par exemple ce TPanel gris argent posé en mode design en bas à droite d'une fiche
Pièce jointe 628112
et dont je ne sais pas d'où il tire cette couleur puisqu'il est configuré avec Color = clDefaut (= gris clair, pas celui qu'on voit là), BevelColor = clDefault, ParentColor = False et ParentBackGround = False.
Alors ça, plus le coup de la hauteur pas ou mal prise en compte (vu il y a deux ou trois jours) plus les destructions pas faites, je trouve que c'est normal que je passe des semaines pour faire des choses qui devraient être réglées en deux jours...
Jusqu'à ce que j'abandonne, parce que si je ne peux pas supprimer les objets créés dynamiquement, mon prog est bon pour la poubelle.
Une idée ?