begin process at 2013 05 24 23:08:24
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Système

 > LISTES ÉNUMÉRÉES : CONCATÉNATION ET UTILISATION DES FONCTIONS DE TYPEINFO

LISTES ÉNUMÉRÉES : CONCATÉNATION ET UTILISATION DES FONCTIONS DE TYPEINFO


 Information sur la source

Note :
Aucune note
Catégorie :Système Classé sous :Listes énumérés, TypeInfo, GetEnumName GetEnumValue, GetTypeData, concaténation Niveau :Initié Date de création :29/06/2012 Date de mise à jour :30/06/2012 11:42:32 Vu / téléchargé :1 641 / 124

Auteur : Jean_Jean

Ecrire un message privé
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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

  • 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
 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...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

30 juin 2012 11:42:33 :
1. - Rajout de la mise en surbrillance des items correspondant à la sous liste sélectionnée - Correction de quelques fautes d'orthographe

 Sources du même auteur

Source avec Zip Source avec une capture GESTION D'UN TYPE ENUMÉRÉ DANS TLISTBOX
Source avec Zip Source avec une capture SPLIT PARTIES D'UN FICHIER ET PRODUCTION DE NOMS DE FICHIERS
Source avec Zip Source avec une capture LISTBOX TRANSPARENTE CRÉÉE DYNAMIQUEMENT SUR UNE IMAGE
Source avec Zip Source avec une capture EXEMPLES DE THREADS
Source avec Zip Source avec une capture GESTION DE CASES À COCHER PERSONNALISÉES DANS UN STRINGGRID

 Sources de la même categorie

Source avec Zip Source avec une capture EXEMPLE D'UTILISATION DWM API par CynicRus
Source avec Zip HUMAN-LIKE MOUSE MOVEMENTS par CynicRus
Source avec Zip UTILISER LES FICHIERS *.CPL par happy05
Source avec Zip Source avec une capture EXEMPLES DE THREADS par Jean_Jean
Source avec Zip LECTURE DE LA MEMOIRE D'UN AUTRE PROCESSUS par Mokost

Commentaires et avis

Commentaire de Jean_Jean le 01/07/2012 00:39:20

En fait, le but recherché est de se creuser la tête pour se passer d'écrire un tas de code pour gérer l'union de plusieurs listes d'énumérés.

Je travaille donc sur l'écriture d'une nouvelle classe, voire une métaclasse (dérivé de TObject). Je ne suis pas sûr d'y arriver, ça devient très abstrait. Ou alors peut-être simplement un composant non visuel (dérivé de TComponent).

Le rôle de composant serait alors d'intégrer automatiquement les listes d'énumérés qu'aura écrit le programmeur sans qu'il ait à réecrire le charabia de la RTTI.

Si un delphiste expérimenté passe par là!
Merci de me faire part de votre reflexion

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Problème concaténation [ par bassman64 ] Alors voila ...J'ai un problème de concaténation :For i:=1 to 12 do begin Edit(i).caption := Button(i).text; end;avec le Edit(i).caption := Button( [PDF] : concaténation de fichiers+signets [ par PpPool ] Bonjour à tous, Après de multiples recherches infructueuses, je me permets de vous demander un coup de main. Je dois, à partir de plusieurs documents concaténation de DBGrid provenant de bases différentes mais ayant les memes champs [ par hajerhajer ] bonjour les Delphistes, j'ai une question: j'ai des DBGrid ayant les meme champs. je veux concaténer leurs contenus dans un seul DBGrid résultat sacha type ENUM sauvegarde et restauration dans un fichier texte [ par EmKa69 ] Bonjour à tous, je sauvegarde des variables de type enum dans un fichier texte en les convertissant en chaine. avec le code suivant: procedure Save(No


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,936 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales