Initialisation d'un composant [Résolu]

Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
- - Dernière réponse : ThWilliam
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
- 30 janv. 2007 à 20:08
Bonjour à tous.


Dans un composant, j'ai une méthode interne 'ReInit'


procedure TMonCompo.Reinit;
begin
   if Assigned(FOnReInit) then FOnReInit(self)  //événement OnReInit
   else  FaireParDefaut;
end;


J'ai plusieurs propriétés publiées avec Setters dans lesquels il y a appel à la  procedure ReInit.
Le problème est que, lors de la création du compo à l'exécution, les Setters sont appelés avant l'assignation de l'événement, donc le code dans cet événement n'est pas exécuté.
J'ai alors placé la propriété OnReInit avant toutes les autres et enlevé les valeurs par défaut des propriétés pour que leur Setter soit toujours appelé.
Cela marche, mais manque évidemment d'élégance.
J'ai alors surchargé la procedure Loaded de la façon suivante :


procedure TMonCompo.Loaded;
begin
   if Assigned(FOnReInit) then FOnReInit(self);
end;


Tout marche, mais est-ce la meilleure solution ?
Quand la procedure Loaded est-elle exactement appelée (chronologiquement) dans la construction d'un composant ?


Merci d'avance.
Thierry
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
3
Merci
Salut !

La procédure Loaded() est appelée lorsque le composant a fini de lire ses propriétés dans le flux (dfm). Elle est appelée une fois qe TOUS les composants d'une même fiche sont crées (voir TCustomform.Create() unité Forms, InitInheritedComponent() et NotifyGlobalLoading() unité Classes)

Par contre, je remplacerai "if Assigned(FOnReInit) then FOnReInit(self)" par un appel à Reinit, qui fait la même chose.

Et n'oublie pas "inherited" dans Loaded(): très important puisqu'il enlève l'état de chargement du composant !

A+
Flo

Merci florenth 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de florenth
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
0
Merci
Grand merci, Florent

A +
Thierry
Commenter la réponse de ThWilliam

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.