Historique des modifications - Message

Message #11076

Sujet: SpinBox et nombres à virgules floatantes...


Type Date Auteur Contenu
Création du message 20-01-2013 17:52:39 Akabane87
En fait je l'ai le sdk de dx9 mais il me demandait des fichiers .h de dx7 et 8 quand je compilais les sources d'irrlicht 1.7.3. Je viens de compiler irrlicht 1.8 sans problèmes avec juste le sdk dx9 donc du coup ce problème est réglé. Ceci dit j'ai rajouté aux directives de compil /Zi pour avoir les symboles d'irrlicht pour débugger correctement mais ça ne marche pas mieux. Visiblement il veut les pdb de la DLL et je ne sais pas comment les obtenir...

Du coup à la place j'ai debuggé à la warrior en filant directement à la spinbox diverses entrées bonnes ou mauvaises pour situer d'où vient le problème.
Et la conclusion est que c'est la fonction setValue() qui fait de la merde. J'ai mis un data breackpoint dans visual est la seule fonction qui modifie le texte de ma spinbox entre le moment où ma valeur est bonne et le moment où elle est fuckée est cette fonction.

Et si je refais manuellement le code du setValue il fonctionne correctement :

Code c++ :

					m_DialogSpeedSpinBox->getEditBox()->setText(L"1.00000");// je reset ma spin box à une valeur normale une fois le bug déclenché

					f32 val = m_DialogSpeedSpinBox->getValue();// ma valeur est correct ici : je refais manuellement le code du onevent de la spinbox quand on l'incrément 
					val += 0.1f;
					wchar_t str[100];
					core::stringw FormatString = "%.";
					FormatString += 5;
					FormatString += "f";

					// contenu du setValue de la spinBox
					swprintf(str, 99, FormatString.c_str(), val);
					m_DialogSpeedSpinBox->getEditBox()->setText(str);

					// appel au verifyValueRange();
					val = m_DialogSpeedSpinBox->getValue();
					if ( val+core::ROUNDING_ERROR_f32 < m_DialogSpeedSpinBox->getMin() )
						val = m_DialogSpeedSpinBox->getMin();
					else if ( val-core::ROUNDING_ERROR_f32 > m_DialogSpeedSpinBox->getMax() )
						val = m_DialogSpeedSpinBox->getMax();
					// tout est ok avec ce code 

					// par contre si je fais ça via la fonction setValue de la dll ça me donne un float fucké avec une virgule
					//m_DialogSpeedSpinBox->setValue(val);

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
134 invités en ligne
membre en ligne: -
RSS Feed