Probleme avec une edit box dont la variable associee est de type float

wannalurn Messages postés 47 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 26 juillet 2005 - 22 juil. 2005 à 20:40
wannalurn Messages postés 47 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 26 juillet 2005 - 26 juil. 2005 à 20:59
Salut
J'ai associe une variable de type float a une edit box. Alors automatiquement la valeur "0" apparait dans l'edit box quand aucune action n'est encore operee. Mon probleme est que j'aimerais controler ce qu'affiche l'edit box;
je m'explique: quand un bouton est active alors l'edit box affiche la valeur de la variable; dans le cas contraire j'aimerais qu'elle n'affiche absolument rien du tout car afficher "0" est comme si la valeur de ma variable est nulle alors que ce n'est pas le cas, c'est parce qu'elle n'existe pas du tout. J'ai essaye d'associer un type string a la variable associee a mon edit box mais
ca engendre trop d'erreurs pour mes valeurs float. Alors j'aimerais savoir si vous pouvez m'aider, en resume je voudrais tant qu'un certain bouton n'est pas active, ne rien afficher du tout dans mon edit box, meme pas la valeur "0" ou soit afficher un caractere qui signifie que l'entier n'existe pas(NAN par exemple)
Merci bcp a vous

12 réponses

racpp Messages postés 1910 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 15
23 juil. 2005 à 14:43
Salut,

Je pense que tu peux soit griser l'editbox ou le cacher carrément quand le bouton n'est pas actif.
0
wannalurn Messages postés 47 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 26 juillet 2005
24 juil. 2005 à 18:23
Oui en effet j'ai essaye de griser l'edit box mais le probleme est que il est en gris mais le zero est toujours a l'interieur, c'est ce qui me pose probleme; cacher carrement l'edit box ne m'arrange pas trop car en fait j'ai de nombreux edit box dans le meme cas
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
24 juil. 2005 à 19:01
SetWindowText(hedit, 0); // Enleve le texte de l'edit
0
wannalurn Messages postés 47 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 26 juillet 2005
25 juil. 2005 à 17:12
merci vecchio, d'abord j'ai eu d'erreurs avec les deux parametres, c'est plutot SetWindowText(hedit) qui marche; mais malheureusement j'ai toujours d'erreurs; j'ai compris que cette fonction est seulement valable pour les edit box dont les variables associees sont de type char mais ca ne marche pas pour les types float, ce qui est malheureusement mon cas. Est-ce qu'il a une autre fonction pour les float stp? merci bien
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
25 juil. 2005 à 17:15
C'est quoi ton hedit? Si tu utilises les MFC, c'est soit SetWindowText(0), soit ::SetWindowText(hedit, 0);
Pour transformer un float en char*, tu as sprintf ou fcvt
0
wannalurn Messages postés 47 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 26 juillet 2005
25 juil. 2005 à 18:07
J'utilise en effet les MFC (visual c++ 6.0), mon edit est une variable m_val de type float qui a ete associee a l'edit box. Maintenant quand j'ai utilise la fonction SetWindowText(m_val,0) j'ai deux erreurs, la premiere comme koi la fonction prend un seul parametre alors quand j'ai mis SetWindowText(m_val) j'ai obtenu une seule erreur provenant du type de m_val; apparemment il faut imperativement que le type soit char.
Tu me parles de deux fonctions sprintf et fcvt; concernant sprintf j'ai lu ceci: "sprintf returns the number of bytes stored in buffer" donc c'est pas mon cas; concernant fcvt je ne sais malheureusement pas quels parametres mettre; j'ai lu "char *_fcvt( double value, int count, int* dec, int* sign )" les deux derniers parametres je ne sais quoi mettre.
Peux-tu stp m'aider pour ces preoccupations stp, est-ce que ca doit ressembler a
SetWindowText(fcvt(m_val, X, Y, Z));
merci bcp pour ta disponibilite Vecchio, dsl je ne suis ps forte en programmation
0
wannalurn Messages postés 47 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 26 juillet 2005
25 juil. 2005 à 18:56
j'ai fait ceci:
int dec, int sign;
SetWindowText(fcvt(m_val,0,&dec,&sign));

mais malheureusement j'ai tj le zero dans mon edit box
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
25 juil. 2005 à 19:20
char text[32];
sprintf(text, "%f", m_val);
SetWindowText(text);
0
wannalurn Messages postés 47 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 26 juillet 2005
25 juil. 2005 à 19:35
merci Vecchio mais je ne sais pas ou se pose le probleme; ca se compile sans erreur mais malheureusement cela ne resoud ps le probleme car ya tj le "0". Merci quand meme a toi pour ton aide
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 1
26 juil. 2005 à 10:00
soluce



utilise des variables CString

et le bouton de lancement de traitement doit préalablement valider le format des différentes entrées



exemple: avec une fonction telle BString::checkIsNb() puis un atof ou équivalent...









bool BString::checkIsNbr(const bool uniquenmentDecimal,const bool nombreAvecSuffixeC,const bool bNegatifOk)const

{

///
--------------------------------------------------------------------------------------------------------------------------------------------------

/// ---------------- BString::checkIsNbr(const bool uniquenmentDecimal
,const bool nombreAvecSuffixeC ,const bool bNegatifOk) -> bool
----------------

///
--------------------------------------------------------------------------------------------------------------------------------------------------

/// ----- Objectif : indique si une chaîne est un nombre (quelque soit son format)

/// ----- Auteur(s) : Magic Nono 23/09/03

/// ----- PreCond : /

/// ----- PostCond : /

/// ----- Etat : 2 (-1<0<1<2)

/// ----- MaJ 11/10/03 : reco hexa

/// ----- MaJ 03/11/03 : reco octal

/// ----- MaJ 21/06/04 : reco optionnel nb avec suffixe éventuel(1 lettre : 'f' , 'l' ou 'U')

/// ----- MaJ 13/12/04 : reco optionnelle des négatifs

/// ----- MaJ 29/01/05 : corr BUG : 'e1' est une variable !! => un nb ne peut commencer par 'e'

/// ----- MaJ 05/04/05 : corr BUG : '.' doit etre unique... ou 2* max avec notation scientifique

/// ----- TODO : binaire

/// ----- TODO 2 : scientifique avec négatif...

/// ----- TOCHECK : "1..2" , "1.2.3"

///
--------------------------------------------------------------------------------------------------------------------------------------------------

/// ----- const bool uniquenmentDecimal(par défaut : 'true') : uniquement les décimaux tolérés?

/// ----- const bool nombreAvecSuffixeC(par défaut :
'false') : reco optionnel nb avec suffixe
éventuel(1 lettre : 'f' , 'l' ou 'U')

///+ f: float, U: unsigned, l:long

/// ----- const bool bNegatifOk(par défaut : 'false') : valider les nombres négatifs

///
--------------------------------------------------------------------------------------------------------------------------------------------------

/// ----- retour (bool) : cf.obj

///
--------------------------------------------------------------------------------------------------------------------------------------------------

/// ----- Var Utilisées de la classe (2) : m_iTaille ,m_str

/// ----- Var Muettes (cf.partie préc) (3) : bNegatifOk ,nombreAvecSuffixeC ,uniquenmentDecimal

/// ----- Var Internes à la fonction (4) : c ,ePresent ,i ,ptPresent

/// ----- Var Utilisées par adresse (1) : m_str

/// ----- Var In (5) : bNegatifOk ,m_iTaille ,m_str ,nombreAvecSuffixeC ,uniquenmentDecimal

size_t i;

char c='²';

bool ePresent=false; // 'e' present : exposant...

bool ptPresent=false; // '.' present : virgule...

//si pas hexa

if(!(m_iTaille>2 && m_str[0]=='0'&&m_str[1]=='x'))

{

//si octal

if(m_iTaille>=1 && m_str[0]=='O')

{

if(uniquenmentDecimal)

return false;

//si 'O' => faux

if(m_iTaille==1)

return false;

/// algo : retourne nb bien octal (*)

for(i=1;i<m_iTaille;i++)

{

c=m_str[i];

if(c<'0'||c>'7')

return false;

}

return true;

}

/// algo : retourne bien un nombre (exp OK) (*)

i=0;

if(bNegatifOk && 2<=m_iTaille && m_str[0]=='-')

i++;

for(;i<m_iTaille;i++)

{

c=m_str[i];

if(c=='e' && !ePresent)

{


if(i==0) //cas ou on commence par
e nok

break;

ePresent=true;

ptPresent=false;

continue; //goto 'for'

}

//rq : (!isdigit(c)) <=> (c<'0'||c>'9')

if(c<'0'||c>'9')

if(c=='.' && !ptPresent)

ptPresent=true;

else


return(nombreAvecSuffixeC
&& i==m_iTaille-1 && m_iTaille>1 && (c=='U'
|| c=='f' || c=='l' ));

}

return(c!='e');
// normalement true, & on ne commence pas ni ne finit avec un 'e'
!!!

}

else

{

if(uniquenmentDecimal)

return false;

/// algo : {hexa}

/// algo : retourne bien un nombre Hexa (*)

for(i=2;i<m_iTaille;i++)

{

c=m_str[i];


if((c<'0'||c>'9') && (c<'A'||c>'F') &&
(c<'a'||c>'f'))

return false;

}

return true;

}

}

___________________________________________________________
Magicalement
Nono
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 1
26 juil. 2005 à 10:01
et évidemennt,



m_sVal1=""

ds ton OnInitDialog

et lors de la désactivation par bouton...



m_sVal1=""

suivi d'un UpdateData

___________________________________________________________
Magicalement
Nono
0
wannalurn Messages postés 47 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 26 juillet 2005
26 juil. 2005 à 20:59
merci a toi magic_Nono, j'essaierai ton approche
0