Historique des modifications - Message

Message #2539

Sujet: Problème avec checkbox


Type Date Auteur Contenu
Dernière modification 03-07-2007 21:31:36 dark calculator
salut

En fait je crois que le code de izguit ne va pas debuit le debut(sous toute reserve) Car il ne regarde pas si tu a clique dessus mais si elle est coche donc par exemple si carre est coche et que tu clique sur rond alors il y aura rond et carre de cocher. Ensuite vient ton code qui regarde en premier si carre est coche : c'est le cas du coup il decoche rond et losange. Et donc les autres if ne s'applique pas. Au final on a toujours carre de coche meme si on a clique sur triangle. Le fait que parfois ca marche tient quasiment conte du hasard.
De plus ton code va si tu n'a pas d'autre check box mais si c'etait le cas tu aurait le meme bug qu'avant sachant que la checkbox cbCarre n'existe pas forcement si c'est une autre sur laquelle on a clique.

Donc je te donne le code que j'écrirait à ta place à vérifier car je ne peut pas le compiler dans l'immédiat :

class MyEventReceiver : public IEventReceiver
{
public:
	virtual bool OnEvent(SEvent event)
	{
		if (event.EventType == EET_GUI_EVENT)
		{
			s32 id = event.GUIEvent.Caller->getID();
			IGUIEnvironment* env = Device->getGUIEnvironment();
                        [....]
                              case EGET_CHECKBOX_CHANGED:
                              {
                                      switch (id)
                                      {
                                              case 1:
                                                  cbCarre->setChecked(true);
                                                  cbRond->setChecked(false);
                                                  cbLosange->setChecked(false);
                                              break;
                                              case 2:
                                                  cbCarre->setChecked(false);
                                                  cbRond->setChecked(true);
                                                  cbLosange->setChecked(false);
                                              break;
                                              case 3:
                                                  cbCarre->setChecked(false);
                                                  cbRond->setChecked(false);
                                                  cbLosange->setChecked(true);
                                              break;
                                         }
                               }[...]

Et il faut donner une id a tes checkbox par exemple 1,2,3 pour la donner il faut remplacer -1 par l'id quand tu cree une check box

Sinon j'ai eu une autre idée de code :

class MyEventReceiver : public IEventReceiver
{
public:
	virtual bool OnEvent(SEvent event)
	{
		if (event.EventType == EET_GUI_EVENT)
		{
			s32 id = event.GUIEvent.Caller->getID();
			IGUIEnvironment* env = Device->getGUIEnvironment();
                        [....]
                              case EGET_CHECKBOX_CHANGED:
                              {
                                          env->getRootGUIElement()->getElementFromId(1)->setChecked(false);
                                          env->getRootGUIElement()->getElementFromId(2)->setChecked(false);
                                          env->getRootGUIElement()->getElementFromId(3)->setChecked(false);
                                          env->getRootGUIElement()->getElementFromId(id)->setChecked(true);
                               }[...]

Je pense que le deuxieme est mieu mais a verifier en tous cas il y a moin de test à faire mais une instructiuon de plus, à voir.
Sinon tu saurait peut etre obligé de remplacer env->getRootGUIElement()->getElementDromId(?)->setChecked(?); par ((IGUICheckedBox*) env->getRootGUIElement()->getElementDromId(1))->setChecked(false);

Voila je crois que j'ai encore une fois pas ete totalement claire n'hesite pas a posé des questions sur mon code qui ne passerat peut etre pas a la compilation car je suis pas sur des nom de fonctions

a+

dark calculator
Création du message 03-07-2007 15:54:47 dark calculator
salut

En fait je crois que le code de izguit ne va pas debuit le debut(sous toute reserve) Car il ne regarde pas si tu a clique dessus mais si elle est coche donc par exemple si carre est coche et que tu clique sur rond alors il y aura rond et carre de cocher. Ensuite vient ton code qui regarde en premier si carre est coche : c'est le cas du coup il decoche rond et losange. Et donc les autres if ne s'applique pas. Au final on a toujours carre de coche meme si on a clique sur triangle. Le fait que parfois ca marche tient quasiment conte du hasard.
De plus ton code va si tu n'a pas d'autre check box mais si c'etait le cas tu aurait le meme bug qu'avant sachant que la checkbox cbCarre n'existe pas forcement si c'est une autre sur laquelle on a clique.

Donc je te donne le code que j'écrirait à ta place à vérifier car je ne peut pas le compiler dans l'immédiat :

class MyEventReceiver : public IEventReceiver
{
public:
	virtual bool OnEvent(SEvent event)
	{
		if (event.EventType == EET_GUI_EVENT)
		{
			s32 id = event.GUIEvent.Caller->getID();
			IGUIEnvironment* env = Device->getGUIEnvironment();
                        [....]
                              case EGET_CHECKBOX_CHANGED:
                              {
                                      switch (id)
                                      {
                                              case 1:
                                                  cbCarre->setChecked(true);
                                                  cbRond->setChecked(false);
                                                  cbLosange->setChecked(false);
                                              break;
                                              case 2:
                                                  cbCarre->setChecked(false);
                                                  cbRond->setChecked(true);
                                                  cbLosange->setChecked(false);
                                              break;
                                              case 3:
                                                  cbCarre->setChecked(false);
                                                  cbRond->setChecked(false);
                                                  cbLosange->setChecked(true);
                                              break;
                                         }
                               }[...]

Et il faut donner une id a tes checkbox par exemple 1,2,3 pour la donner il faut remplacer -1 par l'id quand tu cree une check box

Sinon j'ai eu une autre idée de code :

class MyEventReceiver : public IEventReceiver
{
public:
	virtual bool OnEvent(SEvent event)
	{
		if (event.EventType == EET_GUI_EVENT)
		{
			s32 id = event.GUIEvent.Caller->getID();
			IGUIEnvironment* env = Device->getGUIEnvironment();
                        [....]
                              case EGET_CHECKBOX_CHANGED:
                              {
                                          env->getRootGUIElement()->getElementFromId(1)->setChecked(false);
                                          env->getRootGUIElement()->getElementFromId(2)->setChecked(false);
                                          env->getRootGUIElement()->getElementFromId(3)->setChecked(false);
                                          env->getRootGUIElement()->getElementFromId(id)->setChecked(true);
                               }[...]

Je pense que le deuxieme est mieu mais a verifier en tous cas il y a moin de test à faire mais une instructiuon de plus, à voir.
Sinon tu saurait peut etre obligé de remplacer env->getRootGUIElement()->getElementDromId(?)->setChecked(?); par ((IGUICheckedBox*) env->getRootGUIElement()->getElementDromId(1))->setChecked(false);

Voila je crois que j'ai encore une fois pas ete totalement claire n'hesite pas a posé des questions sur mon code qui ne passerat peut etre pas a la compilation car je suis pas sur des nom de fonctions

a+

dark calculator

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
144 invités en ligne
membre en ligne: -
RSS Feed