begin process at 2012 02 09 08:47:08
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > CONSERVER LES NOMS DE DÉFINITION D'UN TYPE ÉNUMÉRÉ

CONSERVER LES NOMS DE DÉFINITION D'UN TYPE ÉNUMÉRÉ


 Information sur la source

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Classé sous :getenumname, getenumvalue, type, énuméré, exécutable Niveau :Débutant Date de création :21/01/2003 Date de mise à jour :03/05/2003 02:21:53 Vu / téléchargé :4 779 / 129

Auteur : Nono40

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

 Description

C'est un truc tout simple pour afficher les nom de constante utilisés dans un type énuméré. Il permet aussi de déterminer l'indice dans le type en ne connaissant que le nom.

Par exemple si on définit un type enuméré du style TMonTypeEnum=(mtUN,mtDEUX,mtTROIS), Delphi traite les variables de ce type comme des variables de type ordinal. Il n'est pas directement possible d'en afficher le nom comme on affiche un entier avec IntToStr. Le plus souvent on utilise un Case Of pour donner les noms :
Var t:TmonTypeEnum;
...
Case t Of
mtUn:LeNom:='mtUN';
mtDeux:LeNom:='mtDEUX';
mtT rois:LeNom:='mtTROIS';
End;

Or il est possible de demander à Delphi de conserver les noms dans le .EXE et de les obtenir. Je ne savais pas du tout que c'était possible, c'est donc pour cela que je poste ce truc. Je n'était peut-être pas le seul à ne pas le savoir.

Dans l'exemple ci dessus il suffit de faire
LeNom:=GetEnumName(TypeInfo(TMonTypeEnum),In teger(t));

GetEnumName n'est pas documentée dans l'aide de Delphi 6. Il est vrai que son utilisation est plutôt rare...  

Source

  • Uses TypInfo;
  • type
  • // Défintion d'un type personnalisé tout simple
  • Type TChiffre=(Zero,Un,Deux,Trois,Quatre,Cinq,Six,Sept,Huit,Neuf);
  • procedure TForm1.Button1Click(Sender: TObject);
  • begin
  • // Affichage du nom de la constante définie dans le type énuméré
  • ShowMessage(GetEnumName(TypeInfo(TChiffre),SpinEdit1.Value));
  • end;
  • procedure TForm1.Button2Click(Sender: TObject);
  • Var i:Integer;
  • begin
  • // Obtention de l'indice de la constante
  • i := GetEnumValue(TypeInfo(TChiffre),Edit1.Text);
  • if i<0 Then Label2.Caption:='<inconnu>'
  • Else Label2.Caption:=IntToStr(i);
  • end;
Uses TypInfo;

type
// Défintion d'un type personnalisé tout simple
Type TChiffre=(Zero,Un,Deux,Trois,Quatre,Cinq,Six,Sept,Huit,Neuf);

procedure TForm1.Button1Click(Sender: TObject);
begin
  // Affichage du nom de la constante définie dans le type énuméré
  ShowMessage(GetEnumName(TypeInfo(TChiffre),SpinEdit1.Value));
end;

procedure TForm1.Button2Click(Sender: TObject);
Var i:Integer;
begin
  // Obtention de l'indice de la constante
  i := GetEnumValue(TypeInfo(TChiffre),Edit1.Text);
  if i<0 Then Label2.Caption:='<inconnu>'
         Else Label2.Caption:=IntToStr(i);
end;
 

 Conclusion

La directive $M à été supprimée du source, après le commentaire de Delphiprog.

Cette source et quelques autres sur : http://nono40.developpez.com

 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


 Sources du même auteur

Source avec une capture TAUX D'OCCUPATION DU PROCESSEUR
Source avec Zip SYNCHRONISER DEUX LISTBOX
Source avec Zip Source avec une capture SUPPRIMER LE SCINTILLEMENT AVEC DOUBLEBUFFERED
SETFOCUS SUR UN BOUTON D'UN RADIOGROUP
Source avec Zip DESSINER DANS LE SYSTRAY AVEC CREATEICON

 Sources de la même categorie

Source avec Zip Source avec une capture KINECT TEST V1 par FFCAST
Source avec Zip DÉCOUPER UNE FENÊTRE par gta126
Source avec Zip TRANSCRIRE UN FICHIER OPEN FINANCIAL EXCHANGE (OFX) EN FICHI... par jeffem
Source avec Zip Source avec une capture MSXML 4.0 VALIDATION XML / XSD par redtux
Source avec Zip FBRENOMMEADOBJET par fbalien

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture MÉMORISER DES DONNÉES DANS L'EXE par jihelb
Source avec Zip Source avec une capture UN PETIT GÉNÉRATEUR DE FACTURES par ROCABDEL
Source avec Zip TABLEAU DE TYPE DYNAMIQUE SANS VARIANT par DevNul
Source avec Zip MISE À JOUR AUTOMATIQUE D'UNE APPLICATION CLIENT/SERVEUR par cantador
CONNAITRE LE TYPE D'UN FICHIER TEXTE BRUT (ANSI, UTF8, UNICO... par f0xi

Commentaires et avis

Commentaire de Delphiprog le 21/01/2003 23:02:08 administrateur CS

Si GetEnumName renvoie une valeur littérale, il y a aussi la réciproque : GetEnumValue. Ci-après une démonstration :

uses
  TypInfo;
type
  TTestEnum =(Un, Deux, Trois, Quatre, Cinq, Six, Sept, Huit, Neuf);
const
  TabTestEnum : array[TTestEnum] of String=
  ('Un','Deux','Trois','Quatre','Cinq','Six','Sept','Huit','Neuf');

procedure TForm1.Button1Click(Sender: TObject);
begin
  TrackBar1.Position := GetEnumValue(TypeInfo(TTestEnum), Edit1.Text);
  Edit1.SelectAll;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TrackBar1.Max := Ord(High(TTestEnum));
  TrackBar1.Min := Ord(Low(TTestEnum));
end;

GetEnumValue admet deux paramètres :
1- un pointeur sur une type énuméré
2- l'équivalent en chaîne de la valeur recherchée
et renvoie un integer indiquant la valeur ordinale dans le type énuméré ou zéro s'il n'a rien trouvé.

L'utilisation de la directive $M n'est pas indispensable ici. Je ne l'ai jamais utilisée et Borland me rassure en écrivant "Une application utilise directement l'indicateur $M de compilation très rarement, si ce n'est jamais".

Commentaire de Nono40 le 21/01/2003 23:30:42

Très bonne remarque, je vais de ce pas modifier le source.

Juste un détail, GetEnumValeu retourne -1 si le nom n'est pas trouvé.

Je suis d'accord que ce n'est pas très utile, mais il y a un cas qui va me servir. J'utilise régulièrement les type énumérés et pour des besoin d'affichage j'avais recours à un Case ou un tableau de chaine constant. Mais dans les deux cas il fallait maintenir le case ou le tableau quand le type énuméré était modifié. Avec cette astuce ce n'est plus nécessaire.

Il est vrai que cela fonctionne aussi sans la directive $M, cela me semblait nécessaire dans ce cas... Je décourve le sujet...

Commentaire de Delphiprog le 21/01/2003 23:59:13 administrateur CS

GetEnumValue ne retourne pas toujours -1. Celà dépend du type de données examinées.

D'autre part, j'ai oublié de préciser que GetEnumValue n'est pas sensible à la casse en ce qui concerne le deuxième paramètre.

Pour info : ces routines existent depuis Delphi 2. Seulement, Borland ne semble pas avoir jugé utile de documenter l'unité TypInfo.Pas.
Et pourtant, ils font souvent allusion aux RTTI (RunTime Type Information) dans leur manuels.

Commentaire de Nono40 le 22/01/2003 00:14:14

Ben quand on regarde le source de GetEnumValue il semble que si. GetEnumValue appelle la fonction GetEnumNameValue qui retourne -1 si la chaine n'est pas trouvée :
...
        {       we haven't found the thing - return -1  }
@notFound:
        OR      EAX,-1

@exit:
        POP     EDI
        POP     ESI
        POP     EBX
end;

Par contre -1 peut aussi être retourné pour la valeur True des type LongBool WordBool ou ByteBool.

Commentaire de cbonus2000 le 13/05/2004 22:36:40

Question:
  Est-ce qu'il y a moyen d'aller chercher toutes les propriétés de type string d'une classe?
Par exemple, la classe TFORM, aller chercher au RunTime ces propriétés de type string tel que: Caption, Hint, Name, etc...

Je ne crois pas que ma question est directement lié à cette source mais....peut-être que quelqu'un avec votre bagage d'expérience....

Commentaire de randry2004 le 24/03/2006 11:49:32

Bonjour, j'aimerai créer une fonction du genre
function TypeToStr( ValeurLittDuTypeEnum : [?]): String;
en travaillant sur le GetEnumValue et le GetEnumName, le soucis c'est que je ne sais pas récuperer le type , En fait ce que je veux c'est mettre en paramètre la valeur enumerée et avoir en sortie le String correspondant, pouvez vous m'aider!
merci

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Affectation avec un type énuméré [ par EddiTheHead ] Voici un exemple : &nbsp; Type TypeCouleur = (Rouge, Vert, Bleu);&nbsp; Var Couleur : TypeCouleur; Chaque &#233;l&#233;ment &#224; un N&#176; d'ordre 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 subreport [ par Hamitouche ] bonjour j'ai probleme dans un etat fastreport , j'ai utiliser plusieurs subreports sur une bande masterdata et chaque subreport et relier a un query DBgrid [ par nraloux ] Salut à tous, j'ai un problème de rafraichissement de la DBgrid et je sais pas d'ou viens le problème.Je me connecte a la base de donnée par programma Graphe boursier [ par nicola40 ] Bonjour à tous, et très bonne année 2010[^^clinoeil1] je ne suis pas au top en delphi,mais je progresse .... lentement avec beaucoup de questions ! [ Le fameux message: "Could not convert variant of type (Null) into type (String)" [ par Lunasoft ] [size=300]Bonsoir! Ma question paraitra peut être étrange. Mais elle est simple. Ça fait plusieurs mois que je n'arrive pas à faire taire ce message: champ de type date [ par gigabyte ] bjr tt le monde j'ai un table portant 03 champ: n°eleve,nom, date naissance. je voudrais trier la table par date naissance exemple: afficher que les inserer une image dans une base de donnees [ par chahinerue6 ] Bonjour a vous tous je voudrait solicite votre aide si ces possible exactement dans les basse de donnees est ma question est que je voudrait inserer ODBC SAGE (Base approprie ) [ par ataeallah ] Bonjour tous, J'utilise le driver ODBC pour pouvoir communiquer avec une base sage 100 ver 16.5. Pour les updates je n'ai pas de problème, par contre Utilisation du Type : TMonitor [ par tuss ] DEpuis pas longtemps en multi-écran j'ai donc décidé de modifier mes vieux programme. Comment utiliser le Type : TMonitor J'identifie bien mes écran


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 3,604 sec (3)

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