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

Composants VCL Delphi Discussion :

récupérer les "properties" d'un objet


Sujet :

Composants VCL Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 26
    Points : 24
    Points
    24
    Par défaut récupérer les "properties" d'un objet
    Bonjour,

    J'aimerai savoir comment récupérer la liste des "propriétés" d'un objet comme le fait l'explorateur d'objets dans l'EDI.

    Merci

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 737
    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 737
    Points : 25 646
    Points
    25 646
    Par défaut
    Avec les RTTI (unité typinfo)
    les property en published ...
    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
    class function TEpcRTTIWrapper.GetPersistentProperties(AClass: TClass; List: TStrings; PersistentOnly: Boolean = True): Boolean;
    var
      I, Count: Integer;
      PropInfo: PPropInfo;
      PropList: PPropList;
    begin
      Result := Assigned(List) and (not PersistentOnly or (PersistentOnly and AClass.InheritsFrom(TPersistent)));
      if Result then
      begin
        List.Clear();
        // Obtention du Nombre de Propriété de l'Instance
        Count := GetTypeData(AClass.ClassInfo)^.PropCount;
        Result := Count > 0;
        if Result then
        begin
          // Allocation de la mémoire pour la Liste des Propriétés de l'Instance
          GetMem(PropList, Count * SizeOf(Pointer));
          try
            // Récupération du Tableur de Pointeur décrivant les Propriétés de l'Instance
            GetPropInfos(AClass.ClassInfo, PropList);
            for I := 0 to Count - 1 do
            begin
              // Récupération du Ieme Element décrivant l'une des Propriétés de l'Instance
              PropInfo := PropList^[I];
              // Ajout du Nom de l'une des Propriétés de l'Instance
              if Assigned(PropInfo) then
                List.Add(PropInfo^.Name);
            end;
          finally
            // Libération de la mémoire pour la Liste des Propriétés de l'Instance
            FreeMem(PropList, Count * SizeOf(Pointer));
          end;
        end;
      end;
    end;
    lit ce sujet

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    A voir également ce tuto de Laurent Dardenne:
    Introduction aux RTTI sous Delphi.

    @+

  4. #4
    Membre à l'essai
    Inscrit en
    Septembre 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 26
    Points : 24
    Points
    24
    Par défaut
    merci, je vais voir tout cela et si j'ai toujours un point d'interrogation je vous le ferai savoir. Sinon je mettrai le flag "Résolu".

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 08/08/2006, 10h14

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