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

C Discussion :

enum et plus de 65536


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 72
    Par défaut enum et plus de 65536
    Bonjour,

    j'utilise un enum pour stocker différentes valeurs sur lesquelles je fais du OU.
    Exemple :
    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
    21
    22
     
    enum format{ // Décoration
    			NORMAL = 1,
    	 		 GRAS = 2,
    			 SOULIGNE = 4,
    			 ITALIC = 8,
    			 // alignement
    			 CENTRE = 1024,
    			 DROITE = 2048,
    			 // Couleur texte 
    			 TROUGE = 8192,
    			 TVERT = 16384,
    			 TBLEU = 32768
    			 // Couleur du fond
    			 FROUGE = 65536,
    			 FVERT = 131072,
    			 FBLEU = 262144			 
    			 } ;
     
    // appel de la fonction 
    toto->ecrireChaine("Elvis n'est pas mort", 
    CENTRE|GRAS|SOULIGNE|ITALIC) ;
    Le deuxieme paramétre de la fonction ecrireChaine est envoyé a la fonction ajouteStyle que voici :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    void xlsWriter::ajouteStyle(int deco){	
    	 string definition="";
    	 string aligne="";
    	 string couleurFond="";
     
    	// Décoration
    	 if(deco & GRAS)
    		definition += " ss:Bold=\"1\"";
        if(deco & SOULIGNE)
    		definition += " ss:Underline=\"Single\"";
    	if(deco & ITALIC)
    		definition += " ss:Italic=\"1\"";
    	// Couleur du texte
    	if(deco & TROUGE)
    		definition += " ss:Color=\"#FF0000\"";
    	if(deco & TVERT)
    		definition += " ss:Color=\"#00FF00\"";
    	if(deco & TBLEU)
    		definition += " ss:Color=\"#0000FF\"";
    	// Couleur du fond
    	if(deco & TROUGE)
    		couleurFond += " ss:Color=\"#FF0000\" ss:Pattern=\"Solid\"";
    	if(deco & TVERT)
    		couleurFond += " ss:Color=\"#00FF00\" ss:Pattern=\"Solid\"";
    	if(deco & TBLEU)
    		couleurFond += " ss:Color=\"#0000FF\" ss:Pattern=\"Solid\"";
     
    	// Alignement
    	if (deco & CENTRE)
    		aligne += "ss:Horizontal=\"Center\" ss:Vertical=\"Bottom\"";
    	if (deco & DROITE)
    		aligne += "ss:Horizontal=\"Right\" ss:Vertical=\"Bottom\"";
     
    	this->styles[nbstyles].indice = deco;
    	this->styles[nbstyles].nom= "Style" + int2string(this->nbstyles);
    	this->styles[nbstyles].definition =  "\t\t<Style ss:ID=\"Style" + int2string(this->nbstyles) + "\">\n";
    	this->styles[nbstyles].definition += "\t\t\t<Font x:Family=\"Swiss\"" + definition + "/>\n";
    	if (!aligne.empty())
    		this->styles[nbstyles].definition += "\t\t\t<Alignment " + aligne + "/>";
    	if (!couleurFond.empty())
    		this->styles[nbstyles].definition += "\t\t\t<Interior " + couleurFond + "/>";
    ";
     
    	this->styles[nbstyles].definition += "\t\t</Style>\n";
    	this->nbstyles++;
     
     
    }
    Je suis donc obligé de conserver cette numérotation.
    Y a t'il un moyen pour que l'enum soit de type unsigned long ou autre ??

    Merci

  2. #2
    Membre Expert
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Par défaut
    je ne pense pas mais par contre tu peux faire une simple fonction qui retourne la bonne couleur:

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    enum format{ // Décoration 
             NORMAL = 0, 
               GRAS, 
              SOULIGNE, 
              ITALIC, 
              // alignement 
              CENTRE, 
              DROITE, 
              // Couleur texte 
              TROUGE, 
              TVERT, 
              TBLEU,
              // Couleur du fond 
              FROUGE, 
              FVERT, 
              FBLEU,
              } ; 
     
    unsigned long GetColor( format f)
    {
    switch(f)
     {
      case NORMAL : return 1;
      case GRAS: return  2;
      ...
      case FBLEU: return 262144;
     
     }
    }
     
    // appel de la fonction 
    toto->ecrireChaine("Elvis n'est pas mort", 
    GetColor(CENTRE)|GetColor(GRAS)|GetColor(SOULIGNE)|GetColor(ITALIC) ) ;

  3. #3
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: enum et plus de 65536
    Citation Envoyé par htristra
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void xlsWriter::ajouteStyle(int deco){
    Pas du C.
    Y a t'il un moyen pour que l'enum soit de type unsigned long ou autre ??
    Non. enum, c'est pas fait pour ça. Utilise #define

    http://emmanuel-delahaye.developpez..../ed/inc/bits.h

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 72
    Par défaut
    L'utilisation d'une fonction est bien, mais cela rend le tout un peu trop verbeux à mon gout.

    Je vais utilisé le define.

    Merci à vous

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

Discussions similaires

  1. Les PC sont de plus en plus bruyants que faire
    Par plichtal dans le forum Ordinateurs
    Réponses: 260
    Dernier message: 23/12/2011, 12h28
  2. Réponses: 3
    Dernier message: 31/05/2010, 17h58
  3. Réponses: 6
    Dernier message: 07/01/2009, 11h17
  4. Réponses: 3
    Dernier message: 16/12/2002, 16h12
  5. [Datareport] Etat plus large que le papier
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/09/2002, 11h45

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