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 :

Ajouter dynamiquement une TImage a un TForm / utiliser le "OnClick" de cette image


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par défaut Ajouter dynamiquement une TImage a un TForm / utiliser le "OnClick" de cette image
    Voila je fais un programme type bataille navale en c++ sous borland 5.

    J'ai donc une TForm nommé Form1.
    Je voudrais pouvoir rajouter "dynamiquement" des navires sur mon IHM.
    C'est a dire, quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Armee * _larmee;
    _larmee = new Armee ;
    //ça me lance le constructeur de bateau
    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
     
    Armee::Armee()
    {
            int i;
            i = Form1->ComponentCount;
            _image = new TImage(Form1);
            i = Form1->ComponentCount;   // componentcount a augmenté de 1
            _image->Picture->LoadFromFile("armee.bmp");
            _image->Left = 321;
            _image->Top = 50;
            _image->Height = 30;
            _image->Width = 60;
            _image->Enabled = true;
            _image->Visible = true;
            _image->AutoSize = true;
    }
    grace a une petite boucle de test j'ai pu voir que mon image etait bien dans la liste des components de la form (Components[])

    Malgré ça, l'image n'apparait pas sur mon IHM... et j'avoue que je ne comprends vraiment pas pourquoi.
    Si qq'un a une idée qu'il n'hesite pas.

    Merci merci.

  2. #2
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 22
    Par défaut Membre Parent
    En fait il faut que tu ajoute un composant TPicture a ta form

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    TPicture *p =new TPicture(Form1);
    if(p){
    p->Parent = Form1; // Affichage sur la fiche
    p->Left = ...; // Placement de ton image
    p->LoadFromFile(...);
    p->Show();
    }
    Il faut obligatoirement affecter une valeur à la propriété parent de l'image pour qu'elle s'affiche.

    En espérant avoir bien répondu

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

    Pour simplifier un peu ton code à la place de

    _image->Left = 321;
    _image->Top = 50;
    _image->Height = 30;
    _image->Width = 60;
    tu peut utiliser SetBounds(left, top, width, height) qui fait celà en une seule passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _image->SetBounds(321, 50, 60, 30);
    Comme l'indique Abargadon, c'est le Parent qui permet d'afficher l'objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _image->Parent = Form1;
    A plus !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par défaut
    Yes, merci bien pour l'info... vous n'imaginez pas le temps que j'ai perdu la dessus

    sympa le SetBounds() ^^

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par défaut
    Me voila deja face a un nouveau probleme, et de taille.

    Comment faire pour par exemple definir une fonction "OnClick" sur mon image cree dynamiquement?

    pour une image classique on ferait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void __fastcall TForm1::Image0Click(TObject *Sender)
    {
     
    }
    mais la... je me demande bien ce que je vais pouvoir ecrire
    (et surtout ou je vais l'ecrire? dans armee.h, dans ihm.h ?...)

    ps:
    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
    class Armee // version courte
    {
            public:
            //int, int sont les coordonnées x, y de l'armee
            Armee(string, string, int, int);
            ~Armee();
     
            private:
            int _id;
            TImage * _image;
            int _x;
            int _y;
            string _nomjoueur;
            string _couleur;
     
    };
    Est ce qu'il y aura moyen que ça soit gerer "directement" ou est ce qu'il va falloir que je passe par une feinte du style "a chaque click sur l'ihm je regarde les coordonnées du click et je recherche ce qu'il y a a cette place" ? :s

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

    Est-ce que par exemple, une classe dérivée de TImage ne serait pas immédiatement plus simple qu'une classe gérant un TImage ?

    Par ailleurs... elle sert à quoi cette image ?

    A plus !

  7. #7
    Rédacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par défaut
    Par contre, juste une remarque.

    Tu utilise Form1 dans ton objet Armee. Tu romps ainsi l'encapsulation.

    Tu devrais passer un TForm* en paramètre à ton constructeur, et travailler avec ce TForm, ceci afin que ton objet soit le moins dépendant d'autres.


    Cordialement,

    Arnaud

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

Discussions similaires

  1. [VBA] Ajouter dynamiquement une référence
    Par jpharand dans le forum VBA Access
    Réponses: 23
    Dernier message: 16/04/2010, 23h28
  2. Réponses: 1
    Dernier message: 10/06/2008, 22h17
  3. [DOM] Ajouter dynamiquement une zone de texte
    Par fadex dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 28/02/2007, 15h01
  4. Réponses: 7
    Dernier message: 01/03/2006, 18h14

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