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 :

Valeur reste inchangée


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut Valeur reste inchangée
    Bonjour, il se trouve que j'ai un problème assez génant. Bien que le programme soit loin d'être fini je vous donne le code afin que vous puissiez me dire d'ou provient l'erreur (du moins j'espere). Le code est très long à lire donc je vous conseille de lire que les parties "importantes". Merci de votre aide.


    Voici mon main

    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
    #include "Menu.h"
    
    int main()
    {
            initialisations();
    	Rectangle tmp(0,0,SCREEN_W/2,SCREEN_H/2, makecol(100,100,100));
    	Rectangle fond_rect(0,0,SCREEN_W-1,SCREEN_H-1,makecol(255,255,0));
    	Menu_Object img(2,0,tmp,true);
    	Menu_Object fond(2,1,fond_rect);
    	std::vector<Menu_Object> vect;
    	vect.push_back(fond);
    	vect.push_back(img);
    	Menu menu(vect);
    	menu.get_menu_object(1).set_visible(false);
            if(menu.get_menu_object(1).get_visible())
                   allegro_message("error");
            show_mouse(screen);
            boucle(menu,NULL);
            return 0;
    }
    Voici ma classe rectangle (je vous la donne mais je ne pense pas que se soit le 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    #ifndef DEF_RECTANGLE
    #define DEF_RECTANGLE
     
    #include <allegro.h>
    #include <string>
    #include "Structures_menu.h"
     
    class Rectangle
    {
    	private :
    		struct Emplacement position;
    		BITMAP*fond;
    		int col_fond;
    		bool redim;
    		int col_bordure;
    	public :
    		Rectangle(double,double,double,double,int, BITMAP*, int=-1);
    		Rectangle(double,double,double,double, BITMAP*, int=-1);
    		Rectangle(double,double,double,double,int, char*, int=-1);
    		Rectangle(double,double,double,double, char*, int=-1);
    		Rectangle(double,double,double,double,int, std::string, int=-1);
    		Rectangle(double,double,double,double, std::string, int=-1);
    		Rectangle(double,double,double,double, int=makecol(0,0,0), int=-1);
    		Rectangle();
     
    		bool is_in_rectangle(double,double);
    		bool is_in_rectangle(int,int);
    		BITMAP*get_bitmap_de_fond();
    		bool set_bitmap_de_fond(BITMAP*,bool);
    		bool set_bitmap_de_fond(char*,bool);
    		bool set_bitmap_de_fond(std::string, bool);
    		int get_col_fond();
    		bool set_col_fond(int);
    		bool get_redim();
    		bool set_bordure_col(int);
    		int get_bordure_col();
    		bool move_rectangle(int nb, std::string );
    		bool move_rectangle(int nb, char* );
    		bool set_rectangle(struct Emplacement);
    		Emplacement get_pos();
    };
    #endif
    Voici ma classe Menu_Object
    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
     
    #ifndef DEF_MENU_OBJECT
    #define DEF_MENU_OBJECT
     
    #include <vector>
    using std::vector;
     
    #include <allegro.h>
    #include "Rectangle.h"
     
     
    class Menu_Object
    {
    	protected :
    		int type;
    		bool selection;
    		int ordre;
    		bool visible;
    		Rectangle zone;
    	public :
    		Menu_Object(int,int,Rectangle&,bool=true);
     
    		int get_ordre();
    		int get_type();
    		void set_ordre(int);
    		bool get_selection();
    		void set_selection(bool);
    		bool get_visible();
    		void set_visible(bool);
    		Rectangle get_rectangle();
    		virtual void dessiner();
    };
     
    #endif

    Je vous donne aussi son .cpp

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    #include "Menu_Object.h"
    #include "Rectangle.h"
    #include <algorithm>
     
    Menu_Object::Menu_Object(int type, int ordre, Rectangle& rect, bool visib)
    {
    	this->type=type;
    	this->ordre=ordre;
    	zone=rect;
    	visible=visib;
    }
     
    int Menu_Object::get_ordre()
    {
    	return ordre;
    }
    int Menu_Object::get_type()
    {
    	return type;
    }
    void Menu_Object::set_ordre(int ordre)
    {
    	this->ordre=ordre;
    }
    bool Menu_Object::get_selection()
    {
    	return selection;
    }
    void Menu_Object::set_selection(bool setting)
    {
    	selection=setting;
    }
    bool Menu_Object::get_visible()
    {
    	return visible;
    }
     
    void Menu_Object::set_visible(bool visible)
    {
    	this->visible=visible;
    }
     
    Rectangle Menu_Object::get_rectangle()
    {
    	return zone;
    }
     
     
    void Menu_Object::dessiner()
    {
    	if(visible==false)
    		return ;
    	if(zone.get_bitmap_de_fond()==NULL)
    		rectfill(screen,zone.get_pos().x1,zone.get_pos().y1,
    						zone.get_pos().x2,zone.get_pos().y2,zone.get_col_fond());
    	else
    	{
    		if((zone.get_redim()==false)||(zone.get_col_fond()<0))
    		{
    			masked_stretch_blit(zone.get_bitmap_de_fond(),screen,0,0,
    								zone.get_bitmap_de_fond()->w,zone.get_bitmap_de_fond()->h,
    								zone.get_pos().x1,zone.get_pos().y1,
    								zone.get_pos().x2-zone.get_pos().x1,
    								zone.get_pos().y2-zone.get_pos().y1);
    		}
    	}
    }

    Et pour finir je vous donne la classe Menu

    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
    #ifndef DEF_MENU
    #define DEF_MENU
     
    #include <allegro.h>
    #include "Menu_Object.h"
     
    class Menu
    {
    	private :
    		vector<Menu_Object> MyMenu;
    		bool(*fc_to_exit)(Menu&, void*);
    		void(*exit_function)(Menu,void*);
    	public :
    		Menu(vector<Menu_Object>, void(*exit_function)(Menu,void*)=NULL);
    		Menu(Menu_Object, void(*exit_function)(Menu,void*)=NULL);
    		void set_fc_to_exit(bool(*)(Menu&,void*));
    		bool do_fc_to_exit(void*);
    		void add_object(Menu_Object);
    		int get_num_objects();
    		Menu_Object& get_menu_object(int);
    		void exit_fc(void*param);
    		bool is_on_object(int,double, double);
    		void dessiner();
    };
    #endif
    Je rajoute get_menu_object :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Menu_Object& Menu::get_menu_object(int object)
    {
    	if((object>=MyMenu.size())||(object<0))
    	{
    		allegro_message("error get_menu_object");
    		return MyMenu[0];
    	}
    	Menu_Object reference=MyMenu[object];
    	return reference; 
    }
    Et voila.

    Et le problème s'est qu'il m'affiche le message error (voir ligne rouge dans le main).

    Merci pour votre aide.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    C'est quoi l'erreur exacte?

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut
    Il rentre dans le If ce qui signifie que le set_visible à échoué

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    Bonsoir,

    je ne connais pas du tout la couche graphique que vous utilisez, mais est-ce que les index 1 ne devraient pas plutôt être 0, comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    menu.get_menu_object(0).set_visible(false);
    if(menu.get_menu_object(0).get_visible()) ...
    ?

    [edit]j'ai supposé que le fond et l'image sont un couple obligatoire et non deux objets séparés[/quote]
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut
    0 se serait pour changer l'objet fond alors que la je souhaite rendre l'objet img invisible. Ce sont 2 objets séparés qui servent pour un test d'une autre partie du programme

  6. #6
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    ok, désolé, la supposition que j'avais placé dans l'[edit] est donc fausse

    est-ce que set_visible() retourne une valeur indiquant si la chose c'est bien passée (et donc n'est pas void set_visible(...))?
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 01/02/2015, 11h55
  2. [Débutant] Attendre tant que l'etat d'un textbox reste inchangé
    Par seb28310 dans le forum VB.NET
    Réponses: 1
    Dernier message: 31/01/2015, 23h55
  3. [Lazarus] [Mac OS] Le curseur reste inchangé à la sortie d'un TMemo
    Par gibet_b dans le forum Lazarus
    Réponses: 3
    Dernier message: 14/12/2012, 22h40
  4. Valeur variable reste inchangée
    Par gator dans le forum Langage
    Réponses: 4
    Dernier message: 18/11/2009, 19h05
  5. Réponses: 11
    Dernier message: 20/09/2007, 13h31

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