IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Transformer un caractère en type énuméré


Sujet :

Langage Delphi

  1. #1
    HT
    HT est déconnecté
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 15
    Points : 16
    Points
    16
    Par défaut Transformer un caractère en type énuméré
    Soit un type énuméré TRomain=(M,D,C,L,X,V,I)
    J'extrais d'un nombre en chiffre romains un caractère, donc M ou C ou ... I
    Peut-on le transformer en TRomain d'une autre manière que par une boucle sur un tableau de correspondance ?

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    type TRomain=(M,D,C,L,X,V,I);
     
    const
        romain:array[TRomain]of char=('M','D','C','L','X','V','I');
     
     
     
     
    function RomainAdArabe(nbRomain:shortstring):cardinal;
    var lettre:TRomain;
     
    car:char;
     
    begin
        for k:=length(nbRomain) downto 1 do
        begin
            car:=((uppercase(nbRomain)[k]));
            for lettre:=M to I do if car=romain[lettre] then break;
        end;
    je récupère ainsi dans lettre le type énuméré correspondant au caractère.
    Mais cela me paraît un peu lourd, non ?

  2. #2
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    C'est possible grâce à RTTI (Run-time type information).
    Même si ces méthodes sont très peu documentées, elles sont très, très utiles.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    uses
      TypInfo;
     
    type TRomain=(M, D, C, L, X, V, I);
     
    function RomainAdArabe2(ChiffreRomain: char): cardinal;
    begin
      try
        result:= GetEnumValue(TypeInfo(TRomain), ChiffreRomain);
      except
        raise Exception.Create(ChiffreRomain + ' n''est pas un chiffre romain.');
      end;
    end;

  3. #3
    HT
    HT est déconnecté
    Membre à l'essai
    Inscrit en
    Juin 2002
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 15
    Points : 16
    Points
    16
    Par défaut RESOLU et merci
    Merci à P Castelain
    C'est curieux comme coïncidence, j'ai commencé à lire ce matin un chapitre sur la RTTI Ca m'a paru pas facile mais du coup j'ai un point d'entrée.
    +Question de détail Comment on fait pour faire afficher RESOLU dans le titre ?

  4. #4
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut Re: RESOLU et merci
    Citation Envoyé par HT
    Comment on fait pour faire afficher RESOLU dans le titre ?
    On édite tout simplement le premier message et on change son titre

    Bon développement !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-E]transformer array en tableau type range
    Par matel dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/03/2006, 09h50
  2. Réponses: 3
    Dernier message: 23/02/2006, 09h37
  3. Réponses: 2
    Dernier message: 03/10/2005, 16h23
  4. [D2005] Utilisation des types énumérés
    Par bouha dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 21/07/2005, 22h21
  5. Réponses: 7
    Dernier message: 02/06/2003, 08h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo