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] Effacer contenu multiligne


Sujet :

MFC

  1. #1
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut [CEdit] Effacer contenu multiligne
    Comment fait-on pour effacer le contenu de mon CEdit mutiligne?

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CEdit::SetWindowText("");
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CEdit::SetSel(0,-1);CEdit::Clear()
    Suffit pas ?

  3. #3
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    J'ai essayé, mais ça écrase seulement ce que j'ai dans mon CEdit.
    Ca réécrit à partir du début du CEdit, mais ce qui a été écrit précedemment est toujours là :s

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Trunks Voir le message
    J'ai essayé, mais ça écrase seulement ce que j'ai dans mon CEdit.
    Ca réécrit à partir du début du CEdit, mais ce qui a été écrit précedemment est toujours là :s
    Je comprend pas ce que tu veux dire ? Ce n'est pas écraser ton CEdit que tu veux faire ?
    Question accéssoire : as-tu une variable associée ? Auquel cas, ce serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    str_cedit.Empty();
    UpdateData(FALSE);

  5. #5
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Dsl, en fait le pb venait d'autre part
    En effet, ça fonctionne

  6. #6
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Je fais un petit test tout con:

    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
    void CTestCardReaderDlg::OnTest() 
    {
    	static bool bFirst = TRUE;
     
    	ToCtrl(m_editResult, CString(_T("")));
     
    	if (bFirst)
    	{
    		AppendToCEdit(m_editResult, CString(_T("Un\r\n")));
    		AppendToCEdit(m_editResult, CString(_T("Deux\r\n")));
    		AppendToCEdit(m_editResult, CString(_T("Trois\r\n")));
    		AppendToCEdit(m_editResult, CString(_T("Quatre\r\n")));
     
    		bFirst = FALSE;
    	}
    	else
    	{
    		AppendToCEdit(m_editResult, CString(_T("Cinq\r\n")));
    		AppendToCEdit(m_editResult, CString(_T("Six\r\n")));
    	}
     
    	Sleep(2000);
    }
    ToCtrl() fait un SetWindowText() et AppendToCEdit() ajoute du texte à la suite du CEdit.

    Quand j'appuie sur le bouton test, il m'affiche:

    Un
    Deux
    Trois
    Quatre
    Quand j'appuie une nouvelle fois sur le bouton test, il m'affiche:

    Cinq
    Six

    Quatre
    puis au bout de 2s, m'efface 'Quatre'.

    Donc en fait, la CEdit est effacée seulement à la fin de la fonction, et non pas lors de l'appel de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ToCtrl(m_editResult, CString(_T("")));
    La mise à jour du CEdit avec UpdateData() est donc exécutée en sortie de fonction?

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Je ne comprend pas : tu mélanges un m_editResult/DDX_Text et SetWindowText. Car là, effectivement, ça génère quelques problèmes.

  8. #8
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Dans TestCardReaderDlg.h :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	CEdit	m_editResult;
    	CString	m_strResult;
    Dans TestCardReaderDlg.cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	DDX_Control(pDX, IDC_RESULT, m_editResult);
    	DDX_Text(pDX, IDC_RESULT, m_strResult);
    Enfin :

    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
     
    template<>
    bool ToCtrl<const CString>(CWnd& ctrl, const CString& value)
    {
        ctrl.SetWindowText(value);
     
        return TRUE;
    }
     
    void AppendToCEdit(CEdit& editBox, CString& strMessage)
    {
    	int cbLen = editBox.GetWindowTextLength();
    	editBox.SetSel(cbLen, cbLen);
    	editBox.ReplaceSel(strMessage);
    }
    Ai-je mélangé quelque-chose?

  9. #9
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Ben je dirais qu'à un moment tu peux avoir une incohérence entre m_strResult et m_editResult.SetWindowText(). Donc un écrasement d'une des deux valeurs selon un UpdateData(TRUE) ou UpdateData(FALSE).
    La simplicité permettant de diminuer le nbr de bug, je te conseille soit de supprimer m_strResult, soit de changer les SetWindowText par une mise à jour de m_strResult suivi de l'UpdateData.

  10. #10
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Je n'ai gardé que m_editResult, j'ai supprimé m_strResult, et toujours le même problème.

    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
     
    void CTestCardReaderDlg::OnTest() 
    {
    	CString strResult;
    	static bool bFirst = TRUE;
     
    	m_editResult.SetWindowText(_T(""));
     
    	if (bFirst)
    	{
    		AppendToCEdit(m_editResult, CString(_T("Un\r\n")));
    		AppendToCEdit(m_editResult, CString(_T("Deux\r\n")));
    		AppendToCEdit(m_editResult, CString(_T("Trois\r\n")));
    		AppendToCEdit(m_editResult, CString(_T("Quatre\r\n")));
     
    		bFirst = FALSE;
    	}
    	else
    	{
    		AppendToCEdit(m_editResult, CString(_T("Cinq\r\n")));
    		AppendToCEdit(m_editResult, CString(_T("Six\r\n")));
     
    		bFirst = TRUE;
    	}
     
    	Sleep(2000);
    }
    Quand tu testes chez toi, ça marche? Je suis sous VC++ 6.0, peut-être que ça y joue...


    Edit:

    Apparemment c'est parce-que Windows gère les mises à jours sous forme de message. Le message est transmis à la fin de la fonction sur le clic du bouton, donc, l'effacement ne s'effectue qu'une fois la fonction exécutée

  11. #11
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Essaies de coller un UpdateWindow pour forcer un WM_PAINT.

  12. #12
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Ca ne change rien, mon collègue m'a conseillé de passer par un thread

  13. #13
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Avoir 2 threads qui gère de l'I.H.M. ca risque de te créer plus de soucis qu'autre chose. Peux-tu poster un zip du projet ou d'un projet minimal reproduisant le bug ?

  14. #14
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    Apparemment c'est parce-que Windows gère les mises à jours sous forme de message. Le message est transmis à la fin de la fonction sur le clic du bouton, donc, l'effacement ne s'effectue qu'une fois la fonction exécutée
    non c'est des SendMessage, donc la fonction est executée en ligne ...

    c'est un problème d'affichage. Ton Sleep(2000) fais que l'affichage n'est pas rafraichit immédiatement.

    Un UpdateWindow() devrait faire l'affaire


    Ca ne change rien, mon collègue m'a conseillé de passer par un thread
    les thread c'est à la mode en ce moment
    on met des threads partout ...

    sérieusement, aucune utilité pour ton probleme, au contraire

    tu figes la boucle à message c'est ça qui fait tes soucis

    -->
    puis au bout de 2s, m'efface 'Quatre'.
    à cause du Sleep() ...

    @+

  15. #15
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Voici un exemple minimaliste : http://dl.free.fr/vxPIswYpb

    Merci pour aide, je débute en MFC et ne suis pas encore à l'aise

  16. #16
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    enlève le Sleep(2000) et ça marchera mieux

    @+

  17. #17
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    En fait c'est pour simuler l'exécution d'un programme.
    Je travaille sur des lecteurs de cartes bancaires. Quand j'appuie sur le bouton, je procède à un prélèvement:
    - Initialisation lecteur de carte
    - Connexion
    - Débit
    - Déconnexion
    ...

    J'affiche des messages dans mon CEdit, donc ça prend bien plus de 2s, c'était juste une manière simplifiée de représenter mon pb.

    Ensuite, quand j'appuie à nouveau sur le bouton, je veux effacer mon CEdit pour afficher à nouveau les étapes de ma nouvelle transaction.

  18. #18
    Membre chevronné Avatar de stephdim
    Profil pro
    Inscrit en
    Août 2007
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 462
    Par défaut
    J'affiche des messages dans mon CEdit, donc ça prend bien plus de 2s, c'était juste une manière simplifiée de représenter mon pb.
    ok ben alors thread si c'est un traitement que tu ne peux pas segmenter (genre calcul et cie), ou sinon passer par un Timer ou un traitement dans OnIdle() si tu peux segmenter (s'il y a des attentes dans le traitement pour une lecture par exemple)

    si tu as tout en ligne, ton IHM sera figé le temps du traitement, pas de réponse aux clics, au clavier, à l'affichage ...

    si c'est juste l'affichage qui te gêne, un UpdateWindow() avant le Sleep()

    tout dépend de ton traitement, mais si tu peux éviter de passer par un thread ça sera plus simple ...

    @+

  19. #19
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Tu dois avoir des acquittement sur les opérations de ton lecteur de cartes ? Fais comme dit stephdim : privilégie un automate qui met à jour ton édit sur ces évènements plutôt que d'essayer les threads. Le problème des threads c'est que ça créé de la complexité là où il n'y en a pas. Puis avec Visual 6, c'est un peu galère le debug.

  20. #20
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Oui c'est juste l'affichage qui me gène
    Je viens de retester UpdateWindow() et ça marche

    Désolé 3DArchi, tu m'avais déjà donné la réponse, j'avais du appuyer avant les 2s, du coup la fonction n'avait pas du se terminer quand j'avais tester.

    Merci pour votre aide et patience

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. effacer contenu d'une combobox liée
    Par christi dans le forum Windows Forms
    Réponses: 13
    Dernier message: 04/02/2009, 17h25
  2. Effacer contenu DBGrid
    Par sondo dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/06/2008, 14h26
  3. Effacer contenu de fichier
    Par Mimiche dans le forum Langage
    Réponses: 3
    Dernier message: 09/01/2008, 14h51
  4. Effacer contenu JTextField lors d'un clic
    Par javamax dans le forum Composants
    Réponses: 3
    Dernier message: 07/04/2007, 17h04
  5. effacer contenu d'un tableau
    Par mrtatou dans le forum C
    Réponses: 8
    Dernier message: 06/02/2006, 13h35

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