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 :

Atteindre un Control par son Tag


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2007
    Messages : 91
    Par défaut Atteindre un Control par son Tag

    est ce que je peux atteindre directement un Control seulement en connaissant son Tag at sans faire des boucles ?
    d'avance...

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    On va dire que c'est possible ... mais ca nécessite beaucoup d'effort ...

    Je m'explique :

    1) Vérifier qu'au sein d'une même Form on a un tag différent pour chacun des composants...
    2) Connaitre la classe du composant pour faire le transtypage
    3) Effectué ce transtypage

    Voici ce que ça donne vite fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage(Tbutton(Form1.Components[1]).Caption);//1 est le tag de mon button2
    J'ai mis 2 bouton sur une form, l'un ayant le tag 0 et l'autre le tag 1...

    Il ne vaut pas oublier que les propriétés des objets changent ... selon leur classe...
    Ainsi, on accède au texte du bouton via la propriété Caption ce qui n'est pas le cas d'un Edit (propriété Text).

    Voilà, après tout dépend de ce que tu veux faire ...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Mars 2007
    Messages : 91
    Par défaut
    Salut.
    Merci bien Mr ero-sennin pour ta réponse et tes conseils .
    mais je ne crois pas que c'est la bonne solution parceque là c'est l'indice du bouton et non pas son tag .
    et si tu essai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ShowMessage(Tbutton(Form1.Components[20]).Caption);//20 est le tag de mon button2
    tu auras bien droit a une erreur du genre "Indice de liste hors limites (20)".

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Par défaut
    Bonjour,

    Je verrais 2 solutions.


    Fair une liste( dans Un TObjectList) de tous les composants que je désire joindre via leur tag, et mettre l'indice correspondant dans le tag.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
       ObjectList := TObjectList.Create;
       ObjectList.Owner := false;
     
      ObjectList.Add(button1);
      Button1.Tag := ObjectList.count - 1;
     
      ObjectList.Add(button2);
      Button2.Tag := ObjectList.count - 1;
    Dans ce cas
    ObjectList[0] Renvoi un TObject qui est Button1 et Button1.tag = 0
    ObjectList[1] Renvoi un TObject qui est Button2 et Button1.tag = 1

    2° solution
    Essayer de stocker le pointeur de l'objet dans le Tag. Cela devrait être possible, mais pou ce qui est des pointeurs, je ne maitrise que moyennement le sujet.

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Par défaut
    Ah oui, j'avais omis de dire que le tag devait comporter le nombre de components sur la Form ...

    Ainsi le premier bouton placé aura le tag 0, le 2ième 1, le nième n-1 ...

    C'est sur que cette solution n'est pas très pratique! De plus il faudrait à chaque fois renseigner le tag et pour peu que tu aies des créations dynamiques ... je te laisse imaginer ... (Vu l'heure du post hier, c'est tout ce que j'avais de mieux à te proposer )

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Bonjour,

    est ce que je peux atteindre directement un Control seulement en connaissant son Tag et sans faire des boucles ?
    ... dans l'absolu, en prenant chaque mot de la question à la lettre, c'est impossible car par défaut les tags sont tous à Zéro et ceux dont le tag a été mis manuellement à 2, 5, 8, 5 etc peuvent donc avoir le même tag à moins de faire visuellement soi-même un boucle.

    ... Par contre si tu fais une boucle d'initialisation avec Form1.Components[i].tag:=i; où tu donnes au tag de chaque composant la valeur de son indice ça met de l'ordre dans la boutique ... et dans ce cas ShowMessage(Tbutton(Form1.Components[20]).Caption) où 20 est le tag de ton button2 tu n'auras pas l'erreur du genre "Indice de liste hors limites (20)" en supposant bien entendu que pour écrire cette ligne de code tu te souviennes que le 20 est bien le tag de ton button2 ... car autant écrire directement ShowMessage(Button2.Caption) ... Non ?

    Faudrait nous en dire un peu plus sur le pourquoi tu veux pouvoir atteindre directement un Control seulement en connaissant son Tag et dans quel contexte.
    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

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

Discussions similaires

  1. controler un sme server par son telephone portable
    Par gwlegion dans le forum Développement Mobile en Java
    Réponses: 0
    Dernier message: 28/09/2008, 22h20
  2. controler un sme server par son telephone portable
    Par gwlegion dans le forum Mobiles
    Réponses: 0
    Dernier message: 26/09/2008, 20h24
  3. Réponses: 3
    Dernier message: 16/07/2007, 22h47
  4. Réponses: 6
    Dernier message: 14/10/2006, 17h22
  5. Récupérer un control par son nom
    Par Didier L dans le forum Delphi
    Réponses: 4
    Dernier message: 23/05/2006, 20h59

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