1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| {* -----------------------------------------------------------------------------
La Fonction GeTPersistentProperties renvoie dans une TStrings préalablement instanciée, la Liste de propriétés publiées d'une Classe de TPersistent
@param AClass Contient la Référence Classe héritée de TPersistent à analyser
@param List TStrings instanciée qui accueillera la liste des propriétés
@param PersistentOnly indique si l'on vérifie que la AClass hérite au moins de TPersistent, cela est conseillé, cela peut être désactivée si la classe est bien compilé avec la directive $M+
@return Indique si la Fonction a trouvé au moins une propriété
Algo Basé sur Classes.TWriter.WriteProperties
------------------------------------------------------------------------------ }
class function TEpcRTTIWrapper.GetPersistentProperties(AClass: TClass; List: TStrings; PersistentOnly: Boolean = True): Boolean;
var
I, Count: Integer;
PropInfo: PPropInfo;
PropList: PPropList;
begin
Result := Assigned(List) and (not PersistentOnly or (PersistentOnly and AClass.InheritsFrom(TPersistent)));
if Result then
begin
List.Clear();
// Obtention du Nombre de Propriété de l'Instance
Count := GetTypeData(AClass.ClassInfo)^.PropCount;
Result := Count > 0;
if Result then
begin
// Allocation de la mémoire pour la Liste des Propriétés de l'Instance
GetMem(PropList, Count * SizeOf(Pointer));
try
// Récupération du Tableur de Pointeur décrivant les Propriétés de l'Instance
GetPropInfos(AClass.ClassInfo, PropList);
for I := 0 to Count - 1 do
begin
// Récupération du Ieme Element décrivant l'une des Propriétés de l'Instance
PropInfo := PropList^[I];
// Ajout du Nom de l'une des Propriétés de l'Instance
if Assigned(PropInfo) then
List.Add(PropInfo^.Name);
end;
finally
// Libération de la mémoire pour la Liste des Propriétés de l'Instance
FreeMem(PropList, Count * SizeOf(Pointer));
end;
end;
end;
end; |
Partager