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 la propriété .Tag pour stocker une référence d'objet


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 67
    Points : 54
    Points
    54
    Par défaut Utiliser la propriété .Tag pour stocker une référence d'objet
    Bonjour,

    D'après la documentation de Delphi, on peut utiliser la propriété ".Tag" d'un objet pour stocker une référence ou un pointeur.
    TComponent.Tag Propriété

    Stocke une valeur entière dans un composant.
    Classe : TComponent
    Syntaxe :[Delphi] property Tag: Integer read FTag write FTag;

    Description
    Tag n'a pas de signification prédéfinie. La propriété Tag est fournie pour les besoins des développeurs. Elle est proposée pour stocker une valeur entière ou elle peut être transtypée sur n'importe quelle valeur 32 bits, comme une référence de composant ou un pointeur.
    J'essaye donc de l'utiliser avec " as " mais le compilateur me mets :

    1 - objet.Tag := instance_autre_objet;
    ==> erreur : E2010 - Types incompatibles

    2 - (objet.Tag as TMaClasse) := instance_autre_objet;
    ==> erreur : E2015 - Opérateur non applicable à ce type d'opérande

    3 - objet.Tag := instance_autre_objet as Integer;
    ==> erreur : E2015 - Opérateur non applicable à ce type d'opérande
    Est-ce que quelqu'un a déjà été confronté à ce problème ? Comment l'utiliser ?

    Merci

    PS :
    Pour ceux qui se demande pourquoi j'ai besoin d'utiliser cette "astuce" c'est pour pouvoir faire une trace par connexion de base de données établies.
    J'ai un pool de connexion qui est attribué à des threads [verrouillage par mutex ou TCriticalSection]. J'ai besoin de tracer indépendamment chaque requête qui passe par chaque connexion.
    Donc, je crée une classe de trace que j'associe avec la connexion.
    S'il y a d'autres moyens je suis preneur

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Le transtypage, ce n'est pas Inst as Integer, mais Integer(Inst). Et inversement, TMaClasse(Tag) et pas Tag as TMaClasse.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 67
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par sjrd Voir le message
    Le transtypage, ce n'est pas Inst as Integer, mais Integer(Inst). Et inversement, TMaClasse(Tag) et pas Tag as TMaClasse.
    Correct

    Merci en tout cas.
    Pour ceux qui en ont eu besoin comme moi :
    http://www.developpez.com/delphi/faq...uidtranstypage

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juin 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    J'utilise aussi la méthode suivante :

    Ecriture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MonObj := TMaClass.Create(Self);
    Objet.Tag := Integer(MonObj);
    ...
    Lecture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    p: pointer;
     
    p := addr(tag);
    TMaClass(p^).Property := valeur
    etc ...

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 553
    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 553
    Points : 25 133
    Points
    25 133
    Par défaut
    perso, je préfère utiliser un objet dédié au Tag pour ensuite encaspulé l'objet lié ... voir ICI
    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

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/06/2008, 17h24
  2. Utiliser une variable pour stocker les noms d'objets.
    Par en_gel_ho dans le forum Access
    Réponses: 4
    Dernier message: 03/01/2007, 16h44
  3. [Image] Classe pour stocker une image JPEG ?
    Par elitost dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 19/01/2006, 13h34
  4. Comment stocker une référence vers un TTreeNode ds un DFM ?
    Par phplive dans le forum Composants VCL
    Réponses: 1
    Dernier message: 19/07/2005, 12h33

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