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 :

Inserer des images dynamiquement


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut Inserer des images dynamiquement
    Bonjour,

    Je développe en ce moment un programme en C++Builder5 qui siùule une file d'attente de personne. J'ai bien avancé en C, mais je voulais une interface graphique facile a réaliser pour représenter les personnes dans la file d'attente à l'aide d'image, voilà pourquoi je suis passer au C++Builder.

    Les arrivée sur la file d'attente sont une liste linéaire chainée dynamique, à chaque arrivée on ajoute un maillon à la liste....etc
    Ce que je cherche maintenant c'est de représenter ces maillons qui s'ajoute à la liste par des images. c-a-d à chaque arrivée on voit sur l'interface une image qui arrive puis l'autre puis l'autre...

    Les arrivées et le service sont aléatoire, et la file est supposé de taille illimité, donc je peux pas insérer 100images et les faires défiler l'une aprés l'autre.
    En C j'ai représenté les arrivé par du texte genre ("arrivée personne1"..."arrivée personne2"...."personne1 servi"....).

    Pouriez vous m'indiquer comment insérer des images ? j'ai commencé avec ceci mais j'arrive pas a afficher l'image sur la form.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    TImage *img = new TImage(0);
       img->Name="image2";
       img->Picture= Form1->Image1->Picture ;
       img->Left=20;
          img->Top=20;
             img->Width=120;
                img->Height=120;
     
       Form1->InsertComponent(img);
       img->Visible=true;

    Merci pour l'aide

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Citation Envoyé par aamad Voir le message
    Bonjour,
    Pouriez vous m'indiquer comment insérer des images ? j'ai commencé avec ceci mais j'arrive pas a afficher l'image sur la form.

    TImage *img = new TImage(0);
    img->Name="image2";
    img->Picture= Form1->Image1->Picture ;
    img->Left=20;
    img->Top=20;
    img->Width=120;
    img->Height=120;

    Form1->InsertComponent(img);
    img->Visible=true;
    Ton Image n'a pas de parent.
    Si tu crée une Image, il faut déjà que tu la crée avec en paramètre la form dans laquelle tu la veux, et ensuite il faut que tu lui affecte son parent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TImage *img = new TImage(Form1);
    img->Parent = Form1;

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup ça marche !

    alors pour en faire profiter tout le monde voilà la récap du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TImage *img = new TImage(Form1); // Form1 Le parent de l'image 
    img->Parent = Form1;
     
    img->Name="image3"; //donner un nom à l'image
    img->Picture= Form1->Image1->Picture ; //copier l'image à afficher d'une image déja insérer
    img->Left=20;      //définir la position horizontale
    img->Top=20;   //définir la position verticale
    img->Width=120;  //définir la largeur
    img->Height=120; //définir la hauteur

    merci encore kurul1
    super ce forum

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    salut, j'ai encore un pti problème.

    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
    i++;
    TImage *img ;
    img = new TImage(Form1);
    img->Parent = Form1;
     
    AnsiString a="personne" ;
    char buf[10];
    sprintf(buf, "%d", (i));
       Form1->Label2->Caption=a+buf;
     
       img->Name=Form1->Label2->Caption.c_str();
       img->Picture= Form1->Image1->Picture ;
       img->Left=20+i*10;
       img->Top=20;
       img->Width=120;
       img->Height=120;
                        img->Visible=true;
          Form1->Label1->Caption=img->Name;
    ce bout de code que j'ai mi dans un Onclick d'un bouton ne crée qu'une seul image sur la form en lui changeant uniquement le nom à chaque clique, alors que ce que je cherche est +ieurs images chacune avec son nom, et qui s'affiche sur la form l'une prés de l'autre à chaque clique.

    Comment faire ?

  5. #5
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Déjà, je vois que tu as déjà une Image qui existe sur ta form vu que tu lui file la picture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    img->Picture= Form1->Image1->Picture ;
    C''est donc la même Image que tu veux charger à chaque fois ?

    Pour tes images, ce que tu peux faire, c'est utiliser une liste

    à chaque fois que tu ajoute une Image, tu l'a met dans une liste, comme ca tu n'a pas de souci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // Dans le .h de ta form
    TList *ListeImage;
     
    // Dans le constructeur de ta form
    ListeImage = new TList();
     
    // Dans ta fonction de click
    TImage *img ;
    .....
     
    // Tu ajoute l'image dans la liste des Images
    ListeImages->Add(img);
    Ainsi, toutes tes Images sont mémorisée.
    ne pas oublié quand tu as terminé de vider ta liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for(int i = (ListeImages->Count - 1); i >=0; i--)
    {
       // On récupère l'image
       TImage *img = (TImage *)(ListeImages->Items[i]);
     
       // On détruit l'image
       delete img;
       img = NULL;
    }
     
    // On finit de vider la liste
    ListeImages->Clear();

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Ce que je veux c'est afficher plusieurs instances de cette image sur la form.
    A chaque clique sur le bouton je doit créer une nouvelle image auquel je lui donne un nom et position, picture reste la meme pour le moment.
    je veux simuler des arrivées de personnes dans une file d'attente, je l'ai fais en C de façon textuelle, maintenant je veux que ça soit les images a la place du text. Espérant que j'ai mieux expliqué mon problème.

    kurul1 j'ai essayé ton code avec imageList, mais g pas compris comment afficher cette liste d'image.

    sinon, y a t'il possibilité de construire une liste linéaire chainé ayant comme structure une image et le pointeur suivant.
    Au lieu de sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct fa
    {
    	char nom;
    	struct fa *suivant;
    };
    le nom remplacé par l'image, donc a chaque nouveau maillon il y a insertion d'une nouvelle image sur la form.


    Merci encore

  7. #7
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    la liste te sert juste à stocker tes images pour pouvoir les retrouver.
    L'affichage, c'est toi qui doit le gérer.

    Je ne sais pas comment tu veux afficher tes Images sur ta form.
    Explique moi comment tu veux gérer ton affichage pour que je puisse t'aider.

    Ensuite, pourquoi construire une liste chainée pendant que tu as TList qui existe.

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Voilà tu peux trouver mon programme sur ce lien pour y voir mieux. c'est en builder 5.

    http://rapidshare.com/files/213334667/TP_MS.rar.html

    intéresse toi au bouton courbe qui est temporaire pour exécuter la procedure d'insertion des images sur la form, le label c'est pour voir le nom de l'image, a chaque fois que tu cliques sur le bouton courbe l'image est inséré a un endroit différent ce qui fait que c juste un déplacement, or moi je veux que ça soit +ieurs images a chaque clique une nouvelle image dans la nouvelle position.

    merci pour votre patience

  9. #9
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Est-ce que tu aurais des imprimes écran car moi je travaille sous Borland Developper studio 2006 et je ne peut ni compiler ni exécuter ton programme.

    Je viens de jeter un oeil à ton code.

    Déjà, je vois que tu crées la liste dans la fonction de ton bouton. ta liste il faut la créer dans ta form et pas dans la fonction du bouton car sinon elle existe que dans ta fonction.

    Ton image, tu la charge depuis un fichier Image ou depuis une ressource.

    Je pense qu'au lieu de transférer ton Picture, tu devrais la recharger à chaque fois, cela ne pause aucun problème.

    Voila ce que je te propose

    Unit1.h
    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
    29
     
    //---------------------------------------------------------------------------
     
    #ifndef Unit1H
    #define Unit1H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ExtCtrls.hpp>
    #include <jpeg.hpp>
    #include <Buttons.hpp>
    //---------------------------------------------------------------------------
    class TForm1 : public TForm
    {
    __published:	// IDE-managed Components
    ....
    private:	// User declarations
    public:		// User declarations
        // Liste des images
        TList *ListeImages;    
     
        __fastcall TForm1(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm1 *Form1;
    //---------------------------------------------------------------------------
    #endif
    Ensuite dans le constructeur de ta form, tu fais ceci

    Unit1.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
        // On crée la liste des Images
        ListeImages = new TList();
    }
    Et dans la fonction de ton bouton tu fait ceci
    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
    29
    30
     
    void __fastcall TForm1::BitBtn3Click(TObject *Sender)
    {
       ...
     
        // Création de l'image
        TImage *img new TImage(Form1);
     
        // Parent de l'image
        img->Parent = Form1;
     
        ....
     
       // Chargement de l'image depuis le fichier
       Img->LoadFromFile(CHEMIN DE TON FICHIER IMAGE);
     
       // Positionnement de l'image
       img->Left=20+i*10;
       img->Top=20;
       img->Width=120;
       img->Height=120;
     
       // On rend l'image visible
       img->Visible=true;
     
       // On ajoute l'image dans la liste des Images
       ListeImages->Add(img);
     
       ...
    }
    Concernant le positionnement de ton image, il y a une fonction toute faite qui te permet de tout faire en une seule ligne.
    C'est la fonction SetBounds(left, top, width, height)

    Ce qui donne pour ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       // Positionnement de l'image
       img->SetBounds((20+i*10), 20, 120, 120);
    Après quand tu quittes ton programme, il ne faut pas oublier de vider la liste des Images, comme je te l'ai montrer plus haut. A toi de voir ou tu veux vider la liste.

    Voilà
    Si tu as des questions, n'hésite pas

  10. #10
    Membre confirmé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Points : 523
    Points
    523
    Par défaut
    Il faut aussi rajouter la ligne suivante dans le onclose de ta form :
    Sinon, tu ne libères pas la mémoire que tu as allouée.

    Et il faut aussi que tu delete toutes les images encore référencées par le TList.

  11. #11
    Membre chevronné

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Citation Envoyé par gandf Voir le message
    Il faut aussi rajouter la ligne suivante dans le onclose de ta form :
    Sinon, tu ne libères pas la mémoire que tu as allouée.

    Et il faut aussi que tu delete toutes les images encore référencées par le TList.

    Salut !

    Plus exactement, dans la OnClose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // on purge la liste, ce qui ne détruit pas les objets
    ListeImages->Clear();
    // on détruit la liste
    delete ListeImages;
    Il n'est pas nécessaire de supprimer les images, puisque TImage hérite de TComponent qui est détruit par son propriétaire.

    A plus !

  12. #12
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Merci ça marche comme je le veux maintenant.

    Je vous tiens au courant de l'évolution du programme.

  13. #13
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Moi je préfère détruire également les Images pour être sur et je fais ceci (ce que j'avais posté plus haut

    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
     
    for(int i = (ListeImages->Count - 1); i >=0; i--)
    {
       // On récupère l'image
       TImage *img = (TImage *)(ListeImages->Items[i]);
     
       // On détruit l'image
       delete img;
       img = NULL;
    }
     
    // On finit de vider la liste
    ListeImages->Clear();
     
    // on détruit la liste
    delete ListeImages;
    ListeImages = NULL;
    Après tu le met soit dans le OnClose soit dans ton bouton Quitter.

  14. #14
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Mars 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    coucou,
    comme promis je vous tiens au courant de l'avancement de mon programme (simulation d'une file d'attente) voila un lien pour télécharger mon programme.

    http://rapidshare.com/files/23246054...tente.rar.html


    Merci pour votre aide

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/08/2013, 18h18
  2. [VB6] inserer des images dans picturebox et sauvegarder BMP
    Par todac dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 04/05/2007, 14h25
  3. [Image] image map dans des images dynamique?
    Par xtaze dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 19/05/2006, 17h28
  4. [XML/CSS/XSL] Problème d'affichage des images "dynamiqu
    Par popol55 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 06/04/2006, 16h24
  5. inserer des images dans une base de données
    Par alilou04 dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/06/2004, 18h54

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