Initialisation d'un composant

Résolu
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 - 30 janv. 2007 à 16:30
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre 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

2 réponses

florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
30 janv. 2007 à 19:23
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
3
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
30 janv. 2007 à 20:08
Grand merci, Florent

A +
Thierry
0
Rejoignez-nous