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 :

Propriété des ActiveX


Sujet :

MFC

  1. #1
    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
    Points : 16 075
    Points
    16 075
    Par défaut Propriété des ActiveX
    Je souhaite rajouter une propriété à mon ActiveX sans passer par le ClassWizard (pb de compatibilité binaire), donc je modifie dans l'odl, dans le .h et le .cpp tout va bien jusqu'a ce que je veuille lui mettre une propriété par défaut.

    Pour ca, dans la méthode DoPropExchange(CPropExchange* pPX) , je positionne la valeur grace aux fonctions PX_Bool, PX_String, et autres ...

    Ce que je ne comprends pas, debugger à l'apuis, c'est que suivant l'endroit où je mets mon PX_Bool, (avant, apres, ou entre d'autres PX...) je n'obtiens pas la meme valeur d'initialisation.

    Quelqu'un sait comment résoudre le mystère du PX_Bool ??

    Merci de 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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut ,
    moi je fais comme ça:
    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
     
    void CMyCtrl::DoPropExchange(CPropExchange* pPX)
    {
    	ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
    	COleControl::DoPropExchange(pPX);
     
    	// TODO: Call PX_ functions for each persistent custom property.
    	CString *pstrCaption =(CString *)&((CString &)InternalGetText());
    	if(pPX->GetVersion()>= (DWORD)MAKELONG(_wVerMinor, _wVerMajor))
    	{		
    		PX_Bool(pPX,_T("Fond"),m_fond,0);
    	}
    	else
    	if(pPX->IsLoading())
    	{				
    		PX_Bool(pPX,_T("Fond"),b,0);
    	}
    }
    bien que je trouve dangerous de rajouter des properties sans passer par classwizard.

  3. #3
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    Salut,

    en fait, je fais la meme chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          PX_Bool(pPX,_T("ScrollMarks"),m_scrollMarks, TRUE);
          PX_String(pPX,_T("PictureString"), picture_string_);
          PX_Short(pPX,_T("SessionRights"), m_sessionRights,0);
          PX_Color(pPX,_T("StampColor"),m_stampColor, RGB(0,0,0));
    mais si par exemple, je change l'ordre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          PX_Color(pPX,_T("StampColor"),m_stampColor, RGB(0,0,0));    
          PX_String(pPX,_T("PictureString"), picture_string_);
          PX_Bool(pPX,_T("ScrollMarks"),m_scrollMarks, TRUE);
          PX_Short(pPX,_T("SessionRights"), m_sessionRights,0);
    et bien le debugger me dit que les variables ne prennent pas la meme valeur que dans le premier cas. C'est ca que je ne comprends pas, comment savoir quel ordre est le bon ?

    (je voudrais bien utiliser le ClassWizard, mais si je le fais pas, c'est pour garder la compatibilité binaire, et éviter de recompiler le logiciel qui utilise l'ActiveX, à moins que tu ne saches comment garder la compatibilité binaire avec le ClassWizard (qui me chamboule toutes mes propriétés))

    Merci

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    salut,
    ton objet graphique existe deja (l'ocx dans la ressource) ?ou c'est quand tu mets un ctrl nouveau dans ta ressources .?
    tu ne peux pas te permettre de changer l'ordre si ton ocx est deja utilise sinon à la mise a jour tu risques d'avoir des pb avec les ressources existantes.(.RC)


  5. #5
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    Salut, je veux simplement rajouter une nouvelle propriété à un OCX déjà existant. Mais je ne manipule pas du tout le .rc, je ne vois pas où d'ailleurs. Je ne veux pas changer l'ordre, je veux simplement savoir o* positionner les lignes de codes qui permettent de prendre en compte ma nouvelle propriété.
    Si je le fais par le class wizard, il me les trie pas ordre alphabétique et me décale donc toutes les propriétés qui commencent par une lettre supérieure à la premiere lettre de ma nouvelle propriété, ce qui fait que le programme qui utilise l'activeX ne sait plus utiliser les bonnes méthodes, sauf si on le recompile avec le nouvel ActiveX, ce que je voudrai éviter.

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    si tu ajoutes une nouvelle propriete tu es oblige de recompiler l'ocx le simple fait de rajouter dans le .odl sans recompiler faussera le rapport en l'ocx et le wrapper de classe generer ce dernier ne sachant pas sauvegarder cette donnée .
    le tri alpha ne doit pas change l'ordre de sauvegarde des proprietes dans la ressource heureusement sinon on est mort si l'ocx est deja utilise.
    un donnee rajouter dans etre mise en queue des proprietes existantes .

  7. #7
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    Bien sur que je recompile l'ocx
    Je parlais du programme qui utilise l'ocx, qu'il puisse continuer à fonctionner tel quel avec le nouvel ocx, qui possède donc une propriété en plus.
    Ce que je veux c'est :
    Ancien programme + ancien OCX = Fonctionne
    Ancien programme + nouvel OCX = Fonctionne toujours
    Nouveau programme + nouvel OCX = Fonctionnera

    Je vais réessayer en recommencant depuis le début, mais théoriquement, si je choisi dans l'odl, un numéro de propriété egal au dernier déja utilisé + 1, et que dans le .h je rajoute l'entete des fonctions à la fin, et que dans le .cpp, je précise le Px_bool en dernier ca devrait fonctionner ?

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    oups j'ai mal lu
    un nouvelle fonctionnalite dans l'ocx (data ou methode ) ne genera en rien les anciens progs puisqu'ils ignorent la nouvelle interface.
    pour les progs utilisants la nouvelle interface une mise a jour du wrapper de classe doit etre realise dans le prog pour disposer de toutes les fonctionnalites de l'ocx.
    ce que je ne comprends pas c'est ton pb de compatibilité binaire evoque au debut.

  9. #9
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    Voilà mon problème :
    un extrait de mon odl avant le class wizard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [id(39)] enum_session_rights SessionRights;
    [id(40)] OLE_COLOR StampColor;
    [id(41)] BSTR StampCaption;
    [id(42)] IFontDisp* StampFont;
    Maintenant, je fais le class wizard pour rajouter une propriété StampFontFromToolbar;
    et voici l'odl généré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [id(24)] enum_session_rights SessionRights;		
    [id(25)] OLE_COLOR StampColor;
    [id(26)] BSTR StampCaption;			
    [id(38)] IFontDisp* StampFont;
    [id(39)] boolean StampFontFromToolbar;
    donc, on se rend bien compte que les numéros sont différents, et ma propriété numéro 42 par exemple, risque fort bien de n'etre plus accessible par le programme qui utilise l'ocx ?
    d'où le pb de compatibilité binaire

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    pourquoi puisque tu passes par le wrapper de classe genere ou mis a jour pour manipuler les proprietes et methodes de l'ocx ?

  11. #11
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    De toutes facons, et je n'ai aucune idée pourquoi, quand j'utilise le class wizard pour rajouter ma propriété, lorsque je pose mon ActiveX dans VB, ca fait tout planter, alors qu'avant ca marchait sans problemes.

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    ah la tu parles de vb mais si tu fais ca avec un project vc ça fonctionne ?,
    parce que moi je ne sais pas comment vb gere les activex .
    il faut etre sure de ne pas melanger les problemes a savoir pb d'integration utilisation dans vb et l'ocx lui même .

  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
    Points : 17 323
    Points
    17 323
    Par défaut
    note :
    que j'ai oublie de repreciser depuis le debut :
    tu peux et dois implementer le versionning pour la lecture des donnees si tu veux eviter le raz des datas ou eventuellement le plantage .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     if(pPX->GetVersion()>= (DWORD)MAKELONG(_wVerMinor, _wVerMajor))
    comme dans mes premiers post

  14. #14
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    rajout sur la gestion des versions pour les datas dans les ocx:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
        COleControl::DoPropExchange(pPX);
       PX_Bool(pPX,_T("ScrollMarks"),m_scrollMarks, TRUE); 
        if (pPX->GetVersion() >= MAKELONG(0, 2))
        {
            PX_Bool(pPX,_T("Fond"),m_fond,0); 
        }
        else
        {
            if (pPX->IsLoading())  m_fond = FALSE;
        }

  15. #15
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    Bon, apres quelques tests, ca a l'air de faire ce que je veux.
    Je suis pas sur de maitriser tous les cas, mais bon, on verra

    Merci en tout cas pour ton aide

    Nico

  16. #16
    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
    Points : 17 323
    Points
    17 323
    Par défaut
    tu a utilise la gestion des versions ?

  17. #17
    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
    Points : 16 075
    Points
    16 075
    Par défaut
    Non, mais je ne pense pas que ce soit ce dont j'ai besoin.
    Et puis je ne vois pas ce que ca m'apporte

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/12/2005, 11h43
  2. [TestStand] Propriétés des pas d'une séquence
    Par capblans dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 20/04/2005, 09h57
  3. Propriétés des cartes réseau
    Par Yodagobah dans le forum MFC
    Réponses: 2
    Dernier message: 05/01/2005, 13h55
  4. Réponses: 4
    Dernier message: 04/08/2004, 13h26
  5. Variable globale / Propriété des threads
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 03/10/2003, 10h49

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