IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

CEdit: Question bête ?


Sujet :

MFC

  1. #1
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut CEdit: Question bête ?
    Bonjour à tous.

    J'ai cherché en vain sur le forum... J'espère que vous pourrez m'aider.
    Mon problème: j'ai des CEdit (disons que c'est pour des calculs simples d'heures: 8h15 = 8.25, etcetc...) un pour l'heure d'entree, un pour la sortie, un pour la pause. J'ai dû y placer non pas des variables CString mais des contrôle pour obliger l'utilisateur à ne rentrer que des nombres... Alors voilà la question : Comment pignouf de #@& ! !! on récupère les données dans ces edits et les convertit en float ?!

    Voilà un bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	UINT l1 = m_Entree.GetLimitText();
    	DWORD Entree = m_Entree.GetSel();
    	UINT l2 = m_Sortie.GetLimitText();
    	DWORD Sortie = m_Sortie.GetSel();
    	UINT l3 = m_Pause.GetLimitText();
    	DWORD Pause = m_Pause.GetSel();
    Je veux pouvoir faire à la fin :
    m_TotalDay = Sortie-Entree-Pause; (m_TotalDay est une variable float, je precise)

    Merci à ceux qui prendront le temps de m'indiquer mon/mes erreurs...

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    Tu peux convertir tes chaines en float avec atof par exemple

  3. #3
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut
    Avec un nom pareil, je risquais pas de la trouver
    Merci, je vais chercher de ce côté là. Et pour les dates au format dd/mm/yyyy ? Même méthode ?

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par LapinGarou
    Avec un nom pareil, je risquais pas de la trouver
    Merci, je vais chercher de ce côté là. Et pour les dates au format dd/mm/yyyy ? Même méthode ?
    si si atof== alpha to float ...
    question a 2 sous atol == ? (pas les opticiens) ...

  5. #5
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut
    Antoine !!?!
    Plus sérieusement, pour les opérations sur les dates, je peux passer par la classe CTime ? ou il y a bidule plus simple ?

    Autre question: j'ai fini le systeme qui oblige l'utilisateur à n'entrer que 0...9 et '.', mais la touche "backspace" ne marche plus... qu'ai-je loupé, svp ?

    Autre chose (eh oui, encore... ): comment savoir si l'utilisateur a tapé '.5' et détecter que '.' est le premier caractère tapé, afin d'y placer un '0' devant ?

  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par LapinGarou
    Antoine !!?!
    Plus sérieusement, pour les opérations sur les dates, je peux passer par la classe CTime ? ou il y a bidule plus simple ?
    nan atol==alpha to long

    plus serieusement,
    si tu disposes d'un CTime voir se post:
    http://www.developpez.net/forums/vie...824736#1824736

    sinon pour constituer une date d'apres des entiers pas de pb:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int nDay=18;
    int nMonth=10;
    int nYear=2005;
    CString str;
    str.Format("%02d/%02d%4d",nDay,nMonth,nYear);
    pour ton autre question il faudrait voir comment tu as implementé ça .

  7. #7
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut
    Dans un CEdit perso, c'est comme ça je pense qu'il faut faire d'après ce que j'ai lu par ci par là sur le site.
    Voici le code:

    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
    /////////////////////////////////////////////////////////////////////////////
    // CMyEdit message handlers
     
    //pour forcer l'utilisateur à n'entrer que des chiffres et '.' ...
    void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    	// TODO: Add your message handler code here and/or call default
     
    	if( nChar>=0 && nChar<'.' || nChar>=58 && nChar<=255)
    		return;
     
    	CEdit::OnChar(nChar, nRepCnt, nFlags);
    }
     
    //pour selectionner le contenu du CEdit quand on clique dessus...
    void CMyEdit::OnSetfocus() 
    {
    	// TODO: Add your control notification handler code here
    	PostMessage(EM_SETSEL,0,-1);
    }
    J'ai mis ça dans ma classe CHorairesView pour vérifier que la syntaxe soit correcte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(EOF == sscanf(etext2, "%f", &Pause))
    		{
    			//error
    			AfxMessageBox("Vérifier la syntaxe...");
    		}
    mais quand on rentre un '.' en premier, forcément, l'affichage du calcul des heures de la journée ne peut pas le convertir en float et afficher le résultat... d'où le problème... et du coup ce message deviendrait obolète si je trouvais la reponse à ma 3eme question.

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    normal la touche backspace equivaut au code 8 et toi tu filtres entre 0 et '.'
    je te conseille de laisser passer tout ce qui est en dessous de 32 ' '.

  9. #9
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut
    ok, ça marche ! Merci !
    Et pour le problème du '0' et du '.' ? j'ai pensé à mettre un 0 premier par défaut dans chaque CEdit, mais ça fait un peu brouillon.

  10. #10
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    en gros ,
    tu fais un GetWindowText pour recuperer la valeur saisie .
    tu fais ton controle du '.' sur le premier caractere si c'est le cas
    tu rajoutes un '0' a ta chaine et remet l'edit a jour avec SetWindowText.
    et eventuellement positionne le curseur a la fin de la saisie.

  11. #11
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Citation Envoyé par nico-pyright(c)
    Tu peux convertir tes chaines en float avec atof par exemple
    Oh, les fonctions atoX ne doivent plus être utilisées, elles sont avantageusement remplacées par les strtoX, ici strtod :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double  strtod ( const char * string, char** endptr );
    farscape >> atol => alpha to long yes but you must use strtol
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  12. #12
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    Citation Envoyé par Trap D
    Citation Envoyé par nico-pyright(c)
    Tu peux convertir tes chaines en float avec atof par exemple
    Oh, les fonctions atoX ne doivent plus être utilisées, elles sont avantageusement remplacées par les strtoX, ici strtod :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double  strtod ( const char * string, char** endptr );
    farscape >> atol => alpha to long yes but you must use strtol
    oui oui je sais ...
    j'ai meme mis un post dans la faq sur le sujet , et puis c'est nico qui a commencé

  13. #13
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    aie aie aie ... démasqué ... nico --> <-- farscape

    mais, c'est pas grave puisque j'ai été remercié deux fois à ce sujet par matazz dans la FAQ http://c.developpez.com/faq/vc/?page...tringHexaToInt, comme quoi je lui avais conseillé d'utiliser strtol

    La prochaine fois je conseillerai d'utiliser l'API StrToInt, comme ca, il faudra en plus utiliser shlwapi.dll
    gnarf gnarf gnarf

  14. #14
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut
    C'est pas bon ça ?!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    		float Entree;
    		int linenumber	= 1;
    		int len			= m_Entree.LineLength(linenumber);
    		char *etext0		= new char [len + 1];
    		memset(etext0, '\0', len+1);
    		m_Entree.GetLine(linenumber,etext0,len);
    		if(EOF == sscanf(etext0, "%f", &Entree))
    		{
    			//error
    			AfxMessageBox("Vérifier la syntaxe...");
    		}
    Oui, je sais, je me complique la vie pour rien des fois. Mais si vous avez plus simple, je suis preneur...

  15. #15
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    c'est censé faire quoi tout ça ?
    sinon bof ,du sscanf dans un prog C++ + MFC ,du char * ,memset etc..

  16. #16
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut
    C'est pour récupérer la valeur dans mon controle "MyEdit", et convertir la valeur en float. J'ai bidouillé, vu que je débute en MFC, et je n'ai rien trouvé de mieux pour le moment.

    Autre chose: où puis-je trouver la librairie ADO ?! je tombe constament sur sur ADO.NET...
    il me faut le fichier ado\msado15.dll pour pouvoir utiliser une datagrid...

  17. #17
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    re,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CString str;
    char *pstopstring;
    m_Entree.GetWindowText(str);
    double dEntree = strtod( string, &pstopstring);
    if(strlen(pstopstring))
    {
    //error
    AfxMessageBox("Vérifier la syntaxe...:"+CString(pstopstring)); 
    }

  18. #18
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut
    Effectivement, c'est beaucoup plus mieux beau ! Mais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double dEntree = strtod( string, &pstopstring);
    d'ou il sort le string ? ce serait pas plutôt str ? et &pstopstring est une valeur récupérée par strtod si j'ai bien compris ?
    Sauf que ceci ne prend en compte que la partie entière... Je dois rentrer les heures en centièmes : 8h30=8.5, 19h45=19.75...

  19. #19
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    c'est une erreur de recopie string == str dans mon exemple...

  20. #20
    Membre éclairé Avatar de LapinGarou
    Homme Profil pro
    R&D Developer
    Inscrit en
    Octobre 2005
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : R&D Developer
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 341
    Par défaut
    Bon, j'ai fait en sorte que lorsque l'on clique dans un Edit, le programme selectionne le texte contenu. Mais comment fait-on pour effacer le contenu d'un controle CEdit ? (je veux que ça efface le Edit des entrees,celui des sorties, des temps de pause, etcetc... quand je clique sur le bouton Ajouter)

    J'ai essayé en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_EntreeCTRL.SetDlgItemText(IDC_EDIT1,"");
    mais apparemment il ne veut rien savoir. Un rapport avec UpdateData()?

    J'ai également un autre problème en relation avec une base de données Access en ODBC:
    Voici le code:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    	//==============================================
    	//ajout des données dans la bdd
    	//==============================================
    	if( !m_pSet->IsOpen( ) )
    		return FALSE;
    	if( !m_pSet->CanAppend() ) 
    		return FALSE;
    	m_pSet->AddNew();
     
    	//==============================================
    	//on insere les données dans la table
    	m_pSet->m_Entree= txtEntree;
    	m_pSet->m_Sortie= txtSortie;
    	m_pSet->m_Pause	= txtPause;
    	//conversion de la valeur float en CString
    	CString s;
    	s.Format(_T("%f"), m_TotalDay);
    	m_pSet->m_TDay	= s;
     
    	//ajout du nom de l'employe dans le jeu de lignes
    	int CurrentEmployee	= m_ChoosenEmployee.GetCurSel();
    	//CString CurrentEmpCSTR;
    	m_ChoosenEmployee.GetLBText(CurrentEmployee,CurrentEmpCSTR);
    	m_pSet->m_Nom	= CurrentEmpCSTR;
     
    	//ajout de la zone dans le jeu de lignes
    	int CurrentZone	= m_Zone.GetCurSel();
    	CString CurrentZoneCSTR;
    	m_Zone.GetLBText(CurrentZone,CurrentZoneCSTR);
    	m_pSet->m_Zone	= CurrentZoneCSTR;
     
    	//ajout de la date dans le jeu de lignes
    	CTime timeTime;
    	DWORD dwResult = m_DateCTRL.GetTime(timeTime);
     
    	strDate= timeTime.Format("%d/%m/%Y"); // jour /mois / année 
    	m_pSet->m_Date	= strDate;
    	//==============================================
     
    	if( !m_pSet->Update( ) )				//validation
    	{
    		AfxMessageBox( "Impossible de mettre à jour" );
    		return FALSE;
    	}/*else
    	{
    		AfxMessageBox( "Opération effectuée" );
    		return;
    	}*/
    	delete[] txtEntree,txtSortie,txtPause;
     
    	//==============================================
    	//affichage des calculs
    	//==============================================
    	UpdateData(FALSE);	//mise à jour des controle depuis les variables
    	return TRUE;
    Pourquoi diable ça ajoute tout nickel dans la base de données, mais quand je demande de l'afficher dans une GridCtrl, il n'affiche que la premiere ligne de la bdd !!?? Je m'arrache les cheveux. Je précise que txtEntree,etc... sont de type char*

Discussions similaires

  1. Question bête (PHP veux se télécharger)
    Par Nicos77 dans le forum Langage
    Réponses: 12
    Dernier message: 12/10/2005, 15h21
  2. Réponses: 7
    Dernier message: 05/10/2005, 11h29
  3. [VBA][Excel]Petite question bête !
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/09/2005, 15h36
  4. [MFC] Question bête sur les CListBox
    Par gwendo dans le forum MFC
    Réponses: 1
    Dernier message: 10/08/2005, 16h43
  5. Numéro auto ===== Question bête
    Par Nicos77 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/06/2003, 13h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo