Table des matières

Les Property(s) pour les composants

Published

Les membres publiés ont la même visibilité que les membres publics.
La différence est que des informations de type à l'exécution (RTTI) sont générées pour les membres publiés. Ces informations permettent à une application d'interroger dynamiquement les champs et les propriétés d'un objet et de localiser ses méthodes. Les RTTI sont utilisées pour accéder aux valeurs des propriétés lors de la lecture ou de l'enregistrement des fichiers fiche, pour afficher les propriétés dans l'inspecteur de propriétés et pour associer des méthodes spécifiques (appelées gestionnaires d'événements) à des propriétés spécifiques (appelées événements).

Assign pour les properties de type Object

Quand une Property Published est un objet.
On doit l'assigner avec un SetXXX et OBJECT.Assign.
Sinon il ne sera pas initialiser pas le système lors de la création du component.

published
      property Margin: TMarginObject read FMargin write SetMargin; // BIEN !
      property Margin: TMarginObject read FMargin write FMargin; // PAS BIEN !
 
// Avec: 
procedure TMonObjet.SetMargin(AValue: TMarginObject);
begin
   FMargin.Assign(AValue);
end;  

Récuperer le nom et type des properties published

var
   vProps: TPropInfoList;  //uses rttiutils
   vI:     integer;
   pProp:  PPropInfo;  // uses typinfo
   pType : PTypeInfo;
   oVal:   TIC_ConfValue; // perso
begin
   { FConfSet est l'objet dont on veut récupérer les properties }
   vProps := TPropInfoList.Create(FConfSet, tkProperties);
 
   for vI := 0 to vProps.Count - 1 do
   begin
      pProp := vProps.Items[vI];
      pType := pProp^.PropType;
      DebugLn('Prop : %s', [pProp^.Name]);
      DebugLn('Type : %s', [pType^.Name]);
   end;
end;       

Ressources:

Recuperer une property par son nom

   MonObjet := GetObjectProp(ObjetParent, 'NomDeLObjet') as TObject; 

A Savoir

Toutes les variable ne sont pas publiable.

Seuls les champs de type classe peuvent être published.
Pour les propriétés, toute propriété simple dont la taille est inférieure ou égale à un pointeur, peut être déclarée published: floats, integers, sets (avec moins de 32 éléments distincts), enumerateds, classes ou tableaux dynamiques (pas de propriétés array).

Source:https://www.freepascal.org/docs-html/ref/refsu37.html

RTTI

References:

Ressources