IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Nono40.developpez.com
Le petit coin du web de Nono40
SOURCES TESTS DELPHI WIN32 AUTOMATISMES DELPHI .NET QUICK-REPORT
Retour à l'accueil
34 - NOMS DES DEFINITIONS D'UN TYPE ÉNUMÉRÉ

PRÉSENTATION : Afficher le nom des constantes de définition d'un type énuméré.
ZIP : Téléchargez le zip APERÇUS :

NOTES : 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...


CODE :
Unit Unit1;
// Conserver les noms définissant un type énuméré
//
// Par Nono40 : http://nono40.developpez.com   http://nono40.fr.st
//              mailTo:nono40@fr.st
//
// Le 25/01/2002
//
// Source écrit par Nono40   http://nono40.fr.st

Interface

Uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin;

Type
  TForm1 = Class(TForm)
    Button1: TButton;
    SpinEdit1: TSpinEdit;
    Edit1: TEdit;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Procedure Button1Click(Sender: TObject);
    Procedure Button2Click(Sender: TObject);
  Private
    { Déclarations privées }
  Public
    { Déclarations publiques }
  End;

Var
  Form1: TForm1;

Implementation

{$R *.dfm}

Uses TypInfo;

// 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é
  Label1.Caption := 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;


End.

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Bruno Guérangé. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.