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

 Delphi Discussion :

[D7] Toujours aussi nul avec les ensembles


Sujet :

Delphi

  1. #1
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut [D7] Toujours aussi nul avec les ensembles
    Bonjour,
    J'ai les types :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      TTwainPixelType = (tbdBw, tbdGray, tbdRgb, tbdPalette, tbdCmy, tbdCmyk,
              tbdYuv, tbdYuvk, tbdCieXYZ, tbdUnknown, tbdUnknown1, tbdUnknown2, tbdBgr); 
      TTwainPixelTypeSet = set of TTwainPixelType;
    J'ai une fonction qui me renvoie Supported2 de type TTwainPixelTypeSet et Return2 de type TTwainPixelType

    je voudrais afficher, dans un ShowMessage, Supported2 et Return2

    je n'arrive pas à le faire. Comment le faire ?
    Merci

    A+
    Charly

  2. #2
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par Charly910 Voir le message
    Bonjour,
    J'ai les types :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      TTwainPixelType = (tbdBw, tbdGray, tbdRgb, tbdPalette, tbdCmy, tbdCmyk,
              tbdYuv, tbdYuvk, tbdCieXYZ, tbdUnknown, tbdUnknown1, tbdUnknown2, tbdBgr); 
      TTwainPixelTypeSet = set of TTwainPixelType;
    J'ai une fonction qui me renvoie Supported2 de type TTwainPixelTypeSet et Return2 de type TTwainPixelType

    je voudrais afficher, dans un ShowMessage, Supported2 et Return2

    je n'arrive pas à le faire. Comment le faire ?
    Merci

    A+
    Charly
    SI j'ai bien compris ta question tu peux t'inspirer du code suivant :

    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
     
    type
      TOper = (RCoils, RDiscreteInputs, RHoldingRegisters, RInputRegisters,
        WSingleCoil, WingleRegister, WMultipleCoils, WMultipleRegisters,
        RWMultipleRegisters);
     
      TListOper = set of TOper; ;
     
    const
      KOper: array [TOper] of string = ('Read Coils', 'Read Discrete Inputs',
        'Read Holding Registers', 'Read Input Registers', 'Write Single Coil',
        'Write Single Register', 'Write Multiple Coils', 'Write Multiple Registers',
        'Read/Write Multiple Registers');
    function GetOper(st1: string): TOper;
     
     
    implementation
     
    function GetOper(st1: string): TOper;
    var
      v1: TOper;
    begin
      for v1 := low(TOper) to high(TOper) do
        if KOper[v1] = st1 then
          result := v1;
    end;
     
    procedure showOper(vg1: TListOper);
    var v1: TOper;
    begin
      for v1 := low(TOper) to high(TOper) do
        if v1 in vg1 then
          showMessage(KOper[v1])  ;
    end;

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Merci ALWEBER, j'ai fait ceci et ça marche très bien :

    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
    type
      TTwainPixelType = (tbdBw, tbdGray, tbdRgb, tbdPalette, tbdCmy, tbdCmyk,
              tbdYuv, tbdYuvk, tbdCieXYZ, tbdUnknown, tbdUnknown1, tbdUnknown2, tbdBgr);
     
      TLisTTwainPixelType = set of TTwainPixelType;
     
    const
      KPixelType: array [TTwainPixelType] of string = ('tbdBw', 'tbdGray', 'tbdRgb', 'tbdPalette', 'tbdCmy', 'tbdCmyk',
              'tbdYuv', 'tbdYuvk', 'tbdCieXYZ', 'tbdUnknown', 'tbdUnknown1', 'tbdUnknown2', 'tbdBgr');
     
    function GeTTwainPixelType(st1: string): TTwainPixelType;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    function GeTTwainPixelType(st1: string): TTwainPixelType;
    var
      v1: TTwainPixelType;
    begin
      for v1 := low(TTwainPixelType) to high(TTwainPixelType) do
        if KPixelType[v1] = st1 then
          result := v1;
    end;
     
    procedure ShowPixelType(vg1: TLisTTwainPixelType);
    var
      v1: TTwainPixelType;
      S : String ;
    begin
      S := '' ;
      For v1 := low(TTwainPixelType) to high(TTwainPixelType) do
        if v1 in vg1 then  S := S + KPixelType[v1] + ' ; ' ;
      ShowMessage(S)  ;
    end;
     
    procedure TForm1.Button4Click(Sender: TObject);
    Var
    vg1: TLisTTwainPixelType  ;
    begin
      Vg1 := [tbdGray, tbdBw] ;
      ShowPixelType(vg1) ;
    end;
    Seul inconvénient, je dois dupliquer la liste des items dans la constante, mais ce n'est pas grave !

    A+
    Charly

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    Salut

    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
    Uses TypInfo ;
    ... 
    TTwainPixelType = (tbdBw, tbdGray, tbdRgb, tbdPalette, tbdCmy, tbdCmyk,
              tbdYuv, tbdYuvk, tbdCieXYZ, tbdUnknown, tbdUnknown1, tbdUnknown2, tbdBgr); 
    ....
    
    var
      StrTwainPixelType : String;
    begin
      StrTwainPixelType := GetEnumName(TypeInfo(TTwainPixelType),Ord(tbdBw)) ;
      ShowMessage(IntToStr(Ord(tbdBw)) + ' - ' + StrTwainPixelType);
    
    
     ///  String To  Enum 
    //  TTwainPixelType(GetEnumValue(Typeinfo(TTwainPixelType), value);
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Merci Anapurna, ça marche super et c'est plus simple !

    A+
    Charly

  6. #6
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 388
    Points : 2 999
    Points
    2 999
    Par défaut
    TRttiEnumerationType.GetName<TTwainPixelType>(tbdBw);

    oups, pas vu le D7 ... j'ai rien dit , désolé

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Finalement, ta question n'avait pas déjà une réponse dans [D7] Récupérer les noms de la liste d'un type énumération et Problème d'écriture de tableau statique avec l'utilisation d'un tableau énuméré et d'ailleurs j'avais proposé RTTI typinfo.GetEnumName, tu n'as pas remarqué mais c'est finalement exactement la même problématique dans les deux sujets.

    • Pour le besoin initial Enum to String


    Si tu utilises toujours TTwainPixelType sans tricherie, l'approche RTTI suggéré par Anapurna est celle que j'utilise souvent.

    Sans tricherie, il n'y a pas de risque théorique de dépassement
    Cependant si tu triches un peu à moment, par exemple si tu as un "Int To Enum" dans le code, dans ce cas une vérification d'étendue peut être prudente que Int ne soit pas une valeur hors énumération.
    Non car on devine tous l'utilisation quelque part de TwainToTTwainPixelType transformant TW_UINT16 en TTwainPixelType via la méthode TTwainSource.GetIPixelType, la valeur hors étendu étant tbdUnknown


    • Pour la réciproque String To Enum



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function GeTTwainPixelType(st1: string): TTwainPixelType;
    je ferais juste attention à la valeur imprévue soit par une valeur hors scope (-1 typiquement) ou une Exception

    Version Tableau de chaines

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function GeTTwainPixelType(const S: string): TTwainPixelType;
    begin
      for Result := Low(Result) to High(Result) do
        if KPixelType[Result] = S then
          Exit;
     
      Result := tbdUnknown;
      // raise EConvertError.Create(S);
      // Result := TTwainPixelType(-1);   
    end;
    Note l'utilisation de Result comme boucle, c'est un des rares cas où c'est possible, IndexOf du TStringList par exemple exploite cette construction
    C'est plus concis et évite une variable inutile dans ce cas précis.
    Tu peux aussi utiliser Low et High sur la variable au lieu du type, c'est encore plus concis

    Version RTTI
    la même problématique de valeur imprévue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function GeTTwainPixelType(const S: string): TTwainPixelType;
    begin
      Result := TTwainPixelType(GetEnumValue(TypeInfo(TTwainPixelType), S));
      if Result = TTwainPixelType(-1) then
         Result := tbdUnknown; 
         //raise EConvertError.Create(S);
    end;


    Enfin, il existe une autre méthode IdentToInt et IntToIdent couplé à un tableau TIdentMapEntries (voir la gestion du ColorToString et StringToColor)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/10/2020, 09h37
  2. Toujours des problèmes avec les erreurs PDO
    Par moimp dans le forum Langage
    Réponses: 1
    Dernier message: 17/03/2018, 17h59
  3. include avec les ensembles?
    Par fthdz dans le forum Langage
    Réponses: 2
    Dernier message: 09/09/2008, 09h54
  4. Problème avec les conditions ''sous-ensemble d'un tableau''
    Par djangossoul dans le forum LabVIEW
    Réponses: 2
    Dernier message: 07/06/2007, 12h23
  5. [WinForms]toujour avec les api's
    Par aymane_farissi dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 13/08/2006, 01h49

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