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++ Discussion :

[variable dans nom de contrôle]


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 46
    Par défaut [variable dans nom de contrôle]
    Bonjour,

    j'utilise Borland C++ Builder v6.

    J'imagine que ce que je recherche n'est pas possible, mais sait-on jamais ?

    Voilà : je dispose de plusieurs TImage (24 au total), dont leur nom est "Image" + un numéro de 1 à 24.
    En fonction de la position d'une valeur dans un tableau d'entiers,
    j'aimerais accéder aux propriétés des TImages par du code du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (int i=0;i<23;i++)
    {
    if (tableau[i]==1)
    {
    "Image"+i->Picture->LoadFromFile("nimportekoi.bmp");
    }
    }
    Naturellement, cela ne marche pas.

    Pensez-vous qu'il existe une solution ?

    Par avance, merci.
    Nuclear.

  2. #2
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Bonjour

    Il faut que tu fasses un tableau d'images (et que tu lises/prennes des cours de C++)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <vector>
     
    // ...
     
    std::vector<image> tab_image(24);
     
    for (std::size_t i = 0; i < tab_image.size(); ++i)
    {
        tab_image[i].loadFromFile("nom_image.bmp");
    }
    http://www.cplusplus.com/reference/vector/vector/
    http://cpp.developpez.com/faq/cpp/?p...#STL_container

    Edit: typo

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 46
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    Bonjour

    Il faut que tu fasses un tableau d'images (et que tu lises/prennes des cours de C++)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <vector>
     
    // ...
     
    std::vector<image> tab_image(24);
     
    for (std::size_t i = 0 ; i < tab_image.size(); ++i)
    {
        tab_image[i].loadFromFile("nom_image.bmp");
    }
    http://www.cplusplus.com/reference/vector/vector/
    http://cpp.developpez.com/faq/cpp/?p...#STL_container
    Merci...
    Seulement je n'ai pas compris le <image> après std::vector.
    D'ailleurs ce code ne semble pas fonctionner.

    Ce qui risque de me poser problème ensuite, c'est comment afficher le contenu du tableau dans ma form ?

  4. #4
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    std::vector est un containeur générique, il peut stocker des int, des float, des double et probablement des image. Il faut lui indiquer le type entre chevrons (<type>).

    Voici un exemple de code qui créé des images et qui les utilises. Il faut bien comprendre que std::vector est un conteneur. Donc tu as accès directement à ton image (tab_image[i] est une image).
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    // g++ -Wall -Wextra -pedantic vector_image.cpp -o vector_image && ./vector_image
     
    #include <iostream>
    #include <vector>
    #include <string>
     
    // Voici une classe image (à remplacer par ton vrai type image)
    class image
    {
    public:
     
    	void load_from_file(std::string const & filename)
    	{
    		std::cout << "Chargement du fichier " << filename << std::endl;
    	}
    };
     
    // Voici une fonction qui utilise une image
    void display_image(image const & img)
    {
    	std::cout << "Affichage d'une image" << std::endl;
    }
     
    int main()
    {
    	// On créé un tableau de 6 images
    	std::vector<image> tab_image(6);
     
    	// Chargement des images
    	for (std::size_t i = 0; i < tab_image.size(); ++i)
    	{
    		tab_image[i].load_from_file("nom_image.bmp");
    	}
    	std::cout << std::endl;
     
    	// Utilisation des images
    	for (std::size_t i = 0 ; i < tab_image.size(); ++i)
    	{
    		display_image(tab_image[i]);
    	}
    	std::cout << std::endl;
     
    	return 0;
    }
    Et voilà la sortie (chargement et utilisation de 6 images) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Chargement du fichier nom_image.bmp
    Chargement du fichier nom_image.bmp
    Chargement du fichier nom_image.bmp
    Chargement du fichier nom_image.bmp
    Chargement du fichier nom_image.bmp
    Chargement du fichier nom_image.bmp
     
    Affichage d'une image
    Affichage d'une image
    Affichage d'une image
    Affichage d'une image
    Affichage d'une image
    Affichage d'une image

  5. #5
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    En C++, on utilisera surtout des iterateur pour parcourir des conteneurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    std::vector<image> tab_image(6);
     
            std::vector<image>::iterator it = tab_image.begin();
            std::vector<image>::const_iterator const end = tab_image.end();
     
    	// Chargement des images
    	for (; it != end ; ++it)
    	{
    		it->load_from_file("nom_image.bmp");
    	}
    En C++11, on pourra même utiliser ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    std::vector<image> tab_image(6);
     
            for( image & mon_image : tab_image )
                   mon_image.load_from_file("mon_image.bmp");

  6. #6
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    std::vector<image> tab_image(6);
     
            std::vector<image>::iterator it = tab_image.begin();
            std::vector<image>::const_iterator const end = tab_image.end();
     
    	// Chargement des images
    	for (; it != end ; ++it)
    	{
    		it->load_from_file("nom_image.bmp");
    	}
    En C++, on limite la portée des variables ! :O
    Donc, avant C++11 (on peux utiliser des typedef pour alléger l'écriture) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (std::vector<image>::iterator img = tab_image.begin(); img != tab_image.end(); ++img)
    {
    	img->load_from_file("nom_image.bmp");
    	// ou
    	(*img).load_from_file("nom_image.bmp");
    }
    La syntaxe de C++11 avec le "range-based for loop" est sympatique
    J'ai hésité à en parler, mais j'ai préféré me "concentrer" sur le vector.

Discussions similaires

  1. variable dans nom de fichier
    Par bernardhoso dans le forum z/OS
    Réponses: 6
    Dernier message: 07/05/2013, 11h15
  2. Variable dans nom de control
    Par Glherbier dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/11/2010, 12h10
  3. [Batch] Variable dans nom de variable
    Par vincent magnin dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 17/09/2009, 13h13
  4. SSIS - Variable dans nom fichier destination
    Par edony44 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/10/2007, 09h31
  5. Variable dans Nom d'une Textbox
    Par kristell dans le forum Windows Forms
    Réponses: 3
    Dernier message: 17/09/2007, 22h53

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