Ceci est une ancienne révision du document !
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).
Property Published de Type Object doivent être assignées
Concerne la création de component :
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