begin process at 2010 02 10 13:43:51
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Système

 > 

Mémoire

 > 

effacer un composant crée dynamiquement


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

effacer un composant crée dynamiquement

vendredi 27 avril 2007 à 11:39:38 | effacer un composant crée dynamiquement

fidji

Bonjour, J'ai un problème lié à la construction et destructions de composants dynamiquement.

Lorsque je veux détruire le composant crée dynamiquement self.destroy, il veut terminer la procédure appelée (passer sur le end; de la procédure qui appel la fermeture du composant).
Mais vu qu'il a été détruit il me crée une erreur d'accès à la mémoire...

Alors je sais que c'est possible car si je crée une form dynamiquement et que je la quitte avec la croix Windows [x] ça marche à tout les coups et sans erreurs.
Mais si je clique sur un bouton contenant formDynamique.close; il me ferme la form et me génère une erreur lorsqu'il revient sur le END; du bouton (qui a été supprimé en même temps que la form).

Nb: que je n'ai qu'un message d'erreur (impossible à récupérer avec un try vu sa position?) et que cela n'altère pas le fonctionnement du programme.

Toute proposition est bienvenue.

procedure TfrmMenu.bbtnCreationClick(Sender: TObject);
begin
frmCreation := TfrmCreation.Create(self); <-- 1
frmCreation.show;
self.Hide;
end;

procedure TfrmCreation.fraMenubbtnMenuClick(Sender: TObject);
begin
frmMenu.show;
self.destroy; // self.close;<-- 2 (si self.close) il passe par form.close et plante aussi en n°3
end;<-- 3 (Plantage)

OU

procedure TfrmCreation.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
frmMenu.show;
self.Destroy; <--2
end;<-- OK

MERCI d'avance

vendredi 27 avril 2007 à 12:03:01 | Re : effacer un composant crée dynamiquement

japee

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Salut,

Jette un coup d'oeil ici :

Lancer une action en différé

Bonne prog'
vendredi 27 avril 2007 à 12:06:36 | Re : effacer un composant crée dynamiquement

Loda

Membre Club
salut,

tu ne peux pas détruire un compo depuis lui-même (intérieur).

Pour detruire une form lors de sa fermeture, utilise OnClose. Set Action a caFree

et puis, pour la fermer (detruire) utilise "close"
(la lib vas détruire  de manière différée la form)

donc,

remplace
self.Destroy; <--2
par
action := caFree;

bon code !

Loda

PS: si tu utilise souvent la form, prefere la cacher plustot que la detruire.

Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
vendredi 27 avril 2007 à 12:37:08 | Re : effacer un composant crée dynamiquement

jelume

bjr

Faire un close est suffisant s'il s'agit d'une TForm.

Pour un composant ajouté à une TForm, si tu le crèe associé à un container, il sera détruit automatiquement.
Exemple:

Etiquette := TLabel.create(Self) ; // si Self est la TForm

inutile de détruire Etiquette.
vendredi 27 avril 2007 à 14:25:03 | Re : effacer un composant crée dynamiquement

florenth

Membre Club
Réponse acceptée !
Pour détruire une fenetre n'importe où dnas le code et sas plantage, appeler TForm.Release() er puis c'est tout.

En tout cas, éviter absolument le .Destroy car ça empèche la fiche de terminer son evenement et la suite qui va avec.
vendredi 27 avril 2007 à 15:13:22 | Re : effacer un composant crée dynamiquement

fidji

Merci beaucoup,

il me reste a faire pareil avec un groupbox contenant des composants... il faut que j'efface les composants a l'intérieur avec les memes contraintes, et donc les mêmes problèmes,   mais pour ce qui est de ma form ça marche nikel ;)

vendredi 27 avril 2007 à 16:06:13 | Re : effacer un composant crée dynamiquement

Loda

Membre Club
re,

désolé, mais les méthode utiliser pour détruire les forms ne peuvent pas (toute) s'appliquer au composant normaux.

essaye plutôt de revoir ta structure. y a sûrement moyen de faire un truc plus simple et moins problématique.

bon code,

Loda

Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
lundi 18 juin 2007 à 04:37:12 | Re : effacer un composant crée dynamiquement

germainm

avant de détruire un composante, tu dois mettre la valeur de sa propriété parent à nul, par après tu peux utiliser la méthode free.


Germain Malenfant, Developper, [ Lien ]


Cette discussion est classée dans : end, composant, crée, self, dynamiquement


Répondre à ce message

Sujets en rapport avec ce message

Crée dynamiquement un tab et y placer 2 RichEdit [ par taye78 ] Salut, j'aimerais savoir comment crée dynamiquement un tab (ds un TabbedNotebook) enfin sa encore je sais comment faire (NomDuControle.Pages.Add();) m Création de composant [ par Don0Choa ] Lu,Voila mon problème:J'ai essayé de créer un composant (bah oui jvoulé voir quoi...)mais quand je veux l'installer bah la ca par en cou...Quand ya pa Composant et Message Windows - Comment ? [ par glt0732 ] Voila j'ai un gros probléme, et même l'aide de Delphi ne m'a pas donnée la réponse, enfin si, mais ça marche pas ! Alors s'il vous plait Aidez-Moi. Un Composant dans une propriété de composant [ par Piziwate ] Bonjour à tous !Je débute dans la création de composants et je n'arrive pas a faire quelque chose de très simple... En fait je suis en train de dévelo Créer une fiche dynamiquement [ par Voltage5 ] Bonjour,Voila j'ai une PageControl sur une form et cette pagecontrol contient une fiche, qui contien un composant webbrowser, je voudrai que lorsque j Création de composant [ par cuicui ] Bonjour a tous,J'ai un petit pb au nivo création des composants.Alors voila;j'ai crée mon propre composant ControlBar héritant de TControlBar. Je voud TLabel crée dynamiquement, Position dans un Panel [ par Don0Choa ] Salut à tous, J'ai un petit problème qui doit pas être très compliqué à résoudre, en fait je crée dynamiquement des Tlabel comportants le texte d'un M Détecter quand un utilisateur appuie sur le bouton Power (marche\arret) du pc [ par Millenod ] Bonjour, On me demande de développer un service, qui vise à logguer l'extinction d'un ordinateur. Mon problème provient de cette action "sous win20 lancer une action sur un composant créé dynamiquement [ par Bestdoud ] je suis entrain de créer un logiciel de tchat multiserveur pour cela je créé un composant TIdIRC pour chaque serveur que je veux connecter j'arrive à Problème Indentificateur 'self' [ par jnmchl ] Bonjour,Excusez-moi si ce post apparaît deux fois, j'ai eu un plantage au moment de poster ma question.Voilà donc : j'ai un projet ou dans la form pri


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales