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

Langage Delphi Discussion :

Utiliser un pointeur ?


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Utiliser un pointeur ?
    Bonjour,

    J'ai une class qui attaque un webservice dont voici un extrait
    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
     
      Test = class(TRemotable)
      private
        FNom: WideString;
        FNom_Specified: boolean;
        procedure SetNom(Index: Integer; const AWideString: WideString);
        function  Nom_Specified(Index: Integer): boolean;
        procedure SetPrenom(Index: Integer; const AWideString: WideString);
        function  Prenom_Specified(Index: Integer): boolean;
      public
        destructor Destroy; override;
      published
        property Nom:                   WideString   Index (IS_OPTN) read FNom write SetNom stored Nom_Specified;
        property Prenom:                WideString   Index (IS_OPTN) read FPrenom write SetPrenom stored Prenom_Specified;
    end;
    Dans mon code pour affecter le nom je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    var
    Ftest: Test;
    ...
    Ftest := Test.Create;
    Ftest.nom := 'Dupont';
    Tout ça marche bien.
    Si maintenant la propriété à affecter se trouve dans une variable, comment faire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    monChamp := 'nom';
    maValeur := 'Dupont';
    Comment faire quelquechose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Ftest.(monChamp) := maValeur;
    Merci d'avance pour vos idées.

  2. #2
    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
    Regarde SetPropValue de TypInfo.pas et tout ce qui concerne les RTTI

    J'ai fait la même chose où un WebService fait un mapping directement sur une table de Base de Données ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Copie des Champs Publiés ayant le nom de Champ de la Table 
            Properties:= TStringList.Create();
            try
              TEpcRTTIWrapper.GetPersistentProperties(Ftest.ClassType, Properties, False);
     
              for I := 0 to Properties.Count - 1 do
              begin
                TmpField := DataSet.FindField(Properties[I]);
                if Assigned(TmpField) then
                  TypInfo.SetPropValue(Ftest, Properties[I], TmpField.AsString);
              end;
            finally
              Properties.Free();
            end;

    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
    {* -----------------------------------------------------------------------------
    La Fonction GeTPersistentProperties renvoie dans une TStrings préalablement instanciée, la Liste de propriétés publiées d'une Classe de TPersistent
    @param AClass Contient la Référence Classe héritée de TPersistent à analyser
    @param List TStrings instanciée qui accueillera la liste des propriétés
    @param PersistentOnly indique si l'on vérifie que la AClass hérite au moins de TPersistent, cela est conseillé, cela peut être désactivée si la classe est bien compilé avec la directive $M+
    @return Indique si la Fonction a trouvé au moins une propriété
    Algo Basé sur Classes.TWriter.WriteProperties
    ------------------------------------------------------------------------------ }
    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;
    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

Discussions similaires

  1. Réponses: 14
    Dernier message: 22/04/2006, 21h59
  2. Optimiser l'utilisation des pointeurs
    Par progfou dans le forum C
    Réponses: 65
    Dernier message: 10/03/2006, 11h49
  3. Réponses: 6
    Dernier message: 21/02/2006, 16h47
  4. Utilisation de pointeurs
    Par renard s dans le forum Débuter
    Réponses: 7
    Dernier message: 08/12/2005, 08h18
  5. Utilisation de Pointeurs dans API windows
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/03/2003, 22h39

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