je vois pas ou je copie/colle.
Sinon laissez tomber, je crois que vous en avez marre !![]()
Je vais me débrouiller
je vois pas ou je copie/colle.
Sinon laissez tomber, je crois que vous en avez marre !![]()
Je vais me débrouiller
Je re avec une autre solution :
j'ai fais ca :
Je pense qu'il y a beaucoup plus simple mais je ne vois pas trop.
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 void CDlgReglages::OnEnChangeEdit13() { CString STemp ; char CTemp ; int j = 0 ; UpdateData(true) ; for(int i = 0 ; i != Seuil_PenteTQ.GetLength() +1 ; i++) { CTemp = Seuil_PenteTQ[i] ; if((CTemp <= '9' && CTemp >= '0') || CTemp == '.') { /* il faut copier CTemp dans STemp[j] */ j++ ; } } Seuil_PenteTQ = STemp ; UpdateData(false) ; }
Sinon pour copier CTemp dans STemp[j] j'ai essayer STemp[j] = CTemp, ca marche ds l'autre sens mais pas ds celui la on dirait. J'ai vu aussi qu'il y avait la fonction SetAt mais je ne vois pas la syntaxe à utiliser.
Merci
oui, tu peux tout simplement attacher une variable de type "double" à ton edit. ça n'empêche pas les saisies erronés, mais ça les détecte lors de la validation (message d'avertissement "Tapez un nombre !").Envoyé par le-makinero
ça a l'avantage de n'autoriser la validation que des saisies conformes au type de la variable et de ne nécessiter aucune ligne de code pour traiter l'affaire.
exemples de saisies conformes d'un double =
12
-12.2
+12E-1
12.E+023
12.25e06
le . est géré, ainsi que les signes et le E. maintenant si tu ne veux pas laisser la possibilité de saisir un nombre négatif, il te suffit de vérifier la validité du double lors de la validation de ta saisie.
c'est une bonne idée d'utiliser un Cstring mais j'utilise des Cstring car ces valeurs sont prises dans un fichier texte et doivent etre réécrites
?
on peut très bien lire/écrire un double
Ma dernière technique est qd même "plus simple" pour moi car sinon cela m'oblige à revoir tout le traitement que j'ai pu faire auparavant. Pourriez-vous m'aider à l'utiliser corectement ?
tu peux aussi convertir des double en CString (et inversement) pour lire/écrire dans les fichiers.
(voir FAQ)
Je n'ai toujours pas eu de réponse la-dessus !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 char* stopString; strtod(Seuil_PenteTQ.GetBuffer(), &stopString); if (stopString != NULL) MessageBox("erreur",NULL,MB_OK);
A prioris stopString est toujours != NULL. Pourquoi ?
et pourquoi utiliser Seuil_PenteTQ.GetBuffer() plutôt que Seuil_PenteTQ ?
Merci !
regarde la doc de la fonction (Envoyé par le-makinero
)
moi j'aurais mis Seuil_PenteTQ ou (LPCTSTR)Seuil_PenteTQEnvoyé par le-makinero
stopstring n'est pas le premier caractère non numérique de la chaine ou NULL si toute la chaine a été convertie ?
"123456"'1','2','3','4','5','6','\0'
strtod convertit '1','2','3','4','5','6' en long
stopString pointe sur '\0' (caractère de fin de chaîne, qui est dans notre cas le caractère suivant le dernier caractère convertit)
(int)'\0' = NULL
je penses qu'il doit contenir le caractère de fin de ligne \n (voir \r\n) ou bien de fin de texte \0 donc NULL
j'ai trouvé une solution mais j'ai nouveau probleme maintenant :
TempSeuil_PenteTQ permet de mémoriser les données qui étaient présentes ds l'Edit Box avant une modification
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 void CDlgReglages::OnEnChangeEdit13() { char *stopstring ; UpdateData(true) ; strtod(Seuil_PenteTQ,&stopstring) ; if((stopstring[0] >= 0 && stopstring[0] <= 9) || stopstring[0] == '.') { TempSeuil_PenteTQ = Seuil_PenteTQ ; } else { Seuil_PenteTQ = TempSeuil_PenteTQ ; UpdateData(false) ; } }
mais je valide en cliquant sur OK au meme sur annuler j'ai le message d'erreur suivant :
Run-Time Check Failure #2 - Stack around the variable 'Dlg' was corrupted
Pourquoi ?
ha, j'ai l'impression que "la vérité est ailleurs".
En effet, le compilateur te dis qu'il y a un problème pas loin de la variable Dlg, et il n'y a pas de variable Dlg dans le code que tu a posté. L'erreur est donc ailleurs.
le probleme étatit que Dlg était le nom donné à la classe de CDlgReglages, je l'ai changé et c'est bon j'ai plus d'erreurs.
ca y'est ca approche de la fin !
Encore un dernier probleme : il faut que je puisse placer le curseur d'edition sur le dernier caractere du CEdit.
Pour cela, j'ai vu ds la FAQ
Pour un CEdit simple ligne :
pEdit est bien un pointeur qui pointe sur le CEdit en question ?Si oui, comment doit on le déclarer ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 pEdit->PostMessage(WM_KEYDOWN,VK_END,0);pEdit->SetFocus(); // eventuellement
tu ajoutes une variable de Controle de type CEdit
ensuite tu remplaces ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part pEdit->PostMessage(WM_KEYDOWN,VK_END,0);pEdit->SetFocus(); // eventuellementsi cette ligne est effectué dans la classe representant la dialog contenant la CEdit
Code : Sélectionner tout - Visualiser dans une fenêtre à part cEdit.PostMessage(WM_KEYDOWN,VK_END,0);cEdit.SetFocus(); // eventuellement
Merci ! ca marche nickel maintenant........sauf que quand je tape un point avec Maj + ;/. ensuite je peux rentrer n'importe quel caractère alors que sinon je ne peux saisir que des chiffres ou le point (si je passe par le clavier numérique). Là franchement, ca me dépasse.....
Partager