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

API, COM et SDKs Delphi Discussion :

[COM] Comment utiliser les événements Word ?


Sujet :

API, COM et SDKs Delphi

  1. #1
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut [COM] Comment utiliser les événements Word ?
    Salut,
    j'aimerais savoir comment faire pour utiliser les événements d'un objet Word en OleAutomation en particulier et les événements d'un objet COM en général ?

    J'aimerai "relier" une procédure à un événement de type DocumentBeforePrint.

    Extrait de word2000.pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
     ApplicationEvents2 = dispinterface
        ['{000209FE-0000-0000-C000-000000000046}']
        procedure Startup {Flags(2), (0/0) CC:0, INV:1, DBG:4}; dispid 1;
        procedure Quit {Flags(2), (0/0) CC:0, INV:1, DBG:4}; dispid 2;
        procedure DocumentChange {Flags(2), (0/0) CC:0, INV:1, DBG:4}; dispid 3;
        procedure DocumentOpen {Flags(2), (1/1) CC:0, INV:1, DBG:4}({VT_29:1}const Doc: WordDocument); dispid 4;
        procedure DocumentBeforeClose {Flags(2), (2/2) CC:0, INV:1, DBG:4}({VT_29:1}const Doc: WordDocument; 
                                                                           {VT_11:1}var Cancel: WordBool); dispid 6;
        procedure DocumentBeforePrint {Flags(2), (2/2) CC:0, INV:1, DBG:4}({VT_29:1}const Doc: WordDocument; 
                                                                           {VT_11:1}var Cancel: WordBool); dispid 7;
    ...
    Je n'ai rien trouvé sur le sujet dans les tutoriaux ou alors %-( ...

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Rergarde dans l'aide de word

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    685
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 685
    Points : 1 608
    Points
    1 608
    Par défaut
    Salut !

    Je n'ai rien trouvé sur le sujet dans les tutoriaux ou alors %-( ...
    Les événements en COM sont d'après ce que j'ai lu assez (voir très) difficiles à maîtriser. Je ne sais pas si ca peux t'aider, mais il me semble que le sujet est abordé dans le livre "Delphi 6" de Steeve Paxecho et Xavier Texeira (de mémoire, alors les noms peuvent être inexacts..), en Francais.

    Bon courage !
    "It's more fun to compute !"

  4. #4
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Non, ce n'est pas si compliqué que ça, c'est juste un peu plus complexe que les événements VCL car plusieurs objets peuvent être connectés au même événement.
    Voici un article (en anglais) explicant leur fonctionnement : http://bdn.borland.com/article/0,1410,27126,00.html

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par portu
    Rergarde dans l'aide de word
    Dans ce que je recherche elle ne m'est pas d'un grand secours .

    Citation Envoyé par Reisubar
    mais il me semble que le sujet est abordé dans le livre "Delphi 6" de Steeve Paxecho et Xavier Texeira (de mémoire, alors les noms peuvent être inexacts..), en Francais.
    Bon courage !
    Merci je faire un tour à la FNAC ...
    Citation Envoyé par Reisubar
    Bon courage !
    Pour débuter avec COM c'est un pré-requis !

    Citation Envoyé par Pierre Castelain
    Voici un article (en anglais)
    Effectivement je n'ai pas eu le réflexe de regarder sur le site de Borland.
    Mais une petite piqûre de rappel ça fait pas de mal !
    , je vais lire avidement cet article !


  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Après la lecture de l'article mentionné précédemment j'ai qq questions
    l'auteur indique :
    As I said earlier, the InterfaceConnect() method is easier to use, but you lose some functionality and understanding.
    1 si je comprend bien il indique que la méthode InterfaceConnect est plus facile à employer, mais qu'on perd en fonctionnalités et en compréhension.
    Je ne comprend pas bien ce qu'il veut dire ,i.e par rapport à quoi est-ce qu'elle plus facile à employer, existe-t-il une autre manière de faire ?

    2 Pour les méthode non implémentée, l'utilisation de E_NOTIMPL au lieu de S_OK n'est il pas préférable ?

    3 Comment enregistrer le serveur COM via un setup, sans devoir l'exécuter ? Doit-on ajouter du code pour un enregistrement implicite ?
    Cas où je souhaite tracer les modifications sur le système ( cf intégration Tse/Citrix).

    4 Cette gestion d'événement peut-elle être placée dans un thread ? si oui, quelles précautions prendre ?

    Une derniére pour la route
    5 Comment vérifier la libération d’un objet COM ( visualiser son compteur ) ?

    Merci

    PS:
    Dans mes recherches j'ai trouvé cet outil :
    http://www.techvanguards.com/products/eventsinkimp/

  7. #7
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Citation Envoyé par Laurent Dardenne
    1 si je comprend bien il indique que la méthode InterfaceConnect est plus facile à employer, mais qu'on perd en fonctionnalités et en compréhension.
    Je ne comprend pas bien ce qu'il veut dire ,i.e par rapport à quoi est-ce qu'elle plus facile à employer, existe-t-il une autre manière de faire ?
    Je pense que l'auteur veut dire que la procédure InterfaceConnect fournie par Delphi est plus simple à utiliser que d'appeler les méthodes des interfaces.
    Citation Envoyé par Laurent Dardenne
    2 Pour les méthode non implémentée, l'utilisation de E_NOTIMPL au lieu de S_OK n'est il pas préférable ?
    Ca dépend des cas. La question est de savoir comment va réagir le code qui appelle une méthode "non-implémentée". Dans certains cas le fait de récupérer NOT_IMPL sera considéré comme normal et géré, dans d'autres cela peut déclencher une erreur. C'est donc plus un problème de spécifications qu'autre chose.
    Citation Envoyé par Laurent Dardenne
    3 Comment enregistrer le serveur COM via un setup, sans devoir l'exécuter ? Doit-on ajouter du code pour un enregistrement implicite ?
    Cas où je souhaite tracer les modifications sur le système ( cf intégration Tse/Citrix).
    Ca dépend du type de serveur, mais en principe tu peux toujours utiliser la commande regsvr32 fournie avec Windows. Il existe aussi un équivalent dans le dossier bin de Delphi : tregsvr.
    Citation Envoyé par Laurent Dardenne
    4 Cette gestion d'événement peut-elle être placée dans un thread ? si oui, quelles précautions prendre ?
    A priori, je n'y vosi pas d'inconvénient, mais je n'y vois pas non plus d'intérêt...
    Citation Envoyé par Laurent Dardenne
    5 Comment vérifier la libération d’un objet COM ( visualiser son compteur ) ?
    Rien n'est prévu en standard (à ma connaissance). Si tu veux voir les compteurs de référence, il faut que tu écrives tes propres co-classes implémentant AddRef et ReleaseRef.

  8. #8
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Pierre Castelain
    Citation Envoyé par Laurent Dardenne
    3 Comment enregistrer le serveur COM via un setup, sans devoir l'exécuter ? Doit-on ajouter du code pour un enregistrement implicite ?
    Cas où je souhaite tracer les modifications sur le système ( cf intégration Tse/Citrix).
    Ca dépend du type de serveur, mais en principe tu peux toujours utiliser la commande regsvr32 fournie avec Windows. Il existe aussi un équivalent dans le dossier bin de Delphi : tregsvr.
    Comment ce fait-il que le serveur ( cf article) s'enregistre sans que j'ai besoin de faire quoi que soit ?
    Effectivement pour les Serveurs dans une DLL je dois les enregistrer via regsvr32.

    Merci pour ces infos me voilà parer pour aller plus loin !

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

Discussions similaires

  1. [HTTP] Comment utiliser les POST par programation
    Par Popof dans le forum Général Conception Web
    Réponses: 9
    Dernier message: 31/01/2005, 09h14
  2. Réponses: 4
    Dernier message: 13/12/2004, 20h37
  3. Réponses: 11
    Dernier message: 22/12/2003, 21h06
  4. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    Réponses: 3
    Dernier message: 05/10/2003, 19h47

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