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

C++Builder Discussion :

Changer une propriété d'un objet en utilisant une variable pour le nom


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 9
    Points
    9
    Par défaut Changer une propriété d'un objet en utilisant une variable pour le nom
    Bonjour,

    mon problème est simple :

    je voudrais changer la propriété d'un objet (TImage) en utilisant une variable à la place du nom.

    exemple je voudrai remplacer ca :
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AnsiString Name = "Image1";
    Name->Top=200;
    c'est ce que je voudrais réaliser mais ce n'est pas possible il me dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [C++ Erreur] game.cpp(336): E2451 Symbole 'Name' non défini
    alors je me demande comment je dois procéder

    merci de vos réponses et à bientot

  2. #2
    Membre expérimenté
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Points : 1 427
    Points
    1 427
    Par défaut
    Regardes du côté de la propriété Controls des TForm. Cette propriété liste tous les objets enfants de ta fiche. On peut donc faire un code comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int count = Form1->ControlCount;//nombre d'objets sur la fiche.
    for (int i = 0;i < count;i++)//parcours des objets de la fiche
    {
     AnsiString Nom = Form1->Controls[i]->Name;//récupération du nom de l'objet
     
     //code
    }
    Nb : Ce code ne fonctionne en l'état que pour les objets qui ont pour parent ton objet TForm.
    + + +

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 115
    Points : 58
    Points
    58
    Par défaut
    Tu peux trouver directement l'adresse du controle via son nom en faisant cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TComponent * control = FindComponent("Image1");
    if (control != NULL)
       ((TControl *)control)->Top = 200;

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup !

    je vais tester tout de suite et je vous redit.

    Edit:

    Alors j'ai utilisé la 2e méthode et il ne me fait pas d'erreur à la compilation mais apres la compilation lorsque le programme s'éxécute il plante et me dis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Violation d'accès à l'adresse 52036858 dans le module 'vcl100.bpl'. Lecture de l'adresse 00000048.
    voici mon code au complet :

    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
     
    	AnsiString _NbCoups = FloatToStr(NbCoups);
    	DataModule7->ADOQueryCoups->Close();
    	DataModule7->ADOQueryCoups->SQL->Clear();
    	DataModule7->ADOQueryCoups->SQL->Add("SELECT Gm_BName,Gm_PosX,Gm_PosY FROM game WHERE Gm_Coups="+_NbCoups+";");   //je récupère dans la base de donnée les valeures des position d'une image
    	DataModule7->ADOQueryCoups->Open();
     
    	AnsiString Name;
    	Name = DataModule7->ADOQueryCoups->FieldValues["Gm_BName"];
    	AnsiString PosX;
    	PosX = DataModule7->ADOQueryCoups->FieldValues["Gm_PosX"];
    	int _PosX= StrToFloat(PosX);
    	AnsiString PosY;
    	PosY = DataModule7->ADOQueryCoups->FieldValues["Gm_PosY"];
    	int _PosY= StrToFloat(PosY);
     
    	TComponent * control = FindComponent("Name");
    	if (control != NULL)
       ((TControl *)control)->Left=_PosX;
       ((TControl *)control)->Top=_PosY;
    ma manière de coder n'est peut-être pas propre mais ce m'est pas le pb ici ^^

  5. #5
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonjour,

    Je dirais a première vue que le problème est ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TComponent * control = FindComponent("Name");
    -> es tu sur d'avoir un composant, un objet, dont le 'Name' est "Name" ?

    Moi, je dirais que non ...

    ++
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    a mes je suis trop con mdr!!!

    c'est une variable donc pas de "" xD

    mais lool

  7. #7
    Membre chevronné
    Avatar de Gilles Louïse
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 421
    Points : 1 911
    Points
    1 911
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TComponent * control = FindComponent("Name");
    if (control != NULL)
    {
       ((TControl *)control)->Left=_PosX;
       ((TControl *)control)->Top=_PosY;
    }
    Et faites attention à ce code, il faut des parenthèses pour rassembler les deux instructions. Sinon n'ayez crainte, tout le monde fait des erreurs, ici ça doit être la fatigue.

    À bientôt
    Gilles

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    voila c'est encore moi

    j'ai essayé de faire la meme chose pour cacher une image, j'ai utilisé le code comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    TComponent * control = FindComponent(billenamedel);
    		if (control != NULL)
    		{
    			((TControl *)control)->visible=false;
    		}
    mais il me répond que visible n'est pas un membre de control....

  9. #9
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonjour,

    Pour agir précisément sur un TImage, tu devrais essayer de transtyper sur un TImage, comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ((TImage *)control)->Visible = false;
    ou bien passe éventuellement par un 'dynamic_cast', ou qqchose du même genre si jamais cela ne passais pas ...

    ++
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    merci je vais essayer

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/10/2010, 09h28
  2. Réponses: 2
    Dernier message: 27/07/2006, 13h57
  3. Pb pour changer la taille d'un Objet TImage dans une Form
    Par Gouyon dans le forum C++Builder
    Réponses: 10
    Dernier message: 06/06/2006, 18h01
  4. Réponses: 1
    Dernier message: 20/02/2006, 10h59
  5. [POO] Problème lors de l'appel d'une propriété d'un objet.
    Par akecoocoo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/08/2005, 08h51

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