Conserver les noms de définition d'un type énuméré

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';
mtTrois: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),Integer(t));

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

Source / Exemple :


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

Codes Sources

A voir également

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.