OVH Cloud OVH Cloud

Créer un serveur Automation

9 réponses
Avatar
Christian HUBERT-HUGOUD- Xtrem7
Bonjour,

Je voudrais fournir à des documents Word (par exemple) des images venues de
mon app (il y en a plus de 300 différentes, que l'utilisateur peut choisir).

J'avais envisagé le DDE, mais je suis maintenant plus intéressé à le faire
via Automation.

J'ai regardé mes docs, et je n'ai rien trouvé de très concret pour démarrer
le projet.

Je bénéficie d'une bonne expérience dans la création de contrôles ActiveX,
mais je ne connais pas les grands principes de ce que je veux faire.

Pouvez-vous m'éclairer dans les grandes lignes, ou encore m'indiquer une
référence de bouquin ; entre autre :

comment cela se passera-t-il dans Word ? Je voudrais un truc basique pour
les clients (ils sont peu doués pour l'informatique).
l'ActiveX fournit ses prestations ; au travers de quoi (fonctions,
propriétés, directement une picturebox...)
etc...

Merci d'avance.

Cordialement

Christian Hubert-Hugoud

9 réponses

Avatar
Josselin Jouannet
Bonjour

Si tu veux faire de Ole Automation

1 déclarer la reference de word dans vb (projet ->reference-> word(je te
conseil d'utilisé la référence la plus ancienne ex word 97 pour la
compatibilité ascendante de ton appli)

2 décalré ton objet (n'oublions pas ole = object link embeded)
exemple avec ms project mais ça marche pour tout office

Public AppliProj As MSProject.Application

3 ouvrir project

Public Sub OpenProject(
'---------------------------------------------------------------------------------------
' Objet : Creer une instance de Ms Project
' Retourne : Nothin
'---------------------------------------------------------------------------------------
Set AppliProj = CreateObject("MsProject.application")
End Sub

et voila maintenant tu peux tout piloté de puis vb, de plus vu que l'objet
project est instancié tu as accès a ces méthodes et attributs (et en plus
documenté merci MS).

par exemple créer un nouveau projet

AppliProj.Application.FileNew

dernier conseil si tu cherche une instrucion particuliere tu peux creer une
macros, et allez voir ce qui a été généré en vba avec vb editor de ton
logiciel office, pour t'en inspirer dans ton code vb.

@+



"Christian HUBERT-HUGOUD- Xtrem7" a écrit :

Bonjour,

Je voudrais fournir à des documents Word (par exemple) des images venues de
mon app (il y en a plus de 300 différentes, que l'utilisateur peut choisir).

J'avais envisagé le DDE, mais je suis maintenant plus intéressé à le faire
via Automation.

J'ai regardé mes docs, et je n'ai rien trouvé de très concret pour démarrer
le projet.

Je bénéficie d'une bonne expérience dans la création de contrôles ActiveX,
mais je ne connais pas les grands principes de ce que je veux faire.

Pouvez-vous m'éclairer dans les grandes lignes, ou encore m'indiquer une
référence de bouquin ; entre autre :

comment cela se passera-t-il dans Word ? Je voudrais un truc basique pour
les clients (ils sont peu doués pour l'informatique).
l'ActiveX fournit ses prestations ; au travers de quoi (fonctions,
propriétés, directement une picturebox...)
etc...

Merci d'avance.

Cordialement

Christian Hubert-Hugoud





Avatar
Christian HUBERT-HUGOUD- Xtrem7
Merci. Cela, je sais faire. C'est dans l'autre sens que je voudrais faire
les choses :

je suis dans Word (ou autre).

je place une image dans mon document, et cette image m'est fournie par
l'application vb.

Qu'en penses-tu ?

Cordialement

Christian Hubert-Hugoud

"Josselin Jouannet" a écrit
dans le message de
news:
Bonjour

Si tu veux faire de Ole Automation

1 déclarer la reference de word dans vb (projet ->reference-> word(je te
conseil d'utilisé la référence la plus ancienne ex word 97 pour la
compatibilité ascendante de ton appli)

2 décalré ton objet (n'oublions pas ole = object link embeded)
exemple avec ms project mais ça marche pour tout office

Public AppliProj As MSProject.Application

3 ouvrir project

Public Sub OpenProject()



'---------------------------------------------------------------------------
------------
' Objet : Creer une instance de Ms Project
' Retourne : Nothing



'---------------------------------------------------------------------------
------------
Set AppliProj = CreateObject("MsProject.application")
End Sub

et voila maintenant tu peux tout piloté de puis vb, de plus vu que l'objet
project est instancié tu as accès a ces méthodes et attributs (et en plus
documenté merci MS).

par exemple créer un nouveau projet

AppliProj.Application.FileNew

dernier conseil si tu cherche une instrucion particuliere tu peux creer


une
macros, et allez voir ce qui a été généré en vba avec vb editor de ton
logiciel office, pour t'en inspirer dans ton code vb.

@+



"Christian HUBERT-HUGOUD- Xtrem7" a écrit :

> Bonjour,
>
> Je voudrais fournir à des documents Word (par exemple) des images venues


de
> mon app (il y en a plus de 300 différentes, que l'utilisateur peut


choisir).
>
> J'avais envisagé le DDE, mais je suis maintenant plus intéressé à le


faire
> via Automation.
>
> J'ai regardé mes docs, et je n'ai rien trouvé de très concret pour


démarrer
> le projet.
>
> Je bénéficie d'une bonne expérience dans la création de contrôles


ActiveX,
> mais je ne connais pas les grands principes de ce que je veux faire.
>
> Pouvez-vous m'éclairer dans les grandes lignes, ou encore m'indiquer une
> référence de bouquin ; entre autre :
>
> comment cela se passera-t-il dans Word ? Je voudrais un truc basique


pour
> les clients (ils sont peu doués pour l'informatique).
> l'ActiveX fournit ses prestations ; au travers de quoi (fonctions,
> propriétés, directement une picturebox...)
> etc...
>
> Merci d'avance.
>
> Cordialement
>
> Christian Hubert-Hugoud
>
>
>


Avatar
Josselin Jouannet
C'est plus délicat dans ce cas tu dois passer par du VBA dans word, le
problème c'est que le VBA ne permet pas toute la libertée de VB, et n'est pas
compiler (genre qui c'est qu'a mis les mains dans mes macros :-[ ), si
j'etait dans ton cas je chercherais plutot à créer un composant activx que je
poserait sur mon document word.
j'espere que sa t'aideras un peu
@+

"Christian HUBERT-HUGOUD- Xtrem7" a écrit :

Merci. Cela, je sais faire. C'est dans l'autre sens que je voudrais faire
les choses :

je suis dans Word (ou autre).

je place une image dans mon document, et cette image m'est fournie par
l'application vb.

Qu'en penses-tu ?

Cordialement

Christian Hubert-Hugoud

"Josselin Jouannet" a écrit
dans le message de
news:
> Bonjour
>
> Si tu veux faire de Ole Automation
>
> 1 déclarer la reference de word dans vb (projet ->reference-> word(je te
> conseil d'utilisé la référence la plus ancienne ex word 97 pour la
> compatibilité ascendante de ton appli)
>
> 2 décalré ton objet (n'oublions pas ole = object link embeded)
> exemple avec ms project mais ça marche pour tout office
>
> Public AppliProj As MSProject.Application
>
> 3 ouvrir project
>
> Public Sub OpenProject()
>
'---------------------------------------------------------------------------
------------
> ' Objet : Creer une instance de Ms Project
> ' Retourne : Nothing
>
'---------------------------------------------------------------------------
------------
> Set AppliProj = CreateObject("MsProject.application")
> End Sub
>
> et voila maintenant tu peux tout piloté de puis vb, de plus vu que l'objet
> project est instancié tu as accès a ces méthodes et attributs (et en plus
> documenté merci MS).
>
> par exemple créer un nouveau projet
>
> AppliProj.Application.FileNew
>
> dernier conseil si tu cherche une instrucion particuliere tu peux creer
une
> macros, et allez voir ce qui a été généré en vba avec vb editor de ton
> logiciel office, pour t'en inspirer dans ton code vb.
>
> @+
>
>
>
> "Christian HUBERT-HUGOUD- Xtrem7" a écrit :
>
> > Bonjour,
> >
> > Je voudrais fournir à des documents Word (par exemple) des images venues
de
> > mon app (il y en a plus de 300 différentes, que l'utilisateur peut
choisir).
> >
> > J'avais envisagé le DDE, mais je suis maintenant plus intéressé à le
faire
> > via Automation.
> >
> > J'ai regardé mes docs, et je n'ai rien trouvé de très concret pour
démarrer
> > le projet.
> >
> > Je bénéficie d'une bonne expérience dans la création de contrôles
ActiveX,
> > mais je ne connais pas les grands principes de ce que je veux faire.
> >
> > Pouvez-vous m'éclairer dans les grandes lignes, ou encore m'indiquer une
> > référence de bouquin ; entre autre :
> >
> > comment cela se passera-t-il dans Word ? Je voudrais un truc basique
pour
> > les clients (ils sont peu doués pour l'informatique).
> > l'ActiveX fournit ses prestations ; au travers de quoi (fonctions,
> > propriétés, directement une picturebox...)
> > etc...
> >
> > Merci d'avance.
> >
> > Cordialement
> >
> > Christian Hubert-Hugoud
> >
> >
> >





Avatar
Christian HUBERT-HUGOUD- Xtrem7
Merci. Je continue à investiguer.

Cordialement

Christian Hubert-Hugoud

"Josselin Jouannet" a écrit
dans le message de
news:
C'est plus délicat dans ce cas tu dois passer par du VBA dans word, le
problème c'est que le VBA ne permet pas toute la libertée de VB, et n'est


pas
compiler (genre qui c'est qu'a mis les mains dans mes macros :-[ ), si
j'etait dans ton cas je chercherais plutot à créer un composant activx que


je
poserait sur mon document word.
j'espere que sa t'aideras un peu
@+

"Christian HUBERT-HUGOUD- Xtrem7" a écrit :

> Merci. Cela, je sais faire. C'est dans l'autre sens que je voudrais


faire
> les choses :
>
> je suis dans Word (ou autre).
>
> je place une image dans mon document, et cette image m'est fournie par
> l'application vb.
>
> Qu'en penses-tu ?
>
> Cordialement
>
> Christian Hubert-Hugoud
>
> "Josselin Jouannet" a écrit
> dans le message de
> news:
> > Bonjour
> >
> > Si tu veux faire de Ole Automation
> >
> > 1 déclarer la reference de word dans vb (projet ->reference-> word(je


te
> > conseil d'utilisé la référence la plus ancienne ex word 97 pour la
> > compatibilité ascendante de ton appli)
> >
> > 2 décalré ton objet (n'oublions pas ole = object link embeded)
> > exemple avec ms project mais ça marche pour tout office
> >
> > Public AppliProj As MSProject.Application
> >
> > 3 ouvrir project
> >
> > Public Sub OpenProject()
> >
>


'---------------------------------------------------------------------------
> ------------
> > ' Objet : Creer une instance de Ms Project
> > ' Retourne : Nothing
> >
>


'---------------------------------------------------------------------------
> ------------
> > Set AppliProj = CreateObject("MsProject.application")
> > End Sub
> >
> > et voila maintenant tu peux tout piloté de puis vb, de plus vu que


l'objet
> > project est instancié tu as accès a ces méthodes et attributs (et en


plus
> > documenté merci MS).
> >
> > par exemple créer un nouveau projet
> >
> > AppliProj.Application.FileNew
> >
> > dernier conseil si tu cherche une instrucion particuliere tu peux


creer
> une
> > macros, et allez voir ce qui a été généré en vba avec vb editor de


ton
> > logiciel office, pour t'en inspirer dans ton code vb.
> >
> > @+
> >
> >
> >
> > "Christian HUBERT-HUGOUD- Xtrem7" a écrit :
> >
> > > Bonjour,
> > >
> > > Je voudrais fournir à des documents Word (par exemple) des images


venues
> de
> > > mon app (il y en a plus de 300 différentes, que l'utilisateur peut
> choisir).
> > >
> > > J'avais envisagé le DDE, mais je suis maintenant plus intéressé à le
> faire
> > > via Automation.
> > >
> > > J'ai regardé mes docs, et je n'ai rien trouvé de très concret pour
> démarrer
> > > le projet.
> > >
> > > Je bénéficie d'une bonne expérience dans la création de contrôles
> ActiveX,
> > > mais je ne connais pas les grands principes de ce que je veux faire.
> > >
> > > Pouvez-vous m'éclairer dans les grandes lignes, ou encore m'indiquer


une
> > > référence de bouquin ; entre autre :
> > >
> > > comment cela se passera-t-il dans Word ? Je voudrais un truc basique
> pour
> > > les clients (ils sont peu doués pour l'informatique).
> > > l'ActiveX fournit ses prestations ; au travers de quoi (fonctions,
> > > propriétés, directement une picturebox...)
> > > etc...
> > >
> > > Merci d'avance.
> > >
> > > Cordialement
> > >
> > > Christian Hubert-Hugoud
> > >
> > >
> > >
>
>
>


Avatar
Christian HUBERT-HUGOUD- Xtrem7
Oui et non. Il s'agit du DDE, qui est un sport à hauts risques. Je fais des
tests pour utiliser DDE via les api. Au niveau des textes, cela fonctionne
parfaitement. Mais il faut que je transfert des images...

Cordialement

Christian Hubert-Hugoud

"christophe-pasde<> @wanadoo.fr>" <"christophe-pasde<> a écrit dans le
message de news:41b9ae0a$0$29991$
Je n'utilise pas du tout VBA mais une précisions, peut-on utiliser
declare donc les APIs ?

Au vu de du second post il y a peut-être une solution plus simple en
passant par le presse papier ??

Christophe


Josselin Jouannet a écrit :

> C'est plus délicat dans ce cas tu dois passer par du VBA dans word, le
> problème c'est que le VBA ne permet pas toute la libertée de VB, et


n'est pas
> compiler (genre qui c'est qu'a mis les mains dans mes macros :-[ ), si
> j'etait dans ton cas je chercherais plutot à créer un composant activx


que je
> poserait sur mon document word.
> j'espere que sa t'aideras un peu
> @+
>
> "Christian HUBERT-HUGOUD- Xtrem7" a écrit :
>
>
>>Merci. Cela, je sais faire. C'est dans l'autre sens que je voudrais


faire
>>les choses :
>>
>>je suis dans Word (ou autre).
>>
>>je place une image dans mon document, et cette image m'est fournie par
>>l'application vb.
>>
>>Qu'en penses-tu ?
>>
>>Cordialement
>>
>>Christian Hubert-Hugoud
>>
>>"Josselin Jouannet" a écrit
>>dans le message de
>>news:
>>
>>>Bonjour
>>>
>>>Si tu veux faire de Ole Automation
>>>
>>>1 déclarer la reference de word dans vb (projet ->reference-> word(je


te
>>>conseil d'utilisé la référence la plus ancienne ex word 97 pour la
>>>compatibilité ascendante de ton appli)
>>>
>>>2 décalré ton objet (n'oublions pas ole = object link embeded)
>>>exemple avec ms project mais ça marche pour tout office
>>>
>>>Public AppliProj As MSProject.Application
>>>
>>>3 ouvrir project
>>>
>>>Public Sub OpenProject()
>>>
>>

'-------------------------------------------------------------------------




--
>>------------
>>
>>>' Objet : Creer une instance de Ms Project
>>>' Retourne : Nothing
>>>
>>

'-------------------------------------------------------------------------




--
>>------------
>>
>>>Set AppliProj = CreateObject("MsProject.application")
>>>End Sub
>>>
>>>et voila maintenant tu peux tout piloté de puis vb, de plus vu que


l'objet
>>>project est instancié tu as accès a ces méthodes et attributs (et en


plus
>>>documenté merci MS).
>>>
>>>par exemple créer un nouveau projet
>>>
>>>AppliProj.Application.FileNew
>>>
>>>dernier conseil si tu cherche une instrucion particuliere tu peux creer
>>
>>une
>>
>>>macros, et allez voir ce qui a été généré en vba avec vb editor de ton
>>>logiciel office, pour t'en inspirer dans ton code vb.
>>>
>>>@+
>>>
>>>
>>>
>>>"Christian HUBERT-HUGOUD- Xtrem7" a écrit :
>>>
>>>
>>>>Bonjour,
>>>>
>>>>Je voudrais fournir à des documents Word (par exemple) des images


venues
>>
>>de
>>
>>>>mon app (il y en a plus de 300 différentes, que l'utilisateur peut
>>
>>choisir).
>>
>>>>J'avais envisagé le DDE, mais je suis maintenant plus intéressé à le
>>
>>faire
>>
>>>>via Automation.
>>>>
>>>>J'ai regardé mes docs, et je n'ai rien trouvé de très concret pour
>>
>>démarrer
>>
>>>>le projet.
>>>>
>>>>Je bénéficie d'une bonne expérience dans la création de contrôles
>>
>>ActiveX,
>>
>>>>mais je ne connais pas les grands principes de ce que je veux faire.
>>>>
>>>>Pouvez-vous m'éclairer dans les grandes lignes, ou encore m'indiquer


une
>>>>référence de bouquin ; entre autre :
>>>>
>>>>comment cela se passera-t-il dans Word ? Je voudrais un truc basique
>>
>>pour
>>
>>>>les clients (ils sont peu doués pour l'informatique).
>>>>l'ActiveX fournit ses prestations ; au travers de quoi (fonctions,
>>>>propriétés, directement une picturebox...)
>>>>etc...
>>>>
>>>>Merci d'avance.
>>>>
>>>>Cordialement
>>>>
>>>>Christian Hubert-Hugoud
>>>>
>>>>
>>>>
>>
>>
>>


Avatar
christophe-pasde
Je n'utilise pas du tout VBA mais une précisions, peut-on utiliser
declare donc les APIs ?

Au vu de du second post il y a peut-être une solution plus simple en
passant par le presse papier ??

Christophe


Josselin Jouannet a écrit :

C'est plus délicat dans ce cas tu dois passer par du VBA dans word, le
problème c'est que le VBA ne permet pas toute la libertée de VB, et n'est pas
compiler (genre qui c'est qu'a mis les mains dans mes macros :-[ ), si
j'etait dans ton cas je chercherais plutot à créer un composant activx que je
poserait sur mon document word.
j'espere que sa t'aideras un peu
@+

"Christian HUBERT-HUGOUD- Xtrem7" a écrit :


Merci. Cela, je sais faire. C'est dans l'autre sens que je voudrais faire
les choses :

je suis dans Word (ou autre).

je place une image dans mon document, et cette image m'est fournie par
l'application vb.

Qu'en penses-tu ?

Cordialement

Christian Hubert-Hugoud

"Josselin Jouannet" a écrit
dans le message de
news:

Bonjour

Si tu veux faire de Ole Automation

1 déclarer la reference de word dans vb (projet ->reference-> word(je te
conseil d'utilisé la référence la plus ancienne ex word 97 pour la
compatibilité ascendante de ton appli)

2 décalré ton objet (n'oublions pas ole = object link embeded)
exemple avec ms project mais ça marche pour tout office

Public AppliProj As MSProject.Application

3 ouvrir project

Public Sub OpenProject()




'---------------------------------------------------------------------------
------------

' Objet : Creer une instance de Ms Project
' Retourne : Nothing




'---------------------------------------------------------------------------
------------

Set AppliProj = CreateObject("MsProject.application")
End Sub

et voila maintenant tu peux tout piloté de puis vb, de plus vu que l'objet
project est instancié tu as accès a ces méthodes et attributs (et en plus
documenté merci MS).

par exemple créer un nouveau projet

AppliProj.Application.FileNew

dernier conseil si tu cherche une instrucion particuliere tu peux creer



une

macros, et allez voir ce qui a été généré en vba avec vb editor de ton
logiciel office, pour t'en inspirer dans ton code vb.

@+



"Christian HUBERT-HUGOUD- Xtrem7" a écrit :


Bonjour,

Je voudrais fournir à des documents Word (par exemple) des images venues





de

mon app (il y en a plus de 300 différentes, que l'utilisateur peut





choisir).

J'avais envisagé le DDE, mais je suis maintenant plus intéressé à le





faire

via Automation.

J'ai regardé mes docs, et je n'ai rien trouvé de très concret pour





démarrer

le projet.

Je bénéficie d'une bonne expérience dans la création de contrôles





ActiveX,

mais je ne connais pas les grands principes de ce que je veux faire.

Pouvez-vous m'éclairer dans les grandes lignes, ou encore m'indiquer une
référence de bouquin ; entre autre :

comment cela se passera-t-il dans Word ? Je voudrais un truc basique





pour

les clients (ils sont peu doués pour l'informatique).
l'ActiveX fournit ses prestations ; au travers de quoi (fonctions,
propriétés, directement une picturebox...)
etc...

Merci d'avance.

Cordialement

Christian Hubert-Hugoud














Avatar
Patrick Philippot
Christian HUBERT-HUGOUD- Xtrem7 wrote:
Je voudrais fournir à des documents Word (par exemple) des images
venues de mon app (il y en a plus de 300 différentes, que
l'utilisateur peut choisir).

J'avais envisagé le DDE, mais je suis maintenant plus intéressé à le
faire via Automation.



Bonjour,

Je vois que j'ai été convaincant :-))

Je n'ai pas d'exemple sous la main et pas trop le temps de tester du
code mais je pense que pour faire cela, je m'organiserais de la manière
suivante:

Méthode ne fonctionnant qu'avec un serveur de type DLL
----------------------------------------------------------

1. Création d'une ActiveX DLL (le meilleur choix si votre application
n'a pas d'intérêt en soi, autre que de servir des images).

2. Exposition par le serveur Automation ainsi créé d'une méthode qui
retournerait une interface IPicture ou un objet StdPicture
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/htm/ctin_p_482t.asp).
Cette interface IPicture représenterait en fait une image créée par
votre serveur sur appel de cette méthode, en fonction des arguments reçu
par la méthode. IPicture représente en fait une StdPicture.

3. Tout client COM, donc a fortiori une macro Word ou Excel (invoquée
via un menu spécifique), pourrait instancier l'objet serveur, appeler la
méthode décrite ci-dessus et récupérer l'interface IPicture. A partir de
là, la macro fait ce qu'elle veut avec l'image.

Le problème avec cette méthode est que l'on ne peut pas faire un
marshalling cross-process de IPicture car certaines méthodes
retourneraient des infos non viables pour le client (comme le handle de
la bitmap qui n'a de sens que pour le process créateur de la
StdPicture). Ceci interdit donc un serveur de type EXE.

Méthodes fonctionnant avec un serveur de type DLL ou EXE
-------------------------------------------------------------

Méthode #1: Au lieu d'exposer une méthode qui retourne une interface
IPicture, charger l'image dans un ByteArray (stocké dans un variant) et
passez ce ByteArray au client qui va se charger de reconstituer l'image.
Mais ça ne va être incroyablement simple dans une macro Word.

Méthode #2: Sérialisez l'image (StdPicture) dans un propertry bag,
transférez la propriété Contents du property bag dans un ByteArray et
passez au client. Côté client, on charge le ByteArray dans la propriété
Contents d'un nouveau property bag et on désérialise en tant que
StdPicture.

Considérez ceci comme quelques pistes à suivre et à tester.

Ce code devrait vous aider un peu quoique l'exemple est le contraire de
ce que vous cherchez à faire (Excel est le serveur):
http://www.thecodeproject.com/com/ComExcelImages.asp
Mais le fonctionnement est voisin de toutes façons.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Christian HUBERT-HUGOUD- Xtrem7
Merci de vos réponses, je vais investiguer tout cela.

Cordialement

Christian Hubert-Hugoud

"Patrick Philippot" a écrit dans le
message de news:
Christian HUBERT-HUGOUD- Xtrem7 wrote:
> Je voudrais fournir à des documents Word (par exemple) des images
> venues de mon app (il y en a plus de 300 différentes, que
> l'utilisateur peut choisir).
>
> J'avais envisagé le DDE, mais je suis maintenant plus intéressé à le
> faire via Automation.

Bonjour,

Je vois que j'ai été convaincant :-))

Je n'ai pas d'exemple sous la main et pas trop le temps de tester du
code mais je pense que pour faire cela, je m'organiserais de la manière
suivante:

Méthode ne fonctionnant qu'avec un serveur de type DLL
----------------------------------------------------------

1. Création d'une ActiveX DLL (le meilleur choix si votre application
n'a pas d'intérêt en soi, autre que de servir des images).

2. Exposition par le serveur Automation ainsi créé d'une méthode qui
retournerait une interface IPicture ou un objet StdPicture



(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/htm/ct
in_p_482t.asp).
Cette interface IPicture représenterait en fait une image créée par
votre serveur sur appel de cette méthode, en fonction des arguments reçu
par la méthode. IPicture représente en fait une StdPicture.

3. Tout client COM, donc a fortiori une macro Word ou Excel (invoquée
via un menu spécifique), pourrait instancier l'objet serveur, appeler la
méthode décrite ci-dessus et récupérer l'interface IPicture. A partir de
là, la macro fait ce qu'elle veut avec l'image.

Le problème avec cette méthode est que l'on ne peut pas faire un
marshalling cross-process de IPicture car certaines méthodes
retourneraient des infos non viables pour le client (comme le handle de
la bitmap qui n'a de sens que pour le process créateur de la
StdPicture). Ceci interdit donc un serveur de type EXE.

Méthodes fonctionnant avec un serveur de type DLL ou EXE
-------------------------------------------------------------

Méthode #1: Au lieu d'exposer une méthode qui retourne une interface
IPicture, charger l'image dans un ByteArray (stocké dans un variant) et
passez ce ByteArray au client qui va se charger de reconstituer l'image.
Mais ça ne va être incroyablement simple dans une macro Word.

Méthode #2: Sérialisez l'image (StdPicture) dans un propertry bag,
transférez la propriété Contents du property bag dans un ByteArray et
passez au client. Côté client, on charge le ByteArray dans la propriété
Contents d'un nouveau property bag et on désérialise en tant que
StdPicture.

Considérez ceci comme quelques pistes à suivre et à tester.

Ce code devrait vous aider un peu quoique l'exemple est le contraire de
ce que vous cherchez à faire (Excel est le serveur):
http://www.thecodeproject.com/com/ComExcelImages.asp
Mais le fonctionnement est voisin de toutes façons.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr




Avatar
lou
salut
pour copier une image qui se trouve sur ton form vers word

Private Sub Commande20_Click()
Dim W_App As Object
Set W_App = CreateObject("Word.Application")
With W_App
.Visible = True 'ou FALSE
.Documents.Add
Me.ImageOLE.Action = 4
.Selection.Paste
' .ActiveDocument.Saveas "c:doc1.doc"
' .Quit
End With
Set W_App = Nothing
End Sub

"Christian HUBERT-HUGOUD- Xtrem7" a écrit dans le
message de news: cpcg0g$61o$
Merci de vos réponses, je vais investiguer tout cela.

Cordialement

Christian Hubert-Hugoud

"Patrick Philippot" a écrit dans le
message de news:
> Christian HUBERT-HUGOUD- Xtrem7 wrote:
> > Je voudrais fournir à des documents Word (par exemple) des images
> > venues de mon app (il y en a plus de 300 différentes, que
> > l'utilisateur peut choisir).
> >
> > J'avais envisagé le DDE, mais je suis maintenant plus intéressé à le
> > faire via Automation.
>
> Bonjour,
>
> Je vois que j'ai été convaincant :-))
>
> Je n'ai pas d'exemple sous la main et pas trop le temps de tester du
> code mais je pense que pour faire cela, je m'organiserais de la manière
> suivante:
>
> Méthode ne fonctionnant qu'avec un serveur de type DLL
> ----------------------------------------------------------
>
> 1. Création d'une ActiveX DLL (le meilleur choix si votre application
> n'a pas d'intérêt en soi, autre que de servir des images).
>
> 2. Exposition par le serveur Automation ainsi créé d'une méthode qui
> retournerait une interface IPicture ou un objet StdPicture
>



(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/com/htm/ct
in_p_482t.asp).
> Cette interface IPicture représenterait en fait une image créée par
> votre serveur sur appel de cette méthode, en fonction des arguments reçu
> par la méthode. IPicture représente en fait une StdPicture.
>
> 3. Tout client COM, donc a fortiori une macro Word ou Excel (invoquée
> via un menu spécifique), pourrait instancier l'objet serveur, appeler la
> méthode décrite ci-dessus et récupérer l'interface IPicture. A partir de
> là, la macro fait ce qu'elle veut avec l'image.
>
> Le problème avec cette méthode est que l'on ne peut pas faire un
> marshalling cross-process de IPicture car certaines méthodes
> retourneraient des infos non viables pour le client (comme le handle de
> la bitmap qui n'a de sens que pour le process créateur de la
> StdPicture). Ceci interdit donc un serveur de type EXE.
>
> Méthodes fonctionnant avec un serveur de type DLL ou EXE
> -------------------------------------------------------------
>
> Méthode #1: Au lieu d'exposer une méthode qui retourne une interface
> IPicture, charger l'image dans un ByteArray (stocké dans un variant) et
> passez ce ByteArray au client qui va se charger de reconstituer l'image.
> Mais ça ne va être incroyablement simple dans une macro Word.
>
> Méthode #2: Sérialisez l'image (StdPicture) dans un propertry bag,
> transférez la propriété Contents du property bag dans un ByteArray et
> passez au client. Côté client, on charge le ByteArray dans la propriété
> Contents d'un nouveau property bag et on désérialise en tant que
> StdPicture.
>
> Considérez ceci comme quelques pistes à suivre et à tester.
>
> Ce code devrait vous aider un peu quoique l'exemple est le contraire de
> ce que vous cherchez à faire (Excel est le serveur):
> http://www.thecodeproject.com/com/ComExcelImages.asp
> Mais le fonctionnement est voisin de toutes façons.
>
> --
> Patrick Philippot - Microsoft MVP
> MainSoft Consulting Services
> www.mainsoft.fr
>
>