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 :

Comment récupérer de la liste des propriétés d'un composant ?


Sujet :

Composants VCL Delphi

  1. #1
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut Comment récupérer de la liste des propriétés d'un composant ?
    Y a-t-il une fonction/procédure qui permet de récupérer la liste des propriétés d'un composants en runtime ?

    Exemple : je clique sur un bouton de ma form et ca m'affiche dans une listbox toutes les propriétés du bouton (Width,caption, etc ....).

    Si oui, dans quel unité puis-je trouver les fonctions qui me permettront cela ?

    Merci

  2. #2
    Membre à l'essai
    Inscrit en
    Juillet 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Salut,

    Renseigne toi sur les informations RTTI, il existe des fonctions et des procédures pour les récupérer(GetPropInfo...).

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    J'ai un petit soucis avec la procedure ci-dessous

    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
     
    procedure TForm1.GetObjectInfo(Objet: TObject);
    var
     PData   : PTypeData;
     PListe  : PPropList;
     NbProps,
     I       : Integer;
     Method  : TMethod;
     iPosGrid : integer;
    begin
      PData := GetTypeData(PTypeInfo(Objet.ClassInfo));
      NbProps := PData^.PropCount;
     
      New(PListe);
      GetPropInfos(PTypeInfo(Objet.ClassInfo), PListe);
      SortPropList(PListe,NbProps);
     
      with StringGrid1 do
      begin
        ColCount := 3;
        RowCount := NbProps + 1;
        for i := 0 to RowCount -1 do
          Cells[1,i] := '';
        iPosGrid := 1;
        for I := 0 to NbProps -1 do
        begin
          if PListe^[I]^.PropType^.Kind <> tkMethod then
          begin
          Cells[0,iPosGrid] := PListe^[I]^.Name;
          Cells[2,IposGrid] := PListe^[I]^.PropType^.Name;
     
           case PListe^[I]^.PropType^.Kind of
                tkInteger: begin
                  if UpperCase(PListe^[I]^.PropType^.Name) = 'TCOLOR' then
                    Cells[1,iPosGrid] := IntToHex(GetOrdProp(Self, PListe^[I]),6)
                  else
                    Cells[1,iPosGrid] := IntToStr(GetOrdProp(Self, PListe^[I]));
                end;
     
                tkString,tkWString,tkLString :
                  Cells[1,iPosGrid] := GetStrProp(Self, PListe^[I]);
     
                tkFloat :
                  Cells[1,iPosGrid] := FormatFloat('0.0000000',GetFloatProp(Self, PListe^[I]));
                tkEnumeration : begin
                  if UpperCase(PListe^[I]^.PropType^.Name) = 'BOOLEAN' then
                    Case GetOrdProp(Self, PListe^[I]) of
                      0: Cells[1,iPosGrid] := 'False';
                      1: Cells[1,iPosGrid] := 'True';
                      else
                         Cells[1,iPosGrid] := 'Inconnue';
                    end;
                end;
                {tkMethod :
                begin
                  Method := GetMethodProp(Self, PListe^[I]);
                  if Method.Code <> NIL then
                    Cells[1,i+1] := ' (' +
                      TObject(Method.Data).MethodName(Method.Code) + ')';
                end;}
                tkUnknown:
                  Cells[1,iPosGrid] := 'Inconnue';
           end; // case
           inc(iPosGrid);
         end
         else
           RowCount := RowCount -1;
        end;// if
      end;
     
      Dispose(PListe);
    end;
    Cette procédure me renvoie correctement les propriétés du composants mais pas les valeurs de celui-ci. Elle me renvoie celle de ma form.
    Je sais pas si c'est du à D2005 et n'ayant pas sous la main une autre version de delphi, est ce que quelqu'un pourrait la tester.

    Il faut rajouter TypeInfo dans les uses de la form ,une stringgrid et un bouton qui fait appel à la procédure sur l'objet que l'on veut (par exemple la stringgrid ou le bouton lui-même)

    Si vous avez aussi des idées d'améliorations de cette procédure je suis preneur aussi

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    *Va aller se chercher un cerveau à auchan*

    C'est bon j'ai vu où etait l'erreur ... j'ai oublié de changer des self dans les fonctions GetStr/ord/etcprop ...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/08/2008, 10h54
  2. [VBA] récupérer tout les noms des propriétés d'un objet
    Par ooyeah dans le forum Général VBA
    Réponses: 6
    Dernier message: 05/03/2007, 16h17
  3. Réponses: 5
    Dernier message: 31/07/2006, 14h42
  4. [C# 1.1] Comment récupérer du texte entre des mots connus ?
    Par foolsky dans le forum Windows Mobile
    Réponses: 8
    Dernier message: 26/04/2006, 14h15
  5. [CSS] Liste des propriétés
    Par tails dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 18/04/2005, 16h38

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