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 :

[MFC/ActiveX]Assertion d'erreur sur changement des propri�t�


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm� Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par d�faut [MFC/ActiveX]Assertion d'erreur sur changement des propri�t�
    Bonjour, j�ai cr�e un ActiveX avec un contr�le Group Box.
    Je souhaiterais pouvoir modifier le champ Caption de ce contr�le dans les propri�t�s de l�ActiveX.
    Pour cela j�ai cr�e une propri�t� dans l�onglet Automation du ClassWizard :

    CString m_faction1;
    void OnFaction1Changed();

    J��dite ensuite ma fonction comme suit :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    void CWorkshiftCtrl::OnFaction1Changed() 
    {
    	// TODO: Add notification handler code
    	m_MyDialog.m_Fac1.SetWindowText(m_faction1);
    	m_MyDialog.Create(IDD_WORKSHIFT);
    	SetModifiedFlag();
    }
    Avec :
    m_MyDialog = variable membre de type CString de ma classe CWorkshiftCtrl
    m_Fac1= variable membre de type CButton de ma classe CWorkshiftDialog
    IDD_WORKSHIFT = ma boite de dialogue avec mon contr�le Group Box

    Je compile le tout, j�ins�re mon ActiveX dans une application conteneur, je fais un clic droit dessus pour afficher les propri�t�s.



    Sous l�onglet g�n�ral j�ai mon champs Faction1 : si je change sa valeur j�ai une erreur d�assertion !! PROBLEME

    Merci pour votre aide�

  2. #2
    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,
    quelle est l'assertion ?
    fait un essai avec un version debug de l'activex enregistr� pour voir si tu peux tracer l'erreur.
    tu dois avois un probleme sur le traitement de l'affectation de cette zone dans ton activex.

  3. #3
    Membre confirm� Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par d�faut
    L'assertion est:
    Debug Assertion Failed!
    Program: C:\Program Files\...\MSDEV.EXE
    File: winocc.cpp
    Line: 229
    Le probl�me est que pour debugger l'activex, il faudrait le lancer!
    Or moi je n'affiche pas ma page de propri�t�s en run time! Donc je vois pas comment je peux faire �a.
    Je sais pas si je suis bien clair...

  4. #4
    Membre confirm� Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par d�faut
    Hello!
    J'ai supprim� tout ce que j'avais dans ma fonction OnFaction1Changed() et j'ai rajout� une m�thode de s�rialisation:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void CWorkshiftCtrl::Serialize(CArchive& ar) 
    {
    	if (ar.IsStoring())
    	{	// storing code
    		     ar << m_faction1;
     
    	}
    	else
    	{	// loading code
    		     ar >> m_faction1;
    	}
    }
    Du coup je n'ai plus de plantage!
    Par contre �a ne change pas le caption de mon controle Group Box...
    Peut �tre faut-il que je rajoute une fonction

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    void CWorkshiftCtrl::SetName(LPCTSTR name)
    Je vais essayer !

  5. #5
    Membre confirm� Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par d�faut
    Non �a ne fonctionne pas mieux!
    Je n'ai pas d'erreur mais mon contr�le n'est pas modifi�!

  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
    salut,
    c'est donc bien ce que je te disais ..
    que faisais tu dans cette fonction ?

  7. #7
    Membre confirm� Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par d�faut
    Dans cette fonction je chargeai la valeur entr�e dans les propri�t�s et je l'affectai au caption de mon controle.
    Mais vu que je n'�tais pas en RUN TIME j'avais une erreur d'assertion! Certainement parce que ma fen�tre n'�tais pas encore cr�e � ce moment l� de mon programme! Enfin je pense!
    Je vais essayer de mettre une fonction de type:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int CWorkshiftCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
    Peut �tre que maintenant �a fonctionnera..... J'esp�re.....

  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
    Il faut travailler avec AmbientUserMode() qui renvoie TRUE en mode utilisateur
    Et faux en mode conception.
    Donc ta valeur doit �tre stock�e dans l�activex, et mise � jour uniquement en mode utilisateur.
    Autre remarque pourquoi cr�er une variable pour affecter le caption de la fen�tre alors que l�Activex dispose d�une liste de variable pr�d�finies (� stock property �) dont la variable text pour le titre du contr�le.
    Dernier point la sauvegarde des valeurs dans l�activex ne fonctionne pas de cette mani�re si tu veux que les donn�es soient persistantes dans le fichier ressources.
    il faudra travailler avec la fonction DoPropExchange.

  9. #9
    Membre confirm� Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par d�faut
    Citation Envoy� par farscape
    Il faut travailler avec AmbientUserMode() qui renvoie TRUE en mode utilisateur
    Et faux en mode conception.
    Je vais �tudier ceci, je ne savais pas!

    Citation Envoy� par farscape
    Donc ta valeur doit �tre stock�e dans l�activex, et mise � jour uniquement en mode utilisateur.
    C'est ce que je fais avec ma fonction OnCreate:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int CWorkshiftCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {							 
    	if (COleControl::OnCreate(lpCreateStruct) == -1) 
            return -1; 
     
    	// TODO: Add your specialized creation code here
    	m_MyDialog.Create(IDD_WORKSHIFT, this); 
    	m_MyDialog.m_Fac1.SetWindowText(m_faction1);
    	m_MyDialog.m_Fac2.SetWindowText(m_faction2);
    	m_MyDialog.m_Fac3.SetWindowText(m_faction3);
        return 0; 
     
    }
    Mes donn�es sont enregistr�es dans des variables membres de ma classe de controle:

    m_faction1
    m_faction2
    m_faction3

    Citation Envoy� par farscape
    Dernier point la sauvegarde des valeurs dans l�activex ne fonctionne pas de cette mani�re si tu veux que les donn�es soient persistantes dans le fichier ressources.
    il faudra travailler avec la fonction DoPropExchange.
    J'ai essay� de quitter mon application la red�marrer en fermant compl�tement Visual et mes donn�es restent enregistr�es. Je crois que j'ai r�ussi � faire fonctionner cette vilaine b�te !!

    Merci � toi pour tes conseils !!

  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
    sauf que serialize c'est pour un fichier ,donc tes donn�es de ton ocx sont sauvegard�es dans un fichier externe au fichier ressources ....
    sauf erreur de ma part

  11. #11
    Membre confirm� Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par d�faut
    Ce qui l'en dis d'avantage! Je comprends mieux pourquoi tu me parles de donn�es persistantes!!
    Je vais me renseigner l� dessus alors....
    Merci beaucoup!

  12. #12
    Membre confirm� Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par d�faut
    OK alors un "truc" du style:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    void CWorkshiftCtrl::DoPropExchange(CPropExchange* pPX)
    {
       ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
       COleControl::DoPropExchange(pPX);
     
       PX_String(pPX, "Faction1", m_faction1, TRUE);
    }
    C'est ce que dis MSDN pour s�rialiser une propri�t� de type CString...
    Je vais essayer ce que �a donne.....

  13. #13
    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
    oui exemple (�pur�) pour un static avec valeur par defaut :
    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
     
    void CMyStatic::DoPropExchange(CPropExchange* pPX)
    {
    	ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    	COleControl::DoPropExchange(pPX);
     
    	// TODO: Call PX_ functions for each persistent custom property.
    	CPictureHolder Pic;
    	Pic.CreateEmpty();
    	CString *pstrCaption =(CString *)&((CString &)InternalGetText());
    	if(pPX->GetVersion()>= (DWORD)MAKELONG(_wVerMinor, _wVerMajor))
    	{		
    		PX_String(pPX,_T("Text"),*pstrCaption,_T("Static"));
    		PX_Picture(pPX,_T("ControlPicture"),m_Pic,Pic);
    	}
    	else
    	if(pPX->IsLoading())
    	{				
    		PX_String(pPX,_T("Text"),*pstrCaption,_T("Static"));
    		PX_Picture(pPX,_T("ControlPicture"),m_Pic,Pic);
    	}
    }

  14. #14
    Membre confirm� Avatar de tus01
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    191
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 191
    Par d�faut
    Merci Farscape je vais annalyser tout �a....

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Changement des propri�t� d'une Colonne personnalis�.
    Par hassine dans le forum SharePoint
    R�ponses: 4
    Dernier message: 06/04/2009, 15h57
  2. [CSS/Javascript] Changement des propri�t� CSS dynamiquement
    Par heladar dans le forum G�n�ral JavaScript
    R�ponses: 8
    Dernier message: 06/02/2009, 12h33
  3. R�ponses: 3
    Dernier message: 30/05/2008, 14h35
  4. [D�butant - Excel - Graph] Erreur sur changement nom de s�rie
    Par seiryujay dans le forum Macros et VBA Excel
    R�ponses: 2
    Dernier message: 15/12/2006, 10h12
  5. [VBA] Erreur sur changement de coleur
    Par darkphenx dans le forum Access
    R�ponses: 2
    Dernier message: 17/10/2006, 15h28

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