Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
prog:lazarus:components:properties [01/05/2020 18:57]
thierry [Ressources]
prog:lazarus:components:properties [10/05/2020 18:52] (Version actuelle)
thierry [Property Published de Type Object doivent être assignées]
Ligne 1: Ligne 1:
 ====== Les Property(s) pour les composants ====== ====== Les Property(s) pour les composants ======
 ===== Published ===== ===== 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.
 +<code delphi>
 +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;  ​
 +</​code>​
 +
 +==== Récuperer le nom et type des properties published ====
 +<code delphi>
 +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;       
 +</​code>​
 +Ressources:
 +  * [[https://​www.freepascal.org/​docs-html/​current/​fcl/​rttiutils/​tpropinfolist.html|TPropInfoList]]
 +  * [[https://​www.freepascal.org/​docs-html/​current/​rtl/​typinfo/​index-5.html|TypInfo]]
 +
 +==== Recuperer une property par son nom ====
 +<code delphi>
 +   ​MonObjet := GetObjectProp(ObjetParent,​ '​NomDeLObjet'​) as TObject; ​
 +</​code>​
 +
 +
  
 ==== A Savoir ==== ==== A Savoir ====
 Toutes les variable ne sont pas publiable. ​ Toutes les variable ne sont pas publiable. ​
  
-Seuls les champs de type classe peuvent être publiés.\\  +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 ​publiée ​: floats, integers, sets (avec moins de 32 éléments distincts), enumerateds,​ classes ou tableaux dynamiques (pas de propriétés array).+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]] Source:​[[https://​www.freepascal.org/​docs-html/​ref/​refsu37.html]]
 +==== RTTI ====
 +References:
 +  * [[https://​laurent-dardenne.developpez.com/​articles/​Delphi/​RTTI/​]]
 +
 ===== Ressources ===== ===== Ressources =====
   * [[https://​gilles-vasseur.developpez.com/​tutoriels/​poo-les-proprietes/​]]   * [[https://​gilles-vasseur.developpez.com/​tutoriels/​poo-les-proprietes/​]]