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 :

probleme comment " indexer" un objet


Sujet :

C++Builder

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Par défaut probleme comment " indexer" un objet
    salut, je souhaite utiliser une vingtaine de TrackBar et j aimerais pourvoir
    entre-autre ranger la valeur de chacun des trackBar dans un tableau d une
    façon automatique en faisant comme dans une boucle
    le but recherché serait l'equivalent de ca :
    for(int i=1;i<=20;I++)
    Tab[i]=TrackBar[i]->Position ; Mais je sais que ca ne marche pas comme une variable
    Comment pouvoir y remédier.

    et j aimerais aussi en utilisant 2 timers pour creer un cycle de 100 ms par ex ,a chaque fois que je bouge un des 20 trackbar , qu'un fonction récupère l'index ( de 1 a 20 ) du trackbar concerné afin que ds timer1timer je puisse ecrire
    tab[index]=Trackbar[index]->Position; ainsi ca m evite d ecrire dans chaque
    evenement onchange des trackbar quasiment les memes instructions

    Merci de m aider

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Par défaut
    j ai eu le meme probleme il y a quelques temps

    c est pas résolu

    on m avait proposé de creer des objets dynamiquement

    leur ordre de creation correspondant à l index

    voilà , ... , je suivrai de pres ce sujet

  3. #3
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par défaut
    Pour ta boucle sur les TrackBar, tu peux utiliser FindComponent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      TTrackBar *tb;
      for(int i=1; i<10;i++)
      {
         tb = (TTrackBar*) FindComponent( "TrackBar" + IntToStr(i) ) ;
         Tab[i] = tb->Position ;
      }
    A toi d'ajouter les tests, protections pour ne pas générer d'exception si un composant n'est pas trouvé.

    Pour l'autre question, affecte le même événement OnChange a tous tes TrackBar puis tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void __fastcall TForm1::TrackBar1Change(TObject *Sender)
    {
    //récupération du TrackBar ayant généré l'événement  
      TTrackBar *tb = (TTrackBar*) Sender;
      [...]
    }
    Par contre quel est l'intérêt d'avoir un tableau avec les positions de tes TrackBar?

  4. #4
    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 !

    On suppose que tous les trackbars existent et que l'on a affecté une OnChange à TrackBar1
    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
    21
    22
    23
    24
    25
    26
    27
    28
     
    TTrackBar *TrackBars[4]; // donc une vingtaine chez toi
    //----------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    //Passage obligé pour remplir le tableau :
    TrackBars[0] = TrackBar1;
    TrackBars[1] = TrackBar2;
    TrackBars[2] = TrackBar3;
    TrackBars[3] = TrackBar4;
    //... même s'il y en a une vingtaine ... 
    // c'est pas la mer à boire avec du copier coller intelligent et 
    // une suite de modifications qui en seront tout aussi intelligentes
     
    //Code facultatif qui ne dépend que de ce qui aura été initialisé à l'édition
    for(int j = 1; j < 4; j++)
        {
        TrackBars[j]->Tag = j;
        TrackBars[j]->OnChange = TrackBar1->OnChange;
        }
    }
    //----------
    void __fastcall TForm1::TrackBar1Change(TObject *Sender)
    {
    Label1->Caption = ((TTrackBar*)Sender)->Position;
    }
    //----------
    A noter que si on sélectionne tous les TrackBars, on devrait normalement pouvoir leur affecter une unique OnChange.
    Il n'y a bien que pour le Tag où il faut procéder un par un (au fond ... ça va assez vite puisque l'inspecteur d'objets de BCB reste figé sur la dernière propriété qui a été manipulée, donc de trackbar en trackbar ...) !
    Normalement, on n'a que le tableau à initialiser !

    A plus !

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/05/2005, 16h58

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