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 :

Enumération ET entier correspondant


Sujet :

Delphi

  1. #1
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut Enumération ET entier correspondant
    Bonjour à tous.
    Je suis en train de développer un composant, et je cherche à faire une propriété un peu comme Color.
    Je m'explique :
    J'ai une batterie de constante et j'aimerais créer une propriété qui m'affiche la petite fleche et où s'afficherai la liste de tous les noms de constantes. Mais j'aimerais aussi pouvoir y affecter sa valeur numérique.
    Dans le cas de la propriété Color de type TColor, on a la liste de toutes les couleurs (clWhite ...) mais on peux aussi faire :
    Quelqu'un saurait-il la syntaxe pour definir le type permettant de faire cela ?

    Je redonne un autre exemple car j'ai peur de ne pas être très précis dans mes explication:
    Je voudrais pouvoir faire cela un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Type TSemaine = (Lundi=1,Mardi=2,Mercredi=3,Jeudi=4,Vendredi=5,Samedi=6,Dimanche=7);
    Puis pouvoir faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var
    MonJour:TSemaine;
    begin
    MonJour:=Mardi;
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var
    MonJour:TSemaine;
    begin
    MonJour:=5; //Vendredi

  2. #2
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Bonjour

    Il suffit de caster ta valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var
    MonJour:TSemaine;
    begin
    MonJour:=TSemaine( 5 ); //Vendredi

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 612
    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 612
    Points : 25 303
    Points
    25 303
    Par défaut
    La TColor, n'est pas associée à une Enumération mais à un Ensemble de constante, c'est pour cela qu'il n'y a pas besoin de faire Ord(clTruc) ...

    Il faut savoir que derrière, il y a un tableau, de chaine qui associe via des TIdentMapEntry, une valeur numérique TColor et une Chaine

    ensuite dans la section initialisation, tu as

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RegisterIntegerConsts(TypeInfo(TColor), IdentToColor, ColorToIdent);
    Qui permet d'associer au Type TColor, les fonctions de conversion Integer vers Chaine et Chaine vers Integer;

  4. #4
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Pourrais-je avoir un petit exemple concret s'il te plait ShaiLeTroll ?
    Je suis débutant en Delphi.
    Merci de vos réponses

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 876
    Points : 11 365
    Points
    11 365
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    const
      lundi=1;
      mardi=2;
     
    type
      TJour=lundi..dimanche;

  6. #6
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Merci tourlourou mais lorsque j'utilise mon type pour une propriété, la liste ne s'affiche pas

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 876
    Points : 11 365
    Points
    11 365
    Billets dans le blog
    6
    Par défaut
    yes !
    il faut pê regarder du côté de RegisterPropertyEditor, avec TEnumPropertyEditor comme éditeur de propriété

  8. #8
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    OK je vais regarder ça, merci

  9. #9
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Euh... je capte strictement rien
    j'ai eu beau regarder l'aide sur RegisterPropertyEditor j'ai absolument rien compris
    Personne n'aurait un exemple à me donner ?
    Je voudrait "simplement" une propriété de type Integer qui affiche quelque constantes dans l'inspecteur d'objet, mais que l'on puisse lui affecter toutes les valeurs que l'on veut.
    Je vous remercie tous d'avance

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 612
    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 612
    Points : 25 303
    Points
    25 303
    Par défaut
    C'est justement ce qu'il te faut, le développement de composant n'est pas un exercice aisé, tu devrais chercher des tutoriels à ce sujet ...

  11. #11
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Le développement de composant en général ne me pose pas de problème, c'est juste ce type de propriété que j'ai du mal à comprendre. En fait la propriété doit être de type Integer puisqu'elle reçoit un nombre entier, malgrer tout elle doit afficher une liste de constantes dans l'inspecteur d'objet, et la je bloque.
    Si quelqu'un a une piste, un lien ou un tuto je suis preneur. J'en ai besoin pour un projet à l'IUT et même le prof il sait pas faire.

  12. #12
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 876
    Points : 11 365
    Points
    11 365
    Billets dans le blog
    6
    Par défaut
    si tu as une bibliothèque à l'IUT : D7 Studio ou D6 Student Edition traitent des éditeurs de propriétés.

  13. #13
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    ok, alors merci à tous pour toutes les piste que vous m'avez donné. J'ai résolu une énorme partie de mon problème, mais un problème en cache un autre !!
    voici ou j'en suis :
    J'ai réussi à créer la propriété :
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    unit UMonComposant;
     
    interface
     
    uses
      SysUtils, Classes,DesignEditors,DesignIntf;
     
    Type
      TJour=1..7;
     
    Type TJourProperty=class(TIntegerProperty)
      public
        function  GetAttributes: TPropertyAttributes;override;
        Function  GetValue: String;override;
        Procedure GetValues(Proc: TGetStrProc); override;
        procedure SetValue(Const Value: String);override;
    end;
     
    type
      TMonComposant = class(TComponent)
      private
        { Déclarations privées }
        MJour:TJour;
      protected
        { Déclarations protégées }
      public
        { Déclarations publiques }
        Constructor Create(AOwner:TComponent);override;
        destructor destroy;override;
      published
        { Déclarations publiées }
        property Fonction:TJour Read MJour Write MJour;
      end;
     
     
    {Fonction de conversion TJour <-> String.}
    Function JourToIdent(Jour: Longint; Var Ident: String): Boolean;
    {Fonction de conversion String <-> TJour.}
    Function IdentToJour(Const Ident: String; Var Jour: Longint): Boolean;
     
    procedure Register;
     
    implementation
     
    Const
      Jours: Array[1..7] Of TIdentMapEntry = (
      (Value:1;Name:'Lundi'),
      (Value:2;Name:'Mardi'),
      (Value:3;Name:'Mercredi'),
      (Value:4;Name:'Jeudi'),
      (Value:5;Name:'Vendredi'),
      (Value:6;Name:'Samedi'),
      (Value:7;Name:'Dimanche'));
    //*****************************************************************************
    //*****************************************************************************
     
    Function JourToIdent(Jour: Longint; Var Ident: String): Boolean;
    Begin
      Result := IntToIdent(Jour, Ident, Jours);
    End;
     
    Function IdentToJour(Const Ident: String; Var Jour: Longint): Boolean;
    Begin
      Result := IdentToInt(Ident, Jour, Jours);
    End;
     
    //*****************************************************************************
    //*****************************************************************************
     
    function  TJourProperty.GetAttributes;
    begin
     result := [PaValueList];
    end;
     
    Function TJourProperty.GetValue: String;
    Begin
      If Not JourToIdent(TJour(GetOrdValue), Result) Then Result:=IntToStr(GetOrdValue);
    End;
     
    Procedure TJourProperty.GetValues(Proc: TGetStrProc);
    Var i:Integer;
    Begin
      For I := Low(Jours) To High(Jours) Do Proc(Jours[I].Name);
    End;
     
    Procedure TJourProperty.SetValue(Const Value: String);
    Var
      NewValue: Longint;
    Begin
      If IdentToJour(Value, NewValue) Then
        SetOrdValue(NewValue)
      Else
        Inherited SetValue(Value);
    End;
     
    //*****************************************************************************
    //*****************************************************************************
     
    constructor TTest.Create(AOwner:TComponent);
    begin
    inherited Create(AOwner);
    end;
     
    destructor TTest.destroy;
    begin
    inherited Destroy;
    end;
     
    //*****************************************************************************
    //*****************************************************************************
     
    procedure Register;
    begin
      RegisterComponents('Perso', [TMonComposant]);
      RegisterPropertyEditor(TypeInfo(TJour), Nil, '', TJourProperty);
    end;
     
    Initialization
      RegisterIntegerConsts(TypeInfo(TJour), IdentToJour, JourToIdent);
     
    end.
    Losque j'ai voulu compiler mon composant il m'a affiché :
    Fichier non trouvé : DesignEditors.dcu
    J'ai fait une petite recherche et j'ai trouvé qu'il fallait ajouter dans le Requires du dpk le fichier designide.dcp, ca à fonctionné.
    Je pose le composant sur une fiche, pas de problème, la propriété fonctionne tout à fait correctement.
    Mais lorsque j'essaye de compiler l'appli, il me ressort le même message d'erreur

  14. #14
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    J'ai trouvé une solution :
    Il faut aller dans Projet --> Options --> Paquets --> cocher "construire les paquets d'execution" --> Ajouter --> Parcourir puis selectionner le fichier Designide.dcp dans le répèrtoire Lib du dossier d'installation de Delphi.
    C'est ce même fichier qu'il faut ajouter dans le dpk du composant dans la partie Requires
    Merci à tous pour toutes les participations !!!

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

Discussions similaires

  1. [8086] Affichage d'un entier de 32 bits
    Par elNINIo dans le forum Assembleur
    Réponses: 12
    Dernier message: 10/05/2003, 20h33
  2. FormatFloat pour les entiers !?
    Par Lung dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2003, 15h20
  3. format entier
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 20/03/2003, 09h18
  4. Réponses: 9
    Dernier message: 17/01/2003, 11h45
  5. Réponses: 4
    Dernier message: 05/06/2002, 12h15

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