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

Signaler
Messages postés
47
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
26 juillet 2005
-
Messages postés
47
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
26 juillet 2005
-
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

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,

Je pense que tu peux soit griser l'editbox ou le cacher carrément quand le bouton n'est pas actif.
Messages postés
47
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
26 juillet 2005

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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
SetWindowText(hedit, 0); // Enleve le texte de l'edit
Messages postés
47
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
26 juillet 2005

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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
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
Messages postés
47
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
26 juillet 2005

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
Messages postés
47
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
26 juillet 2005

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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
char text[32];
sprintf(text, "%f", m_val);
SetWindowText(text);
Messages postés
47
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
26 juillet 2005

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
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
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
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
et évidemennt,



m_sVal1=""

ds ton OnInitDialog

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



m_sVal1=""

suivi d'un UpdateData

___________________________________________________________
Magicalement
Nono
Messages postés
47
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
26 juillet 2005

merci a toi magic_Nono, j'essaierai ton approche