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 :

Même code pour plusieurs shapes


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Par défaut Même code pour plusieurs shapes
    Bonjour,

    Je dois mettre plusieurs fois le meme code dans un timer pour plusieurs shapes, au fait, je veux faire disparaitre mes shapes (Shape1->Visible = false) quand l'utilisateur fait quelque chose, ça j'arrive a faire, par contre j'ai 10 shapes et je veux pas a chaque fois marquer mon test juste en changeant le nom du shape (Shape1, Shape2, Shape3, etc..).. Y-a-t-il une solution ?

    Merci

  2. #2
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Chaque Shape est une série dans ton Graph.

    Tu as la possibilité d'accéder à une série par son indice dans la liste des Séries de ton Chart.

    Exemple accès au shape à l'indice 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       TChartShape *Shape = (TChartShape *)(Chart->Series[1]);
    tu pourrais déterminé l'indice du shape à effacé et y accéder. Ainsi tu ne répète pas ton code plusieurs fois.

  3. #3
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut,
    Il existe une méthode pour parcourir tous les composants, par exemple ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for ( int x=0 ; x<Form1->ControlCount ; x++)
            {
                if(Form1->Controls[x]->Name == "Edit"+IntToStr(PID))
                    ((TEdit*)Form1->Controls[x])->Text = "Execution thread "+IntToStr(PID)+" ID = "+ IntToStr(_threadid) +" , heure = "+ IntToStr(t.ti_hour)+":"+ IntToStr(t.ti_min)+":"+ IntToStr(t.ti_sec)+":"+IntToStr(t.ti_hund/10);
            }
    le code où j'avais lancer 10 Thread avec le même code mais un numéro d'ID propre et je voulais que chaque Thread écrit dans le Edit qui lui est associé.
    Tread ID PID, associé à Edit PID.

    Tu peux faire de même et Tester le type de composant, son nom ou toutes les autres propriétés communes.
    Attention, plus tu auras de composant, plus ta boucle de recherche sera longue.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Par défaut
    Merci de vos réponses, pour bandit boy je vois pas du tout comment je pourrais faire ca.. Sachant que j'ai 10 Shapes..

  5. #5
    Membre éprouvé
    Inscrit en
    Mars 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 105
    Par défaut
    Bonjour,

    on peut utiliser la méthode "FindComponent".

    Cf http://www.developpez.net/forums/sho...=findcomponent

    Nicolas

  6. #6
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Peux tu en donner un peu plus?

    Etats des Shapes avant et après tes test ainsi que les conditions de tests.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Par défaut
    Ecoute j'ai testé avec un Shape, et je me suis rendu compte que, quand on lui mettais la propriété Visible a false, si un objet y passe quand meme, il rebondit.. Au fait mon programme que j'essaie de faire, c'est le jeux météoroïde, on a une boule qui ricoche partout avec un barre en bas qui se deplace avec les fleches.. Tout ca j'ai deja fait, maintenant, j'essaye de faire des petits rectangles (C'est mes shapes) et quand la boule y tappe, elle rebondit puis le triangle disparait..
    Merci

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2007
    Messages : 163
    Par défaut
    Voici mon code au ca oui qui fonctionne mais que pour le Shape7 et moi je voudrais l faire por tout les shapes au faite..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           if(BoulePosY <= (Shape7->Top + 35)) {
             Shape7->Visible = false ;
             BouleIncrY = BouleIncrY * -1 ;
             }

  9. #9
    Membre éprouvé
    Inscrit en
    Mars 2002
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 105
    Par défaut
    Bonjour,

    dans ce cas là, il est peut être plus judicieux de stocker les TShapes dans un tableau (à l'initialisation) pour ensuite y accéder plus rapidement et facilement (via leur indice).

    Nicolas

  10. #10
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Alors tu peux faire comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        for ( int x=0 ; x<Form1->ControlCount ; x++)
        {
            if(Form1->Controls[x]->Name.Pos("Shape") != 0)
            {
                 if(BoulePosY <= (((TShape*)Form1->Controls[x])->Top + 35))
                 {
                       ((TShape*)Form1->Controls[x])->Visible = false ;
                       BouleIncrY = BouleIncrY * -1 ;
                 }
            }
        }
    Et tu exécute ce code pour un évennement d'UN Shape. Ensuite dans l'inspecteur d'évennement (tu fais F11, et tu vas dans l'onglet Evennement) tu choisis cet évennement dans tous les autres Shape.

    Par exemple tu peux choisir d'exécuter l'évennement OnClick du bouton1, lors d'un click sur le bouton 2, en choisissant "Button1Click" dans l'évennement Onclick du bouton 2.

  11. #11
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Peut-être en mettant un peu plus de réflexion dans ce développement.

    Ton problème est d'avoir sans arrêt à traiter des objets qui entrent en lice alors qu'il ne devraient plus être pris en compte à un moment de l'histoire.
    Pourquoi ne pas superviser tes collisions (s'il s'agit de collisions) avec deux listes s'il s'agit de travailler sans cesse avec les mêmes 10 shapes :
    - une liste pour les objets visibles
    - une liste pour les objets invisibles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TList *Enjeu;
    TList *Horsjeu;
    Pour faire disparaître un shape, l'astuce est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Shape->Visible = false;
    Enjeu->Delete(Enjeu->IndexOf(Shape)); //ne sera plus pris en compte dans le traitement
    Horsjeu->Add(Shape); // en attendant de réintégrer le jeu
    Pour l'analyse des objets toujours en lice, il ne restera donc plus qu'à analyser les shapes maintenus dans la liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(int j = 0; j < Enjeu->Count; j++)
    {
    TShape *Shape = (TShape*)Enjeu->Items[j];
    //... la suite
    }
    C'est juste une idée !

    A plus !

Discussions similaires

  1. Changement de codes pour plusieurs pages en même temps
    Par d-85a dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/05/2013, 23h38
  2. [XL-2003] Avoir le même code pour plusieurs feuilles
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/01/2010, 13h29
  3. [VBA Excel] Une même macro pour plusieurs CheckBox
    Par Choupett' dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 16/06/2006, 13h54
  4. [excel] même code sur plusieurs feuilles
    Par sabotage dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/11/2005, 12h23
  5. Réponses: 4
    Dernier message: 06/11/2003, 10h37

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