Un Type Enuméré peut avoir 4 milliards de valeurs tandis qu'un type Enuméré utilisé dans un Ensemble ne peut avoir que 256 valeurs
Or la fonction GetEnumName(TypeInfo, index) de l'unité TypeInfo ne peut que donner la position d'un élément de la liste qui lui est transmise.
De plus, on ne peut pas concaténer les listes d'énumérés comme des ensembles,il faut trouver un autre mécanisme.
C'est ce que je propose ici en concaténant tous les éléments de toutes les listes dans un stringList. Cela permet de travailler sur l'ensemble des items de toutes les listes prédéfinies
Les fonctions spécifiques de la RTTI (Run-Time Type Information) existe depuis Delphi 2 mais n'ont été publiées qu'avec Delphi 4 avec l'unité TypInfo de Borland.
La RTTI génère des informations en provenance du compilateur et la documentation est peu fournie.
Avec Delphi XE2 de Embarcadero, on les retrouve également dans System.TypInfo ... Il y a peu de nouveautés semble t-il par rapport à D7
Source / Exemple :
L'exemple permet de traiter 3 listes différentes d'énumérés comme une seule liste. On utilise pour cela une StringList.
A = (a1,a2,a3); => Création TList => permet de gérer A Union B
B = (b1,b2);
Il y a une autre méthode (non incluse dans le source que m'a rappelé Caribensila sur le Forum et qui effectivement est souvent utilisée pour les petites listes.
A = (a1=1,a2=2,a3=3); => L'indexation permet de gérer A Union B
B = (b1=4;b2=5);
Les fonctions utilisées dans l'exemple sont :
- GetEnumName
avec sa structure TypeInfo
- GetEnumValue
- GetTypeData
avec ses structures et pointeurs:
PTypeData
TTypeData
TTypeKing
Conclusion :
Traiter plusieurs listes d'énumérés comme une seule liste trouve son intérêt (non exploré dans l'exemple) me semble t-il dans plusieurs domaines tels que :
- optimisation du codage de nombreux éléments
- facilitation de la maintenance du code d'une application importante
- possibilité de gérer des Arborescences quelconques et des structures hiérarchisées
La solution avec une TStringList (ou une listBox) ne me satisfait pas pleinement. Je cherche une autre solution... Je n'ai pas fini d'exploiter les fonctions de la RTTI. Si vous avez des idées
Si vous avez des solutions...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.