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 :

défi aux amateurs de pointeurs etc : récupérer la valeur d'une variable de classe


Sujet :

Delphi

  1. #1
    Membre confirmé
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 73
    Par défaut défi aux amateurs de pointeurs etc : récupérer la valeur d'une variable de classe
    Soit le problème simple suivant :
    Imaginons une classe qui ressemblerait à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    TMaClasse = Class(TObject)
      variable1 : string;
      variable2 : integer;
      variable 3 : float;
    (...)
      function Defi( pNomVariable : shortstring ) : variant;
    end;
    Je voudrais que ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    valeur := defi('variable1');
    me retourne le contenu de la variable variable1 au moment de l'appel.

    Izipossibeul ?
    (et si oui, comment :-)))

    Paul

  2. #2
    Membre expérimenté
    Profil pro
    DEV
    Inscrit en
    Août 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DEV

    Informations forums :
    Inscription : Août 2006
    Messages : 182
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function Defi( pNomVariable : shortstring ) : variant;
    Begin
      If pNomVariable = 'Variable1' Then Result := Variable1;
      ...
    End;
    Il y a d'autre façon de faire mais ceci en est une (simpliste et pas forcement meme certainement pas la meilleur).

    @+

  3. #3
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Bonjour,

    Ton titre est peu piègeant.

    'Une variable de classe' laisse penser au parallèle des méthodes de classe, hors elles n'existe pas en Delphi (les var. de classes) et ce n'est pas le sujet

    Sinon, je te suggère de te tourner vers l'excellent tutoriel de Laurent dardenne sur les RTTI pour arriver à tes fins.
    C'est faisables à condition de publier tes propriétés/variables.
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  4. #4
    Membre Expert

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Par défaut
    Regarde dans l'unité TypInfo, tu y trouveras ton bonheur.
    Notemment avec les fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function GetPropValue(Instance: TObject; const PropName: string;
      PreferStrings: Boolean = True): Variant; overload;
     
     
    procedure SetPropValue(Instance: TObject; const PropName: string;
      const Value: Variant); overload;

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 173
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TMaClasse = Class(TPersistent)
    pour que le RTTI fonctionne la classe de base doit être compilé en M+
    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

  6. #6
    Membre Expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 575
    Par défaut Complément
    Citation Envoyé par ShaiLeTroll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TMaClasse = Class(TPersistent)
    pour que le RTTI fonctionne la classe de base doit être compilé en M+
    Petite précision (à vérifier) : les variables doivent être des propriétés publiées (déclarées comme propriété dans une section published de la classe).

    cdlt

    e-ric

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  7. #7
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Citation Envoyé par ShaiLeTroll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TMaClasse = Class(TPersistent)
    pour que le RTTI fonctionne la classe de base doit être compilé en M+
    Il me semble que ce n'est pas la peine de préciser cette directive si l'objet descend d'un TPersistent, sinon il le faut.

    Citation Envoyé par e-ric
    Petite précision (à vérifier) : les variables doivent être des propriétés publiées (déclarées comme propriété dans une section published de la classe).
    il me semble que c'est effectivement obligatoire aussi
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  8. #8
    Membre confirmé
    Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 73
    Par défaut
    'Une variable de classe' laisse penser au parallèle des méthodes de classe, hors elles n'existe pas en Delphi (les var. de classes) et ce n'est pas le sujet
    Oui, c'est vrai, mais pas fait exprès, je pensais juste aux variables qui se trouvent dans ma classe. Ceci dit, merci à tous pour vos explications. M'en vais creuser tout ça... Bon, j'ai peut-être cliqué un peu vite sur résolu, là, j'ai pas encore lu la doc, chuis p'tête trop optimiste, mais je le sens bien :-))

    Merci encore...

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/10/2006, 18h16
  2. Réponses: 7
    Dernier message: 16/06/2006, 17h31
  3. Récupérer la valeur d'une variable d'environnement
    Par poca10 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/02/2006, 11h23
  4. Réponses: 1
    Dernier message: 21/11/2005, 13h07
  5. Récupérer la valeur d'une variable distante
    Par seblo_scoqi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/09/2005, 17h10

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